首页 文章

使用XMPPFramework openfire创建聊天室

提问于
浏览
0

我正在使用聊天应用程序,我必须使用 XMPP Framework 添加群聊功能 . 我能够设置 peer-to-peer 聊天 . 但是当谈到群聊时,我无法创建 chat room . 我知道,这个问题之前已被多次询问过,但我找不到任何解决方案 . 这是我创建和配置聊天室的代码 .

- (void)createChatRoom:(NSString *) newRoomName
{
    NSString *jid=[NSString stringWithFormat:@"%@@%@",newRoomName,kGroupChatDomain];
    XMPPRoomMemoryStorage * _roomMemory = [[XMPPRoomMemoryStorage alloc]init];
    XMPPJID * roomJID = [XMPPJID jidWithString:jid];
    _xmppRoom = [[XMPPRoom alloc] initWithRoomStorage:_roomMemory
                                                           jid:roomJID
                                                 dispatchQueue:dispatch_get_main_queue()];

    NSString *nickName=[NSString stringWithFormat:@"%@chatRoom",newRoomName];
    [_xmppRoom joinRoomUsingNickname:nickName
                            history:nil
                           password:nil];
    [_xmppRoom activate:[AppDel xmppStream]];
    [_xmppRoom addDelegate:self delegateQueue:dispatch_get_main_queue()];
    [_xmppRoom fetchConfigurationForm];
}

- (void)xmppRoomDidCreate:(XMPPRoom *)sender{
    NSLog(@"didCreateChat Room method called");
}

- (void)xmppRoomDidJoin:(XMPPRoom *)sender{
    NSLog(@"xmppRoomDidJoin method called ");
}

- (void)xmppRoom:(XMPPRoom *)sender didFetchConfigurationForm:(NSXMLElement *)configForm{
    NSXMLElement *newConfig = [configForm copy];
    NSArray* fields = [newConfig elementsForName:@"field"];
    for (NSXMLElement *field in fields) {
        NSString *var = [field attributeStringValueForName:@"var"];
        if ([var isEqualToString:@"muc#roomconfig_persistentroom"]) {
            [field removeChildAtIndex:0];
            [field addChild:[NSXMLElement elementWithName:@"value" stringValue:@"1"]];
        }
    }
    [sender configureRoomUsingOptions:newConfig];
}

以上是创建和配置聊天室的代码 . 在调用此代码之前,我在 viewDidLoad 方法中连接 XMPP . 但我无法创建聊天室 . 代码没有调用 XMPPRoom Delegate 我做错了,如果我的代码中有任何错误,请纠正我 . 我甚至无法在openfire日志中发现任何错误 . 请帮我解决这个问题 . 任何帮助将不胜感激 .

1 回答

  • 1

    创建空间,如果已创建空间,您可以使用此代码轻松加入现有组

    - (void)createOrEnterRoom:(NSString *)groupName
    {
        BOOL flag=valueExistInGroup(groupName);
        if (flag==TRUE) {
            savevalueInGroup(groupName);
    
            XMPPRoomMemoryStorage *roomStorage = [[XMPPRoomMemoryStorage alloc] init];
            XMPPJID *roomJID = [XMPPJID jidWithString:[NSString stringWithFormat:@"%@@conference.your_server_name",groupName]];
            XMPPRoom *xmppRoom = [[XMPPRoom alloc] initWithRoomStorage:roomStorage
                                                                   jid:roomJID
                                                         dispatchQueue:dispatch_get_main_queue()];
    
            [xmppRoom activate:xmppStream];
            [xmppRoom addDelegate:self
                    delegateQueue:dispatch_get_main_queue()];
            [xmppRoom joinRoomUsingNickname:xmppStream.myJID.user
                                    history:nil
                                   password:nil];
     }
        else
        {
            NSString *strJid=[AppSetting getUserId];
            strJid=[strJid stringByAppendingFormat:@"@your_server_name"];
            _xmppRoomStorage = [XMPPRoomHybridStorage sharedInstance];
            XMPPJID *roomJid = [XMPPJID jidWithString:[NSString stringWithFormat:@"%@@conference.52.10.97.23",groupName]];
            XMPPRoom *xmppRoom = [[XMPPRoom alloc] initWithRoomStorage:_xmppRoomStorage jid:roomJid];
            [xmppRoom addDelegate:self delegateQueue:dispatch_get_main_queue()];
            [xmppRoom activate:xmppStream];
            NSXMLElement *history = [NSXMLElement elementWithName:@"history"];
            [history addAttributeWithName:@"maxstanzas" stringValue:@"10"];
            [xmppRoom joinRoomUsingNickname:strJid history:nil];
        }
    }
    
    
    - (void)xmppRoomDidJoin:(XMPPRoom *)sender{
        [sender fetchConfigurationForm];
    }
    
    - (void)fetchConfigurationForm
    {
        dispatch_block_t block = ^{ @autoreleasepool {
    
            XMPPLogTrace();
    
            // <iq type='get'
            //       id='config1'
            //       to='coven@chat.shakespeare.lit'>
            //   <query xmlns='http://jabber.org/protocol/muc#owner'/>
            // </iq>
    
            NSString *fetchID = [xmppStream generateUUID];
    
            NSXMLElement *query = [NSXMLElement elementWithName:@"query" xmlns:XMPPMUCOwnerNamespace];
            XMPPIQ *iq = [XMPPIQ iqWithType:@"get" to:roomJID elementID:fetchID child:query];
    
            [xmppStream sendElement:iq];
    
            [responseTracker addID:fetchID
                            target:self
                          selector:@selector(handleConfigurationFormResponse:withInfo:)
                           timeout:60.0];
    
        }};
    
        if (dispatch_get_specific(moduleQueueTag))
            block();
        else
            dispatch_async(moduleQueue, block);
    }
    

相关问题