AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Service/Chat/ChatService.swift (64 lines of code) (raw):
//
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
//
import Combine
import Foundation
protocol ChatServiceProtocol {
func initialize() async throws
func disconnectChatService() async throws
func getInitialMessages() async throws -> [ChatMessageInfoModel]
func getMaskedParticipantIds() async throws -> Set<String>
func getListOfParticipants() async throws -> [ParticipantInfoModel]
func getPreviousMessages() async throws -> [ChatMessageInfoModel]
func sendMessage(content: String, senderDisplayName: String) async throws -> String
func editMessage(messageId: String, content: String) async throws
func deleteMessage(messageId: String) async throws
func sendReadReceipt(messageId: String) async throws
func sendTypingIndicator() async throws
var chatEventSubject: PassthroughSubject<ChatEventModel, Never> { get }
}
class ChatService: NSObject, ChatServiceProtocol {
private let logger: Logger
private let chatSDKWrapper: ChatSDKWrapperProtocol
var chatEventSubject: PassthroughSubject<ChatEventModel, Never>
init(logger: Logger,
chatSDKWrapper: ChatSDKWrapperProtocol ) {
self.logger = logger
self.chatSDKWrapper = chatSDKWrapper
self.chatEventSubject = chatSDKWrapper.chatEventsHandler.chatEventSubject
}
func initialize() async throws {
try await chatSDKWrapper.initializeChat()
}
func disconnectChatService() async throws {
try await chatSDKWrapper.unregisterRealTimeNotifications()
}
func getInitialMessages() async throws -> [ChatMessageInfoModel] {
return try await chatSDKWrapper.getInitialMessages()
}
func getMaskedParticipantIds() async throws -> Set<String> {
guard let createdBy = try await chatSDKWrapper.retrieveChatThreadProperties().createdBy else {
return Set<String>()
}
let maskedParticipantIdsSet: Set = [createdBy]
return maskedParticipantIdsSet
}
func getListOfParticipants() async throws -> [ParticipantInfoModel] {
return try await chatSDKWrapper.getListOfParticipants()
}
func getPreviousMessages() async throws -> [ChatMessageInfoModel] {
return try await chatSDKWrapper.getPreviousMessages()
}
func sendMessage(content: String, senderDisplayName: String) async throws -> String {
return try await chatSDKWrapper.sendMessage(content: content, senderDisplayName: senderDisplayName)
}
func editMessage(messageId: String, content: String) async throws {
try await chatSDKWrapper.editMessage(messageId: messageId, content: content)
}
func deleteMessage(messageId: String) async throws {
try await chatSDKWrapper.deleteMessage(messageId: messageId)
}
func sendReadReceipt(messageId: String) async throws {
try await chatSDKWrapper.sendReadReceipt(messageId: messageId)
}
func sendTypingIndicator() async throws {
try await chatSDKWrapper.sendTypingIndicator()
}
}