XMPPFramework - Implement Group Chat (MUC)

前端 未结 3 955
天命终不由人
天命终不由人 2020-11-27 13:23

I am working on the iOS chat client. Can anyone please help me with the Multi-User Chat?

I have implemented Robbiehanson\'s XMPPFramework.

Can anyone please

3条回答
  •  醉话见心
    2020-11-27 13:31

    Here is a Swift version:

    func joinRoom(with jidString: String, delegate: XMPPRoomDelegate) -> XMPPRoom {
    
        let roomJID = XMPPJID(string: jidString)
        let roomStorage = XMPPRoomCoreDataStorage.sharedInstance()
    
        let room = XMPPRoom(roomStorage: roomStorage, jid: roomJID, dispatchQueue: DispatchQueue.main)!
    
            room.activate(xmppStream)
    
            room.addDelegate(delegate, delegateQueue: DispatchQueue.main)
    
            // If the room is not existing, server will create one.
            room.join(usingNickname: xmppStream.myJID.user, history: nil)
    
            return room
        }
    
        // MUCRoomDelegate
        public func xmppRoomDidCreate(_ sender: XMPPRoom!) {
            print("xmppRoomDidCreate")
    
            // I prefer configure right after created
            sender.fetchConfigurationForm()
        }
    
        public func xmppRoomDidJoin(_ sender: XMPPRoom!) {
            print("xmppRoomDidJoin")
        }
    
        public func xmppRoom(_ sender: XMPPRoom!, didFetchConfigurationForm configForm: DDXMLElement!) {
            print("didFetchConfigurationForm")
    
            let newForm = configForm.copy() as! DDXMLElement
    
            for field in newForm.elements(forName: "field") {
    
                if let _var = field.attributeStringValue(forName: "var") {
    
                    switch _var {
                    case "muc#roomconfig_persistentroom":
                        field.remove(forName: "value")
                        field.addChild(DDXMLElement(name: "value", numberValue: 1))
    
                    case "muc#roomconfig_membersonly":
                        field.remove(forName: "value")
                        field.addChild(DDXMLElement(name: "value", numberValue: 1))
    
                    // other configures
                    default:
                        break
                    }
    
                }
    
            }
    
            sender.configureRoom(usingOptions: newForm)
        }
    
        public func xmppRoom(_ sender: XMPPRoom!, didConfigure iqResult: XMPPIQ!) {
            print("didConfigure")
        }
    

提交回复
热议问题