2015-03-15 5 views
1

Я пытаюсь добавить MUC возможности для моего приложения с QXmpp, я преследую эту информацию в файле заголовка QXmppMucManager.hQXmpp создания MUC номер (XEP - 0045) на сервере

/// \brief The QXmppMucManager class makes it possible to interact with 
/// multi-user chat rooms as defined by XEP-0045: Multi-User Chat. 
/// 
/// To make use of this manager, you need to instantiate it and load it into 
/// the QXmppClient instance as follows: 
/// 
/// \code 
/// QXmppMucManager *manager = new QXmppMucManager; 
/// client->addExtension(manager); 
/// \endcode 
/// 
/// You can then join a room as follows: 
/// 
/// \code 
/// QXmppMucRoom *room = manager->addRoom("[email protected]"); 
/// room->setNickName("mynick"); 
/// room->join(); 
/// \endcode 
/// 
/// \ingroup Managers 

В конструктор одного из моих классов я добавляющих MuCManager как этот

QXmppMucManager *manager = new QXmppMucManager; 

    m_xmppClient.addExtension(manager); 

и в слоте, чтобы создать группу MUC Я делаю это

QXmppMucRoom *room = manager->addRoom("[email protected]"); 

    room->setNickName("mThinkpad"); 

    room->join(); 

Я ожидаю, что это создаст комнату и присоединится, если она не существует и не присоединится, если она уже существует, но это просто сбой моего приложения. Я не могу обернуть мозги вокруг того, как qxmpp реализует xep-0045.I оцените его, если кто-то помог указать, что я делаю неправильно, или как я могу создать комнату Muc на моем сервере у моего клиента. Мой сервер является локальной установкой ejabberd, и я могу получить к нему доступ в домене mthinkpad.

ответ

0

В случае, если у кого-то есть те же проблемы, я смог создать комнаты. Вот код, который делает это. Я создаю и настраиваю комнату на лету (я использую Openfire, и это позволяет), но вы можете запросите форму конфигурации, если хотите.

String jid=roomName.text()+"@conference."+serverName; 
     if(jid.isEmpty()) 
       return ; 
      QList<QXmppMucRoom*> rooms = manager->rooms(); 
      QXmppMucRoom* r; 
      foreach(r, rooms) 
      { 
       if(r->jid() == jid) 
       { 
        //LOG_MODEL_DEBUG("Group chat", "had joined room[%s]", qPrintable(jid)); 
        return ; 
       } 
      } 
      m_pRoom = manager->addRoom(jid); 
      if(m_pRoom) 
      { 
       //nick 
       m_pRoom->setNickName("theDip"); 
       //join the room. 
       m_pRoom->join(); 
      } 

      //Prepare the dataform. 
      QXmppDataForm form(QXmppDataForm::Submit); 
      QList<QXmppDataForm::Field> fields; 
      { 
       QXmppDataForm::Field field(QXmppDataForm::Field::HiddenField); 
       field.setKey("FORM_TYPE"); 
       field.setValue("http://jabber.org/protocol/muc#roomconfig"); 
       fields.append(field); 
      } 
      QXmppDataForm::Field field; 
      field.setKey("muc#roomconfig_roomname"); 
      field.setValue(roomName.text()); 
      fields.append(field); 

      field.setKey("muc#roomconfig_subject"); 
      field.setValue(roomSubject.text()); 
      fields.append(field); 

      field.setKey("muc#roomconfig_roomdesc"); 
      field.setValue(roomDesc.text()); 
      fields.append(field); 
      { 
       QXmppDataForm::Field field(QXmppDataForm::Field::BooleanField); 
       field.setKey("muc#roomconfig_persistentroom"); 
       field.setValue(true); 
       fields.append(field); 
      } 

      form.setFields(fields); 
      //The dataform ends here. 
      m_pRoom->setConfiguration(form); 

 Смежные вопросы

  • Нет связанных вопросов^_^