AndroidPN服务器与客户端代码分析

本文详细分析了AndroidPN服务器端的消息接收处理流程,包括客户端消息的接收和处理步骤,重点探讨PacketReader在这一过程中的作用。
摘要由CSDN通过智能技术生成
1.服务器:
ConfigManager--配置信息加载类,
Config--配置信息管理类,可以得到配置文件中指定属性的值;
CopyMessageUtil--将IQ中的id得到赋值给回执对象;
AuthManager--提供用户认证的相关功能;
IQAuthHandler--接收并处理命名空间为“jabber:iq:auth”的消息请求,用于处理用户验证业务;
IQRegisterHandler--接收并处理命名空间为 "jabber:iq:register"的消息请求,用于处理用户注册业务;
IQRosterHandler--接收处理命名空间为"jabber:iq:roster"的消息请求,用于处理用户获取花名册业务;--未提供实现,如需此功能需要扩展;
PresenceUpdateHandler--接收处理用户的状态变更请求信息;
Connection--一个XMPP连接服务器的实例,提供发送消息及得到服务器连接相关信息;
ConnectionCloseListener--客户端与服务器之间的连接断开监听器;
StanzaHandler--一个消息处理类,处理传入的XML节,把接收到的消息转换成一个XML的对象;
XmppIoHandler--继承于MINA中的IOHandler,用于从MINA中接收消息,并把消息交给StanzaHandler类处理;
PresenceManager--用于管理用户的在线状态;
NotificationManager--消息通知发送管理类,提供了发送消息给客户端的功能:
A.sendBroadcast--给所有在线用户发送消息;
B.sendNotifcationToUser--给指定用户发送消息 ;
C.sendNotifications--给指定的多个或一个用户发送消息;
D.sendOfflineNotification--发送离线消息;
IQRouter--IQ请求路由类,继承了IQHandler的IQ消息处理类需要在IQRouter类中注册,IQRounter就会跟命名空间把消息路由到相应的处理类中去处理;
MessageRouter--Message消息路由类;
PresenceRouter--Presence消息路由类;
PacketDeliverer--发送到连接的会话;
PacketRouter--Packet路由类,在这个类里有IQRouter、PresenceRouter、MessageRouter三个类的对象,可以对三种类型的消息都可以进行处理路由;
ClientSession--代表一个客户端与服务器之间的连接;从这个连接中可以得到这个连接的相关信息,如用户名,状态等;
SessionManager--管理所有与服务器之间的连接;

服务器端接收客户端消息处理流程:




2.Android端:
NotificationService类--后台运行并响应来自服务器的事件推送通知服务;
ServiceManager类--加载客户端中的配置信息,并管理NotifactionService服务的启动与关闭;
XmppManager类--管理客户端和服务器之间的连接,向服务器发送连接、注册、登陆请求任务;
NotificationDetailsActivity --用于终端接收到的通知详细视图显示;
NotificationIQ--通知实体;
NotificationIQProvider--一个xml的处理类,负责把一个xml结构的消息内容转换成一个NotificationIQ通知实体对象;
NotificationPacketListener---接收从服务器端推送过来的Packet;
NotificationSettingsActivity--设置信息;
NotificationReceiver--推送通知消息的广播接收器;
PersistentConnectionListener--监控客户端与服务器之间的连接关闭和重新连接事件;
PhoneStateChangeListener--监听手机状态;
ConnectivityReceiver--网络变化广播接收器;

PacketReader--从MINA中读取推送过来的信息;
PacketWriter--向MINA中写入回执信息;


接收消息处理流程:


PacketReader

init():
readerThread = new Thread() {
public void run() {
parsePackets(this);
}
};
-》parsePackets
-》processPacket
-》NotificationPacketListener
-》NotificationIQProvider
-》NotificatioIQ
-》Intent
-》发送回执、发出接收到消息的广播
-》点击消息的时候,再次给服务端发送一个查看请求,修改服务器中消息的状态;


如果服务端发送一个message类型的消息到客户端后,客户端是无法处理的。
也就是说客户端可以发送不同类型的消息到服务端,但是却不能处理服务端发回的除IQ认证消息以外的其他类型的消息。
如果需要扩展,需要在NotificationPacketListener类中加入处理逻辑,并提供相应的Provider、消息实体及后续处理逻辑。
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值