编译过libjingle之后,开始使用libjingle设计IM client,象所有的IM client一样,第一件事情就是登陆服务器,libjingle由于遵循XMPP协议,所以理所当然的需要登陆XMPP服务器。XMPP服务器作为通信中心节点,使得IM client能够找到其他节点,发起初始连接。
1)
初始化SSL
连接。talk_base::InitializeSSL(),在此函数内部调用InitializeSSLThread。
2)
创建信号处理线程。最简便的方法就是创建一个AutoThread对象,将操作系统创建的线程放入ThreadManager进行管理。
3)
获取登陆信息。
XmppClientSettings
管理登陆
XMPP
服务器需要的信息,包括用户名,密码和服务器地址。
4)
创建XMPP
任务管理对象。
Libjingle
使用
XmppPump
封装
XmppClient
类,处理和
XMPP
之间的交互,包括发送和接收消息,
5)
连接到接收sigslot
接收通知。
连接到
XmppPump
对象的
SignalStateChange
信号,当接收到
STATE_OPEN
状态时,表明已经成功登陆到服务器。
6)
登陆服务器。
调用
XmppPump::DoLogin
登陆,
DoLogin
函数被挂起直到信号处理线程的
Run
被执行。
7)
当信号处理线程
Run
被调用后,消息线程会开始持续的监听。
8)
监听成功和失败消息。当应用成功登陆后,
XmppPump
会发送
STATE_OPEN
消息。
9)
当成功登陆后,需要将在线信息发送给服务器,同时注册接收其他用户的在线通知。后续在建立会议管理路径章节中会描述请求STUN和relay port信息步骤,在发送和查询在线信息章节中,会将STUN和relay port信息传递给PortAllocator对象。