gloox配置聊天室
gloox配置聊天室
(金庆的专栏)
gloox是XMPP协议的C++客户端库。
以下代码测试创建多人聊天室(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;
}
gloox配置聊天室的更多相关文章
- AgileEAS.NET SOA 中间件平台.Net Socket通信框架-完整应用例子-在线聊天室系统-下载配置
一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA ...
- Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G
code&monkey Ext JS学习第十六天 事件机制event(一) 此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件 ...
- php+websocket搭建简易聊天室实践
1.前言 公司游戏里面有个简单的聊天室,了解了之后才知道是node+websocket做的,想想php也来做个简单的聊天室.于是搜集各种资料看文档.找实例自己也写了个简单的聊天室. http连接分为短 ...
- 基于NodeJS的秘室聊天室
借着放假期间将NodeJS重新回顾了一下并玩了一下sketch来进行设计界面,很不错.(注:代码整理后会放到github上,请关注.) 本次聊天室我给它定义了一个名称叫“秘密聊天室”. 需求: 技术选 ...
- 使用WebRTC搭建前端视频聊天室——信令篇
博客原文地址 建议看这篇之前先看一下使用WebRTC搭建前端视频聊天室——入门篇 如果需要搭建实例的话可以参照SkyRTC-demo:github地址 其中使用了两个库:SkyRTC(github地址 ...
- 使用WebRTC搭建前端视频聊天室——入门篇
http://segmentfault.com/a/1190000000436544 什么是WebRTC? 众所周知,浏览器本身不支持相互之间直接建立信道进行通信,都是通过服务器进行中转.比如现在有两 ...
- 使用Servlet和JSP实现一个简单的Web聊天室系统
1 问题描述 利用Java EE相关技术实现一个简单的Web聊天室系统,具体要求如下. (1)编写一个登录 ...
- Clouda聊天室实践
1.Clouda说明 Clouda是简单,可依赖的实时Javascript框架.对一个想开发移动webapp的开发者来说,可以使用clouda开发框架,实现一个功能和体验与native app齐平的轻 ...
- Apache MiNa 实现多人聊天室
Apache MiNa 实现多人聊天室 开发环境: System:Windows JavaSDK:1.6 IDE:eclipse.MyEclipse 6.6 开发依赖库: Jdk1.4+.mina-c ...
随机推荐
- java 反射(Reflection)
看了很多关于java 反射的文章,自己把所看到的总结一下.对自己,对他人或多或少有帮助吧. Java Reflection是什么? 首先来看看官方文档Oracle里面对Reflection的描述: R ...
- Python学习【第26篇】:Python系列- 多线程(threading)
线程的调用方式:threanding模块 import threading import time def sayhi(num): #定义每个线程要运行的函数 print("running ...
- 在Unity3D中利用 RenderTexture 实现游戏内截图
using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; publ ...
- 【JDK1.8】JUC——LockSupport
一.前言 Basic thread blocking primitives for creating locks and other synchronization classes. 用于创建锁定和其 ...
- [HNOI2008]遥远的行星
题目描述 直线上N颗行星,X=i处有行星i,行星J受到行星I的作用力,当且仅当i<=AJ.此时J受到作用力的大小为 Fi->j=Mi*Mj/(j-i) 其中A为很小的常量,故直观上说每颗行 ...
- bzoj 1085: [SCOI2005]骑士精神
Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士,且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2,纵 ...
- gift 分数规划的最大权闭合子图
题目大意: N个物品,物品间有M组关系,每个物品有一个ai的代价,满足关系后会得到bi的值 求 max(sigma(bi)/sigma(ai)) 题解: 很明显的最大权闭合子图,只不过需要处理分数. ...
- UVA 1481 Genome Evolution
Xi, a developmental biologist is working on developmental distances of chromosomes. A chromosome, in ...
- SpringBoot学习之集成mybatis
一.spring boot集成Mybatis gradle配置: //gradle配置: compile("org.springframework.boot:spring-boot-star ...
- Prim算法的简单分析
Prim算法主要的思路:将点集一分为二,通过找到两个点集之间的最短距离,来确定最小生成树,每次确定最短距离后,对两个点集进行更新. 具体的实现过程:难点就是如何找到两个点集之间的最短距离,这里设置两个 ...