RoomManager.swift 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. //
  2. // RoomManager.swift
  3. // Chat (iOS)
  4. //
  5. // Created by Sergey Tarasov on 17.08.2022.
  6. //
  7. import Foundation
  8. import XMPPFramework
  9. import XMPPFrameworkSwift
  10. class RoomManager: NSObject {
  11. var room: XMPPRoom
  12. var storage: XMPPRoomMemoryStorage
  13. var mam: XMPPMessageArchiveManagement
  14. var messages: [XMPPMessage] = []
  15. init(with jidString: String) {
  16. self.storage = XMPPRoomMemoryStorage()
  17. self.room = XMPPRoom(roomStorage: self.storage, jid: XMPPJID(string: jidString)!)
  18. self.mam = XMPPMessageArchiveManagement()
  19. super.init()
  20. self.room.activate(StreamManager.shared.stream)
  21. self.mam.activate(StreamManager.shared.stream)
  22. self.room.join(usingNickname: StreamManager.shared.stream.myJID?.user ?? "Test", history: nil)
  23. self.room.addDelegate(self, delegateQueue: DispatchQueue.main)
  24. self.mam.addDelegate(self, delegateQueue: DispatchQueue.main)
  25. }
  26. func fetchMessages() {
  27. self.messages.removeAll()
  28. let field = DDXMLElement(name: "field")
  29. field.addAttribute(withName: "var", stringValue: "with")
  30. field.addChild(DDXMLElement(name: "value", stringValue: self.room.roomJID.bare))
  31. self.mam.retrieveMessageArchive(at: nil, withFields: [field], with: nil)
  32. let messages = self.storage.messages() as? [XMPPMessage]
  33. debugPrint(messages ?? "Empty")
  34. }
  35. }
  36. extension RoomManager: XMPPRoomMemoryStorageDelegate {
  37. func xmppRoomMemoryStorage(
  38. _ sender: XMPPRoomMemoryStorage!,
  39. didReceiveMessage message: XMPPRoomMessageMemoryStorageObject!,
  40. fromOccupant occupant: XMPPRoomOccupantMemoryStorageObject!,
  41. at index: UInt,
  42. in allMessages: [Any]!
  43. ) {
  44. debugPrint(message.debugDescription)
  45. }
  46. }
  47. extension RoomManager: XMPPRoomDelegate {
  48. func xmppRoomDidJoin(_ sender: XMPPRoom) {
  49. }
  50. }
  51. extension RoomManager: XMPPMessageArchiveManagementDelegate {
  52. func xmppMessageArchiveManagement(
  53. _ xmppMessageArchiveManagement: XMPPMessageArchiveManagement,
  54. didReceiveMAMMessage message: XMPPMessage
  55. ) {
  56. self.messages.append(message)
  57. }
  58. }