FloatChatService.swift 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. //
  2. // FloatChatService.swift
  3. // TUIRoomKit
  4. //
  5. // Created by CY zhao on 2024/5/14.
  6. //
  7. import Foundation
  8. import RTCRoomEngine
  9. import ImSDK_Plus
  10. import TUICore
  11. #if USE_OPENCOMBINE
  12. import OpenCombine
  13. #else
  14. import Combine
  15. #endif
  16. import Factory
  17. class FloatChatService: NSObject {
  18. @WeakLazyInjected(\.floatChatService) private var store: FloatChatStoreProvider?
  19. private let imManager = {
  20. V2TIMManager.sharedInstance()
  21. }()
  22. private var roomId: String? {
  23. self.store?.selectCurrent(FloatChatSelectors.getRoomId)
  24. }
  25. override init() {
  26. super.init()
  27. imManager?.addAdvancedMsgListener(listener: self)
  28. }
  29. func sendGroupMessage(_ message: String) -> AnyPublisher<String, Never> {
  30. return Future<String, Never> { [weak self] promise in
  31. guard let self = self else { return }
  32. self.imManager?.sendGroupTextMessage(text: message, to: self.roomId, priority: .PRIORITY_NORMAL, succ: {
  33. promise(.success((message)))
  34. }, fail: { code, message in
  35. let errorMsg = TUITool.convertIMError(Int(code), msg: message)
  36. //TODO: show toast from store.dispatch
  37. RoomRouter.makeToastInWindow(toast:errorMsg ?? "send message fail", duration: 2)
  38. })
  39. }
  40. .eraseToAnyPublisher()
  41. }
  42. }
  43. extension FloatChatService: V2TIMAdvancedMsgListener {
  44. func onRecvNewMessage(msg: V2TIMMessage!) {
  45. guard msg.groupID == roomId, let msg = msg else { return }
  46. let floatMessage = FloatChatMessage(msg: msg)
  47. store?.dispatch(action: FloatChatActions.onMessageReceived(payload: floatMessage))
  48. }
  49. }