События SDK
События чата
Для отслеживания событий чата, необходимо подписаться на поток messagingEventsStream()
@MainActor
final class ChatViewModel: ObservableObject {
private var eventsTask: Task<Void, Never>?
private var connectionTask: Task<Void, Never>?
func connect() async {
if eventsTask == nil {
let events = await ChatHDE.shared.messagingEventsStream()
eventsTask = Task { @MainActor in
for await event in events {
// Обработать event
}
}
}
if connectionTask == nil {
let states = await ChatHDE.shared.connectionState()
connectionTask = Task { @MainActor in
for await state in states {
// Обработать state
}
}
}
await ChatHDE.shared.connect()
}
func destroy() async {
eventsTask?.cancel()
connectionTask?.cancel()
eventsTask = nil
connectionTask = nil
await ChatHDE.shared.destroy()
}
}
Правила работы с подписками:
- Создавайте подписку до вызова
connect(). - Храните
Taskподписки в свойстве. - Не создавайте новый
Task, пока существует текущий. - Перед
destroy()отменитеTaskподписки. - После
destroy()снова вызовитеconfigure().
События чата включают в себя:
initWidget- Инициирующее сообщение, содержит информацию о чате, пользователе и др.newMessage- Новое сообщение пользователя или агентаprependMessages- Предыдущие сообщенияsetStaff- Агент был назначен (или снят) на чатstartChat- Подтверждение сервера что был начат новый чатticketCreated- Тикет был созданstartVisitorChat- Старт нового чата (после ввода данных пользователя в тикете и нажатия кнопки отправки)loadTicket- Был запрос загрузки предыдущих сообщений тикетаvisitorIsTyping- Пользователь вводит текст сообщенияloadingMessage- Сообщение отправлено но еще не подтверждено серверомcloseChat- Закрытие чатаrateChat- Пользователь оценил чатrateSuccess- Сервер подтвердил оценку чата
Обработка initWidget:
if case .initWidget = event {
print("Init widget")
}
Соединение с сервером
Для отслеживания состояния соединения подпишитесь на connectionState(), как в примере выше.
Состояния соединения включают в себя:
neverConnected- Еще ни разу не был вызван connect()disconnected- Ранее было соединение, но сейчас нетconnecting- Идет подключениеconnected- Соединение установленоerror- Ошибка подключения
Обработка connected:
if case .connected = state {
print("Connected")
}