windows客户端开发--xmpp协议gloox库
来源:互联网 发布:天健医疗软件 编辑:程序博客网 时间:2024/05/24 06:08
很多聊天室客户端都使用了xmpp协议。
这个协议被人们诟病很多,但是对于简单的消息传送还是有很大的使用价值的。
XMPP is the open standard for messaging and presence。
gloox is a popular library for the Extensible Messaging and Presence Protocol (XMPP), formerly known as Jabber.
所以写了一个简单的例子,如何使用gloox连接服务器,监听消息,以及如何应答。
首先是设置 MessageHandler:
class Bot : public MessageHandler {public: Bot() { JID jid("bot@localhost"); client = new Client( jid, "botpwd" ); connListener = new ConnListener(); client->registerMessageHandler( this ); client->registerConnectionListener(connListener); client->connect(true); }
这里我们创建了一个客户端,有ID和密码。
接下来,我们需要ConnectionListener就处理连接。
而ConnectionListener一定要registered with 客户端。这个一会再说。
现在是连接服务器,我们采用non-bloking的方式。
为了能够处理消息,我们要实现handleMessage方法:
virtual void handleMessage( const Message& stanza, MessageSession* session = 0 ) { cout << "Received message: " << stanza << endl; Message msg(stanza.subtype(), stanza.from(), "Tell me more about " + stanza.body() ); client->send( msg );}
这时候我们需要connectlisenner来处理连接,需要重写纯虚函数:
class ConnListener : public ConnectionListener {public: virtual void onConnect() { cout << "ConnListener::onConnect()" << endl; } virtual void onDisconnect(ConnectionError e) { cout << "ConnListener::onDisconnect() " << e << endl; } virtual bool onTLSConnect(const CertInfo& info) { cout << "ConnListener::onTLSConnect()" << endl; return true; }};
上面代码重要的是onTLSConnect()函数。
全部代码:
#include <iostream>#include <string>#include <gloox/client.h>#include <gloox/message.h>#include <gloox/messagehandler.h>#include <gloox/connectionlistener.h>using namespace std;using namespace gloox;ostream& operator<<(ostream& os, Message::MessageType type) { switch (type) { case Message::Chat: os << "Chat"; break; case Message::Error: os << "Error"; break; case Message::Groupchat: os << "Groupchat"; break; case Message::Headline: os << "Headline"; break; case Message::Normal: os << "Normal"; break; case Message::Invalid: os << "Invalid"; break; default: os << "unknown type"; break; }}ostream& operator<<(ostream& os, const Message& stanza) { os << "type:'" << stanza.subtype() << "' from:'" << stanza.from().full() << "' body:'" << stanza.body() << "'"; return os;}class ConnListener : public ConnectionListener {public: virtual void onConnect() { cout << "ConnListener::onConnect()" << endl; } virtual void onDisconnect(ConnectionError e) { cout << "ConnListener::onDisconnect() " << e << endl; } virtual bool onTLSConnect(const CertInfo& info) { cout << "ConnListener::onTLSConnect()" << endl; return true; }};class Bot : public MessageHandler {public: Bot() { JID jid("bot@localhost"); client = new Client( jid, "botpwd" ); connListener = new ConnListener(); client->registerMessageHandler( this ); client->registerConnectionListener(connListener); client->connect(true); } ~Bot() { delete client; delete connListener; } virtual void handleMessage( const Message& stanza, MessageSession* session = 0 ) { cout << "Received message: " << stanza << endl; Message msg(Message::Chat, stanza.from(), "Tell me more about " + stanza.body() ); client->send( msg ); }private: Client* client; ConnListener* connListener;};int main() { Bot b;}
1 0
- windows客户端开发--xmpp协议gloox库
- GLOOX 1.0 API ----框架 ---XMPP协议
- 关于xmpp协议的注册模块的实现原理(gloox库)
- XMPP客户端gloox,增加一个自己的IQ
- gloox-心跳包-xmpp
- gloox与xmpp学习
- gloox连接xmpp服务器
- Xmpp协议客户端登陆过程
- gloox 0.9 发布(c++的xmpp/jabber库)
- gloox连接到服务器(一个XMPP的库)
- 用VC写的一个IM客户端,基于一个开源的gloox库开发
- gloox开发
- 【XMPP】gloox开源代码分析
- Delphi XMPP 通信客户端开发
- xmpp 及时通讯客户端开发
- XMPP客户端登录开发详解
- XMPP客户端库资料
- XMPP客户端库简介
- 【dotnet跨平台】VSCode Linux 32位和Linux 64位下载地址分享
- Android dumpsys命令学习小记
- 欢迎使用CSDN-markdown编辑器
- java 垃圾回收机制
- Dalvik与JVM的区别
- windows客户端开发--xmpp协议gloox库
- APP控制网络连接速率,实现网络情况复现 ATC原理
- Codeforces 549C The Game Of Parity【博弈】
- BestCoder Round #75
- 网络命令一览表
- 一看就懂系列之 php设计模式(二)
- C++最常见面试题解答
- 理论概念方法
- LeetCode110—Balanced Binary Tree