首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >XMPPFramework -实现群聊(MUC)

XMPPFramework -实现群聊(MUC)
EN

Stack Overflow用户
提问于 2013-10-09 17:51:11
回答 2查看 17.2K关注 0票数 19

我正在开发iOS聊天客户端。有没有人能帮我解决多用户聊天?

我已经实现了Robbiehanson的XMPPFramework。

有没有人可以告诉我如何使用这个框架来获取群组列表并在服务器上创建群组?

提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2016-11-12 08:19:21

以下是Swift的一个版本:

代码语言:javascript
复制
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")
    }
票数 3
EN

Stack Overflow用户

发布于 2016-11-09 15:03:23

代码语言:javascript
复制
+(void)getGroupRooms{
    NSError *error = nil;
    NSXMLElement *query = [[NSXMLElement alloc] initWithXMLString:@"<query xmlns='http://jabber.org/protocol/disco#items'/>" error:&error];
    XMPPIQ *iq = [XMPPIQ iqWithType:@"get" to:[XMPPJID jidWithString:Jabber_groupChat_Domain_server] elementID:[[[PXMPPManager sharedInstance] xmppStream] generateUUID] child:query];
    [iq addAttributeWithName:@"from" stringValue:[[[PXMPPManager sharedInstance] xmppStream] myJID].full];
    [[[PXMPPManager sharedInstance] xmppStream] sendElement:iq];

//<iq type="get" 
//to="conference.cnr-uat.panamaxil.com" 
//id="DF27F28E-488D-4DAB-AA03-399A4CDE91B3" 
//from="919414184320@cnr-uat.panamaxil.com/iphone">
//<query xmlns="http://jabber.org/protocol/disco#items"/>
//</iq>
}

#pragma - mark XMPPStreamDelegate Methods

- (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq{
//    NSLog(@"Did receive IQ");

    if([iq isResultIQ])
    {
        if([iq elementForName:@"query" xmlns:@"http://jabber.org/protocol/disco#items"])
        {
            NSLog(@"Jabber Server's Capabilities: %@", [iq XMLString]);

            NSXMLElement *queryElement = [iq elementForName:@"query" xmlns:@"http://jabber.org/protocol/disco#items"];
            NSArray *items = [queryElement elementsForName:@"item"];
            NSMutableArray *arrGroupName = [[NSMutableArray alloc] init];
            for (NSXMLElement *i in items) {
                NSString *roomName = [i attributeStringValueForName:@"name"];
                NSString *jidString = [i attributeStringValueForName:@"jid"];
                //XMPPJID *jid = [XMPPJID jidWithString:jidString];

                NSDictionary *dict = @{
                                       @"groupName" : roomName,
                                       @"groupJID" : jidString,
                                       };
                [arrGroupName addObject:dict];
            }

            [ConversationsModel saveGroupName:arrGroupName];
        }
    }

    return false;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19268629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档