【问题标题】:QXmpp creating a MUC room (xep--0045) on the serverQXmpp 在服务器上创建一个 MUC 房间 (xep--0045)
【发布时间】:2015-05-17 09:13:57
【问题描述】:

我正在尝试使用 QXmpp 将 MUC 功能添加到我的应用程序中,我在 QXmppMucManager.h 头文件中关注此信息

/// \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("room@conference.example.com");
/// room->setNickName("mynick");
/// room->join();
/// \endcode
///
/// \ingroup Managers

在我的一个类的构造函数中,我正在添加这样的 MuCManager

QXmppMucManager *manager = new QXmppMucManager;

    m_xmppClient.addExtension(manager);

我正在创建一个 Muc 组。

QXmppMucRoom *room = manager->addRoom("livefit@mthinkpad");

    room->setNickName("mThinkpad");

    room->join();

我希望这会创建一个房间并在它不存在时加入,如果它已经存在则加入但它只是让我的应用程序崩溃。我无法思考 qxmpp 如何实现 xep--0045.I如果有人帮助指出我做错了什么或如何从我的客户在我的服务器上创建一个 Muc 房间,我将不胜感激。 我的服务器是本地安装的 ejabberd,我可以在“mthinkpad”域访问它。

【问题讨论】:

    标签: xmpp qxmpp


    【解决方案1】:

    如果有人遇到同样的问题,我可以创建房间。这是执行此操作的代码。我动态创建和配置房间(我使用的是 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);
    

    【讨论】:

      猜你喜欢
      • 2012-08-01
      • 2015-01-14
      • 2011-08-26
      • 2022-11-20
      • 1970-01-01
      • 2011-10-10
      • 2015-04-09
      相关资源
      最近更新 更多