`
suoyihen
  • 浏览: 1363095 次
文章分类
社区版块
存档分类
最新评论

使用smack API开发聊天系统

 
阅读更多

昨天学习了smack的相关代码和API是因为在项目当中要使用聊天功能,今天早上一到公司就开始写相关的代码了。这里就将我写代码时的感想写一下。

聊天功能无非就是人与人互相之间进行信息的传送,我首先写了一个UserShip类用来对聊天状态和聊天列表进行封装。

因为在聊天系统当中会使用到多人聊天,我们使用MultiUserChat这个类来实现的。在聊天过程中会遇到人进入和离开的情况,这时我们就要用到上面写的那个UserShip类了:

看过我前面几篇转载的文章的同学都知道聊天是需要进行连接的,使用XMPPConnection类即可。进行连接之前我们需要构造一个XMPPConnection,XMPPConnection的构造方法有很多,public XMPPConnection(String serviceName, CallbackHandler callbackHandler),public XMPPConnection(String serviceName),public XMPPConnection(ConnectionConfiguration config),public XMPPConnection(ConnectionConfiguration config, CallbackHandler callbackHandler),我这里是使用public XMPPConnection(ConnectionConfiguration config)这个的,因为考虑到ConnectionConfiguration 这个类中有host和port这两个字段,刚好代表我们所要连接远程的主机地址和端口,ConnectionConfiguration类也有很多的构造的方法:public ConnectionConfiguration(String serviceName),public ConnectionConfiguration(String serviceName, ProxyInfo proxy),public ConnectionConfiguration(String host, int port, String serviceName),public ConnectionConfiguration(String host, int port, String serviceName, ProxyInfo proxy),public ConnectionConfiguration(String host, int port),public ConnectionConfiguration(String host, int port, ProxyInfo proxy),我使用的自然是public ConnectionConfiguration(String host, int port)这个构造方法,其他的像serviceName,proxy的都是差不多的,主要的还是连接到服务器上,这几个构造方法中最终都会调用下面的这个init方法:

接下来就是具体连接的代码了,很简单的:

有了这些基本工作之后,我们就可以开始进行互相聊天了,具体的功能视具体项目需求来写,像我这里是需要有多人聊天的,那么就会发生进入房间和离开房间的情况,我们需要对这两种情况进行监听,这时用到的API是DefaultParticipantStatusListener,这个类可以监听人的聊天状态。这个类当中有很多的关于状态的方法,我们不需要全部实现这些方法,所以这里我是继承了DefaultParticipantStatusListener这个类来实现特定的方法的:

接着需要对具体的某个人的聊天记录进行存储,我是实现PacketListener这个监听类来实现的,这个监听类只有processPacket这一个处理消息包的类,参数自然为一个消息包Packet了,可是我们处理消息是对消息体进行处理,在Packet中没有发现有消息体的相关属性,所以我就看Packet有没有什么子类,发现有一个Message类中有对body的相关操作:

有了上面两个listener,就可以进入房间进行聊天了,这里是使用MultiUserChat的public synchronized void join(String nickname, String password, DiscussionHistory history, long timeout)这个方法实现的,这个方法是同步的,保证了线程安全。

接下来的就是具体的发送消息,接收消息,好友列表展示的实现了,这些代码就简单了,不再详解:

还有就是断开连接的方法:

这样基本上已经实现聊天的基本需求了。又过中午了,肚子早就叫了,吃饭去。









分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics