当登陆到
XMPP
服务器之后,需要将当前自己的状态发送给服务器,同时请求其朋友列表的在线信息,服务器会将朋友列表的
JID
和在线信息作为应答发送回来,利用收到的
JID
和在线信息应答,可以向另一个用户发起连接请求。服务器会一直发送状态通知直到连接结束。
buzz::PresenceOutTask
*
presence_out_
=
new
buzz::PresenceOutTask(xmpp_client_);
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
presence_out_
->
Send(my_status);
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
presence_out_
->
Start();
当完成发送和接收状态信息后,就可以开始发送和接收会话请求了,且听下回分解。
Libjingle
提供两个
XmppTask
对象发送和查询状态:
1)
PresenceOutTask
向服务器发送状态信息,状态信息存放在
Status
对象中。
2)
PresencePushTask
接收服务器发来的状态信息,当调用
PresencePushTask::Start
时启动,同时客户端需要连接到
SignalStatusUpdate
信号,当接收到一个状态信息时,信号将会被触发。
下面的步骤描述如何发送和接收状态信息:
1)
注册接收状态通知。实例化
PresencePushTask
,启动,连接到
OnStatusUpdate
信号,由于服务器可能在接收到客户端状态信息后马上返回当前用户在线状态通知,为了避免消息丢失,在发送状态信息之前需要先创建监听器。
presence_push_
=
new
buzz::PresencePushTask(xmpp_client_);
presence_push_ -> SignalStatusUpdate.connect( this , & OnStatusUpdate);
presence_push_ -> Start();
presence_push_ -> SignalStatusUpdate.connect( this , & OnStatusUpdate);
presence_push_ -> Start();
2)
填充
Status
状态信息。
buzz::Status my_status;
my_status.set_jid(xmpp_client_ -> jid());
my_status.set_available( true );
my_status.set_invisible( false );
my_status.set_show(buzz::Status::SHOW_ONLINE);
my_status.set_priority( 0 );
my_status.set_know_capabilities( true );
my_status.set_phone_capability( true );
my_status.set_is_google_client( true );
my_status.set_version( " 1.0.0.66 " );
my_status.set_jid(xmpp_client_ -> jid());
my_status.set_available( true );
my_status.set_invisible( false );
my_status.set_show(buzz::Status::SHOW_ONLINE);
my_status.set_priority( 0 );
my_status.set_know_capabilities( true );
my_status.set_phone_capability( true );
my_status.set_is_google_client( true );
my_status.set_version( " 1.0.0.66 " );
3)
利用
PresenceOutTask
将状态信息发送给服务器。
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)