一、简介
Connection是Smack核心类,提供了灵活的扩展机制和监听器机制。
二、继承关系
Connection是一个抽象类,定义了一组为扩展使用的 Listener 的集合。
XMPPConnection是一个继承了Connection的类,实现了Connection定义的一些方法。
根据前面的文章分析,当Smack 完成资源装载后,完成socket端口绑定,进入监听状态。
三、数据输入和输出的入口
1、所有的接收数据以及接收的状态都发送到右侧上面红色框中的接口的实现类中。
2、发送数据通过XmppConnection的sendPacket(Packet packet)方法,经由PacketWriter-->connection.writer--->socket 发出。
四、接口的分类和作用
1、ConnectionCreationListener 接口
向实现了这个接口的类传递一个 Connection的实例。
2、ConnectionListener 接口
向实现了这个接口的类传递 Connection 的状态,包括:
public void connectionClosed();
public void connectionClosedOnError(Exception e);
public void reconnectingIn(int seconds);
public void reconnectionSuccessful();
public void reconnectionFailed(Exception e);
3、PacketListener 接口(用于读取数据)
向实现了这个接口的类传递 Packet,子类实现
processPacket(Packet packet)
就可以得到 Packet 。
4、PacketInterceptor 接口(用于写入数据)
向实现了这个接口的类传递 Packet,子类实现
interceptPacket(Packet packet)
在packet写入socket之前 通过这个接口可以修改Packet的内容。
5、PacketCollector 类
这是个类,本身内置队列。在将packet分发给其他listener之前,将满足条件的packet加入队列中。
void processPacket(Packet packet) 方法是进入队列,如果队列已满,先进的移除,后进的加入队尾。
void cancel() 方法是清空队列,停止packet搜集。
Packet nextResult() 方法是得到一个有效的Packet,如果没有则等待,直到有效packet返回。
Packet pollResult() 方法是得到一个packet,如果没有可以返回 null。
之后所有的功能和代码都是围绕上述的接口上进行封装和扩展的。
http://blog.csdn.net/teamlet/article/details/26372231