gloox配置聊天室
来源:互联网 发布:b超数据算胎儿体重软件 编辑:程序博客网 时间:2024/06/06 15:02
gloox配置聊天室
以下代码测试创建多人聊天室(MUC), 并进行配置。
参照gloox中的muc示例代码。
gloox代码示例中没有聊天室的配置。
配置聊天室需要获取配置表单(DataForm), 填好表单然后调用 setRoomConfig().
配置表单读取服务器发来的默认配置,仅更改了其中一项。
测试服务器使用了ejabberd.
const char SERVER[] = "xmpp.jinqing.net";
const char TESTER[] = "tester";
const char PASSWORD[] = "password";
using namespace gloox;
static std::string GetTesterJid()
{
return std::string(TESTER) + "@" + SERVER;
}
static DataForm* CreateMUCConfigForm(const DataForm& form)
{
DataForm* pNewFm = new DataForm(TypeSubmit);
const DataForm::FieldList& fl = form.fields();
for (const DataFormField* pFld : fl)
{
DataFormField* pNewFld = pNewFm->addField(
pFld->type(), pFld->name(), pFld->value());
if (pFld->name() == "muc#roomconfig_roomdesc")
pNewFld->setValue("RoomDesc_JinqTest");
}
return pNewFm;
}
class MUCRoomConfigHandlerTest : public MUCRoomConfigHandler
{
public:
void handleMUCConfigList(MUCRoom* room, const MUCListItemList& items,
MUCOperation operation) override {}
void handleMUCConfigForm(MUCRoom* room, const DataForm& form) override
{
DataForm* pNewForm = CreateMUCConfigForm(form); // deleted in setRoomConfig()
room->setRoomConfig(pNewForm);
}
void handleMUCConfigResult(MUCRoom* room, bool success,
MUCOperation operation) override {}
void handleMUCRequest(MUCRoom* room, const DataForm& form) override {}
}; // class MUCRoomConfigHandlerTest
class CreateRoomTest : public ConnectionListener, MUCRoomHandler
{
public:
CreateRoomTest() : m_client(JID(GetTesterJid()), PASSWORD)
{
m_client.registerConnectionListener(this);
}
public:
void TestCreate()
{
m_client.setPresence(Presence::Available, -1);
JID nick(std::string("gloox@conference.") + SERVER + "/gloox");
m_pRoom.reset(new MUCRoom(&m_client, nick, this, &m_cfgHdlr));
m_client.connect();
}
void onConnect() override
{
m_pRoom->join();
m_pRoom->requestRoomConfig();
}
void onDisconnect(ConnectionError /*e*/) override {}
bool onTLSConnect(const CertInfo& info) override
{
return true;
}
void handleMUCParticipantPresence(MUCRoom * /*room*/,
const MUCRoomParticipant participant,
const Presence& presence) override {}
void handleMUCMessage(MUCRoom* /*room*/,
const Message& msg, bool priv) override {}
void handleMUCSubject(MUCRoom * /*room*/, const std::string& nick,
const std::string& subject) override {}
void handleMUCError(MUCRoom * /*room*/, StanzaError error) override {}
void handleMUCInfo(MUCRoom * /*room*/, int features,
const std::string& name, const DataForm* infoForm) override {}
void handleMUCItems(MUCRoom * /*room*/,
const Disco::ItemList& items) override {}
void handleMUCInviteDecline(MUCRoom * /*room*/, const JID& invitee,
const std::string& reason) override {}
bool handleMUCRoomCreation(MUCRoom *room) override
{
return true;
}
private:
gloox::Client m_client;
MUCRoomConfigHandlerTest m_cfgHdlr;
std::unique_ptr<MUCRoom> m_pRoom;
}; // class CreateRoomTest
int main()
{
CreateRoomTest().TestCreate();
return 0;
}
(金庆的专栏)
以下代码测试创建多人聊天室(MUC), 并进行配置。
参照gloox中的muc示例代码。
gloox代码示例中没有聊天室的配置。
配置聊天室需要获取配置表单(DataForm), 填好表单然后调用 setRoomConfig().
配置表单读取服务器发来的默认配置,仅更改了其中一项。
测试服务器使用了ejabberd.
const char SERVER[] = "xmpp.jinqing.net";
const char TESTER[] = "tester";
const char PASSWORD[] = "password";
using namespace gloox;
static std::string GetTesterJid()
{
return std::string(TESTER) + "@" + SERVER;
}
static DataForm* CreateMUCConfigForm(const DataForm& form)
{
DataForm* pNewFm = new DataForm(TypeSubmit);
const DataForm::FieldList& fl = form.fields();
for (const DataFormField* pFld : fl)
{
DataFormField* pNewFld = pNewFm->addField(
pFld->type(), pFld->name(), pFld->value());
if (pFld->name() == "muc#roomconfig_roomdesc")
pNewFld->setValue("RoomDesc_JinqTest");
}
return pNewFm;
}
class MUCRoomConfigHandlerTest : public MUCRoomConfigHandler
{
public:
void handleMUCConfigList(MUCRoom* room, const MUCListItemList& items,
MUCOperation operation) override {}
void handleMUCConfigForm(MUCRoom* room, const DataForm& form) override
{
DataForm* pNewForm = CreateMUCConfigForm(form); // deleted in setRoomConfig()
room->setRoomConfig(pNewForm);
}
void handleMUCConfigResult(MUCRoom* room, bool success,
MUCOperation operation) override {}
void handleMUCRequest(MUCRoom* room, const DataForm& form) override {}
}; // class MUCRoomConfigHandlerTest
class CreateRoomTest : public ConnectionListener, MUCRoomHandler
{
public:
CreateRoomTest() : m_client(JID(GetTesterJid()), PASSWORD)
{
m_client.registerConnectionListener(this);
}
public:
void TestCreate()
{
m_client.setPresence(Presence::Available, -1);
JID nick(std::string("gloox@conference.") + SERVER + "/gloox");
m_pRoom.reset(new MUCRoom(&m_client, nick, this, &m_cfgHdlr));
m_client.connect();
}
void onConnect() override
{
m_pRoom->join();
m_pRoom->requestRoomConfig();
}
void onDisconnect(ConnectionError /*e*/) override {}
bool onTLSConnect(const CertInfo& info) override
{
return true;
}
void handleMUCParticipantPresence(MUCRoom * /*room*/,
const MUCRoomParticipant participant,
const Presence& presence) override {}
void handleMUCMessage(MUCRoom* /*room*/,
const Message& msg, bool priv) override {}
void handleMUCSubject(MUCRoom * /*room*/, const std::string& nick,
const std::string& subject) override {}
void handleMUCError(MUCRoom * /*room*/, StanzaError error) override {}
void handleMUCInfo(MUCRoom * /*room*/, int features,
const std::string& name, const DataForm* infoForm) override {}
void handleMUCItems(MUCRoom * /*room*/,
const Disco::ItemList& items) override {}
void handleMUCInviteDecline(MUCRoom * /*room*/, const JID& invitee,
const std::string& reason) override {}
bool handleMUCRoomCreation(MUCRoom *room) override
{
return true;
}
private:
gloox::Client m_client;
MUCRoomConfigHandlerTest m_cfgHdlr;
std::unique_ptr<MUCRoom> m_pRoom;
}; // class CreateRoomTest
int main()
{
CreateRoomTest().TestCreate();
return 0;
}
0 0
- gloox配置聊天室
- gloox+openfire+mysql安装配置
- gloox 连接 openfire 使用笔记 --openfire 配置
- linux opencv and vlc and gloox配置
- xmpp聊天室配置
- gloox开发
- 聊天室
- 聊天室
- 聊天室
- 聊天室
- 聊天室
- 聊天室
- 聊天室
- 聊天室
- 聊天室
- 聊天室
- 聊天室
- 聊天室
- Android打造万能适配器--RecyclerView
- android studio 引用module 导致的v4包冲突的解决
- ng2学习初体验
- lucene4.7总结
- 微信 小程序 官方教程 开发文档 开发工具
- gloox配置聊天室
- 前端面试题目
- android studio 不让build对png照片进行校验 和 databinding技术
- 31.上传文件到后台ajaxfileupload.js的使用
- 堆排序(heap sort)
- Android基础:获取手机信息
- 怎样从spring官网进行spring 源码 文档 jar 下载 即 springframework-release
- 【长按菜单】contextMenu
- AAC音频码流解析