Перейти к содержанию

ПРОТОКОЛ

TransportDriver

public protocol TransportDriver: AnyObject

Абстрактный Transport Driver API

Описывает все, что способно отправлять сообщения и подписываться на входящие сообщения (например udp сокет). Вопреки некоторым сложностям, связанным с невозможностью отслеживать получения сообщений, это самый простой подход к двунаправленной отправке сообщений, который может быть имплементирован с помощью любого вида сокетов, http+sse и т.д.

Методы

send(meta:data:)

func send(meta: TransportMeta, data: TransportData) async throws

Отправка сообщения с помощью транспорта

Этот метод ожидает, пока сообщение будет отправлено (но не дожидается получения) и отдает в ответ возможна ли его отправка. Можно определить пункт назначения и способ отправки.

Параметры

Имя Описание
meta идентификаторы сообщения
data данные сообщения

Возвращает

void

on(filter:callback:)

func on(filter: TransportFilter, callback: @escaping TransportCallback) -> String

Подписывается на определенные сообщения

Возможна подписка на одни и те же сообщения дважды, что может быть использовано в продвинутых стратегиях фильтрации сообщений

Параметры

Имя Описание
filter фильтр входящего сообщения
callback callback, вызывающийся когда сообщение будет соответствовать фильтру

Возвращает

String

идентификатор подписки, может быть использован для отмены подписки

off(id:data:)

func off(id: String, data: TransportData?)

Отменяет существующую подписку.

Не отрабатывает, если с данным id нет связанной подписки. Если текущий подписчик ждет сообщения, можно использовать необязательное поле data? для решения этой проблемы.

Параметры

Имя Описание
id идентификатор подписки, возвращается после создания
data (опционально) данные сообщения к отправке для коллбэка текущего подписчика

Возвращает

void