首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QXmpp在服务器上创建一个MUC房间(xep-0045)

QXmpp在服务器上创建一个MUC房间(xep-0045)
EN

Stack Overflow用户
提问于 2015-03-15 03:03:45
回答 1查看 459关注 0票数 1

我试图用QXmpp向我的应用程序添加MUC功能,我在QXmppMucManager.h头文件中遵循以下信息

代码语言:javascript
复制
/// \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

代码语言:javascript
复制
QXmppMucManager *manager = new QXmppMucManager;

    m_xmppClient.addExtension(manager);

在创建一个Muc组的插槽中,我将这样做

代码语言:javascript
复制
QXmppMucRoom *room = manager->addRoom("livefit@mthinkpad");

    room->setNickName("mThinkpad");

    room->join();

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-26 01:09:50

如果有人有同样的问题,我能够创建rooms.Here就是这样做的代码,我动态地创建和配置这个空间(我正在使用Openfire,它允许它),但是如果你想要的话,你可以请求配置表单。

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29056790

复制
相关文章

相似问题

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