fWX228941 / project

all by myself
1 stars 0 forks source link

流程 #54

Open fWX228941 opened 6 months ago

fWX228941 commented 6 months ago

4.1 MsgSystem服务初始化 应用启动时,通过bindService来启动MsgSystem服务,并获取其服务接口。UI可以通过相应接口来发消息以及监听与服务器连接状态等。服务初始化时,创建MmsConnImpl,GisConnImpl两个实例对象,分别用于与mms,gis服务器通信。调用registerEventListener用于接收专网变化,卡号码变化等事件,驱动MmsConnImpl,GisConnImpl登录状态机的状态变化

Image

4.2 MmsConnImpl初始化 初始化时,构建登录3个状态对象IdleStatus, LoggingStatus, LoginedStatus,以及状态驱动器SmHandler, MsgResponse用于消息以及登录状态上报

Image

4.3 UI连接状态注册以及上报 UI通过MsgSystem服务接口,可以注册消息接收,消息发送,登录状态等观察者。当收到服务器消息,或者登录状态改变时,会通过MsgResponse向所有观察者上报这些事件。

Image

4.4 登录流程 监听到专网可用事件或手动登录时,通过SmHandler发送EVENT_LOGIN事件,调用XMPP的connect, login操作,最终将状态切换到登录状态LoginedStatus,并通过MsgResponse上报登录状态

Image

4.5 进入登录状态后处理流程 进入登录状态后,创建MmsMsgHandler对象,用于处理从服务器发送过来的消息包,通过XMPP注册消息包接收器以及连接监听器,最后会启动心跳任务

Image

4.6 登录失败后处理流程 登录时,调用XMPP的connect超时时,回到未登录状态,并开启重连任务

Image

4.7 退出登录流程 当专网无信号或手动退出登录时,通过SmHandler发送EVENT_LOGOUT事件,调用XMPP的disconnect,退出登录,驱动状态机切换到未登录状态IdleStatus

Image

Image

4.9.2 重连时序图 登录失败,进入未登录状态后,会开启重连任务即设置下次触发发送心跳事件的alarm,服务收到alarm重连事件后,则调用mms或gis发起登录。如果登录失败,继续同样流程

Image

Image

4.10 发送超时流程 消息发送后,正常情况下,服务器会发回该消息ACK,通过消息ACK可以知道消息发送成功或失败,另外由于网络等一些情况,应用可能很长时间内都没有收到该消息ACK,因此需要设计超时重发机制: 默认发送超时时间设置为30秒,如果30秒内没有收到ACK消息,则重新发送该消息包,如果3次发送都超时。则通知消息发送超时失败处理4.10.2 超时时序图 发送消息时,会调用TimeoutMananger启动超时任务,如果没有在超时间内收到消息,则超时后,会重发消息包,如果三次超时未收到,则表示为发送超时。发送消息时携带回调接口,则调用超时回调接口,否则调用MmsMsgHandler 或GisMsgHandler的handleMsgTimeout方法进行相应处理

Image

Image

4.11 发送文本消息 向mms服务器发送文本消息,启动超时任务,然后收到服务器ack包,将消息保存到数据库

Image

4.12 发送多媒体消息 向mms服务器发送视频,图片等文件消息,相比较发送文本消息,只是多了一个附件上传过程,上传后发送消息流程同发送文本消息

Image

4.13 收到服务器发的文本消息 接收到mms服务器发来的文本消息4.13 收到服务器发的文本消息 接收到mms服务器发来的文本消息

Image

4.14 收到服务器发的多媒体消息 接收到mms服务器发来的视频,照片等文件消息

Image

4.15 监听到连接意外断开时 监听到socket连接意外断开时,发起再次登录

Image

4.16 收到超时或其他一些错误消息包时 XMPP读数据线程PacketReader会接收到socket异常后会向其消息注册者发送错误包,收到错误包时,发起再次登录,

Image