细节:
如果本地可以自动登录, 先实现本地登录,发送事件通知,再请求登录服务器
如果本地不可以登录(第一次或退出后),直接请求登录服务器
登录服务器返回消息服务器ip port / 文件服务器
链接消息服务器(socketThread 通过netty)
链接成功或失败都发送事件通知 (可能是在loginactivity 处理,也可能在chatfragment处理,你懂滴)
链接失败弹出界面提示
链接成功 请求登录消息服务器(发送用户名 密码 etc)并且同时开启 回掉监听队列计时器(这个稍后再细看吧~)
登录消息服务器成功或失败都通过回掉 (回掉函数存储在packetlistner 中)处理
登录消息服务器失败 发送总线事件,也可能在两个位置处理(loginactvity/chatfragment ,你懂得~)
消息服务器登录成功,并解析返回的登录信息,发送登录成功的事件总线,事件的订阅者分为service 和 activity ,activity 中的事件负责ui的更新处理,service中事件处理,消息的进一步获取 ,与服务器打交道
判断登录的类型(普通登录和本地登录成功后的消息服务器登录)
service 收到登录成功(此指在线登录成功,本地登录成功也是一个道理,发送事件更新界面ui和在service中事件触发进一步的消息获取(获取本地库))的事件通知(按登录类型有所不同 ,大体一致)后,做如下工作:
1.保存本次的登录标示到xml
2.初始化数据库(创建或获取当前用户所在数据库统一操作接口单例)
3.请求联系列表
4.请求群组列表
5.请求最近会话列表
6.请求未读消息列表(只是在线登录状态)
7.重连管理类的相关设置(广播的注册等)
接下来就是对服务端发送消息过来的分析
1.服务端发送消息过来有回调的采用回掉处理
2.服务端没有回调的,按照commandid处理
消息的处理都是在相关的管理器类实例内完成
该存库的存库,该更新内存的,更新内存,然后发送事件总线更新ui 或者通知service中的相关订阅者,完成业务逻辑的数据相关处理