12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- //
- // RoomManager.swift
- // Chat (iOS)
- //
- // Created by Sergey Tarasov on 17.08.2022.
- //
- import Foundation
- import XMPPFramework
- import XMPPFrameworkSwift
- final class RoomManager: NSObject {
- var room: XMPPRoom
- var storage: XMPPRoomMemoryStorage
- var mam: XMPPMessageArchiveManagement
- var jid: XMPPJID?
- var messages: [XMPPMessage] = []
- init(with jidString: String) {
- self.storage = XMPPRoomMemoryStorage()
- self.room = XMPPRoom(roomStorage: self.storage, jid: XMPPJID(string: jidString)!)
- self.mam = XMPPMessageArchiveManagement()
- super.init()
- self.room.activate(StreamManager.shared.stream)
- self.mam.activate(StreamManager.shared.stream)
- self.room.join(usingNickname: StreamManager.shared.stream.myJID?.user ?? "Test", history: nil)
- self.room.addDelegate(self, delegateQueue: DispatchQueue.main)
- self.mam.addDelegate(self, delegateQueue: DispatchQueue.main)
- }
- func fetchMessages() {
- self.messages.removeAll()
- if self.room.isJoined {
- self.mam.retrieveMessageArchive(at: self.room.roomJID.bareJID, withFields: nil, with: nil)
- } else {
- let field = DDXMLElement(name: "field")
- field.addAttribute(withName: "var", stringValue: "with")
- field.addChild(DDXMLElement(name: "value", stringValue: self.room.roomJID.bare))
- self.mam.retrieveMessageArchive(at: nil, withFields: [field], with: nil)
- }
- }
- func sendMessage(_ text: String) {
- let xmppMessage = XMPPMessage(messageType: room.isJoined ? .chat : .normal, to: self.room.roomJID.bareJID)
- xmppMessage.addBody(text)
- if self.room.isJoined {
- self.room.send(xmppMessage)
- } else {
- StreamManager.shared.stream.send(xmppMessage)
- }
- }
- }
- extension RoomManager: XMPPRoomMemoryStorageDelegate {
- func xmppRoomMemoryStorage(
- _ sender: XMPPRoomMemoryStorage!,
- didReceiveMessage message: XMPPRoomMessageMemoryStorageObject!,
- fromOccupant occupant: XMPPRoomOccupantMemoryStorageObject!,
- at index: UInt,
- in allMessages: [Any]!
- ) {
- debugPrint(message.debugDescription)
- }
- }
- extension RoomManager: XMPPRoomDelegate {
- func xmppRoomDidJoin(_ sender: XMPPRoom) {
- }
- }
- extension RoomManager: XMPPMessageArchiveManagementDelegate {
- func xmppMessageArchiveManagement(
- _ xmppMessageArchiveManagement: XMPPMessageArchiveManagement,
- didReceiveMAMMessage message: XMPPMessage
- ) {
- if let result = message.children?.first,
- let forwarded = result.children?.first,
- let msg = forwarded.children?.first as? DDXMLElement {
- let xmppmsg = XMPPMessage(from: msg)
- if xmppmsg.isMessageWithBody {
- self.messages.append(xmppmsg)
- }
- }
- }
- func xmppMessageArchiveManagement(_ xmppMessageArchiveManagement: XMPPMessageArchiveManagement, didFinishReceivingMessagesWith resultSet: XMPPResultSet) {
- debugPrint("FINISH MAM")
- }
- }
|