系统的总体架构图
故障报警推送主要由服务器端和移动端两部分组成。服务器端主要应有获取解析设备报警、管理移动端连接、推送信息以及提供接口等功能。
移动端的主要功能是接受来自服务器端的消息并进行解码。然后将消息发送至APP。最后将对应消息反馈给服务器。
当故障设备需要将报警信息传送至移动端的智能门店管理系统APP时,首先应通过对应的接口将数据传送至服务器。服务器端获取数据后根据要求建立对应的用户连接;接着服务器端将报警信息进行编码,最后通过I/O处理器将消息发送至移动端。移动端接收到报警信息后,通过编解码器解析消息,并通过Broadcast传送至智能门店管理系统APP。从而完成了报警信息推送的整个流程。
移动端的结构图如图所示。
连接管理主要有I/O管理、编解码器和长连接。长连接通过心跳包来实现,智能门店管理系统定时向服务器端发送心跳包,当心跳包发送失败,说明连接断开,此时会启动重连机制重新与服务器连接。
App接口是智能门店管理系统与推送系统的接入点,智能门店管理系统通过调用该接口获取来自服务器端发送的数据,并通过此接口传送反馈信息至服务器端。
网络监控模块用于监控移动网络,当网络存在时移动端将及时通知连接管理与服务器连接。尽可能的保证了消息的及时性。
连接、发送消息
智能门店管理系统App通过ServiceManager启动消息推送平台移动端,ServiceManager将连接的任务交给NotificationService,接着NotificationService调用XMPP连接的管理器XMPPManager。
1.连接的实现
连接服务器要用到asmack类库所提供的XMPP连接XMPPConnection,XMPPConnection为一个封装了底层Socket连接的类,同时绑定了数据包的读写器(PacketReader,PacketWriter)。ConnectTask线程会调用XMPPConnection根据给定的服务器参数来完成连接。
public class XMPPConnection extends Connection{
PacketWriter packetWriter;
PacketReader packetReader;
packetWriter=new PacketWriter(this);
packetReader=new PacketReader(this);
private void connectUsingConfiguration (ConnectionConfiguration config)throws XMPPException{
//获取服务器
String host = config.getHost();
//获取端口
int port = config.getPort();
//如果没有已存在的socket
if(config.getSocketFactory()==null){
this.socket = new Socket(host,port);
}else{
this.socket = config.getSocketFactory().createSocket(host,port);
}
}
}
底层的连接是基于TCP/IP协议的socket连接。至此我们完成了和服务器端的连接。
连接成功以后,形成了一个客户端到服务器之间的通道,这个通道就是socket连接,这个连接被封装成了XMPPConnection,我们便可以通过这个通道与服务器进行通讯。
4.返回信息的实现
移动端通过继承asmack类库的IQ基类来封装自己的数据,然后在XMPPManager中获取连接并用编解码器完成对数据的封装,然后通过PacketWriter将数据发送给服务器端。例如封装一个确认消息Confirmation。
public class Confirmation extends IQ{}