TeamTalk Android代码分析(业务流程篇)

TeamTalk Android代码分析(业务流程篇)

技术分享

1.1 总体结构

1.总体结构有点类似MVC的感觉,模块结构从上向下大体是:

 

UI层:Activity和Fragment构成,期间包括常用的一些开源控件如:imageloader,speedx,gifview等,和下层数据变更通知通过总线事件完成(EventBus)

 

管理层:Service(即:imservice,下文均采用此称呼)和一些按照业务划分的Manager(loginmanager,contactmanager,sessionmanager,socketmanager 等),该层负责业务的流转和数据接口的提供,

 

数据和缓存层:才greendao实现,包括一系列业务相关的缓存,缓存的对象在各manager实体中处理。 

 

网络层:具体由netty实现,获取或发送数据通过pb协议实现(protobuf)

2.1 登录过程

1>请求登录服务器(http),分配消息服务器及其他相关配置

 

2>链接请求消息服务器

 

3>其中如果网络连接失败,采用本地登录过程,即:在登录状态的情况下,没有网络也可以查看本地历史信息。

 

4>登录消息服务器成功后,发送总线事件通知imservice

 

5>imservice初始化各manager,开启本地和网络数据请求,本地缓存及其他配置的数据填充。

3.1 ContactManager的初始化操作

3.1.1 本地数据的业务操作

1>数据库load部门列表,并填充部门map(departmentmap)

2>数据库load用户列表,并填充用户map(usermap)

3>发送总线事件,通知相关界面(聊天/通讯录/my),并设置该manager数据状态就绪

 

相关页面动作如下:

1>聊天页面动作:只有session,user,group 数据全部就绪,这个页面才会更新,稍后再详细分析

2>通讯录页面动作:

  (1)设置用户tab数据,更新ui

  (2)设置部门tab数据,更新ui

  (3)用户和部门数据就绪,搜索状态可操作

3>通过loginmanager获取登录信息,更新ui(这个位置的触发,可以放置在登录成功后及时事件通知)

3.1.2 网络数据的业务操作

1>按照本地存储的最后时间点作为参数,请求部门列表

2>按照本地存储的最后时间点作为参数,请求用户列表

3>获取部门数据:

  1)缓存map

  2)存储db

  3)发送总线事件(userinfoevent事件,user_info_update),通知页面更新ui

     涉及页面有:通讯录页面:用户列表ui/部门列表ui/用户详细信息(userinfofragment),如果页面收到通知,则获取缓存数据,更新ui

4>获取用户数据:

  1)缓存usermap

  2)存储db

  3)发送总线事件更新ui,页面响应同部门数据。

 

注意事项:通知页面更新的总线事件,考虑采用poststicky 形式。

3.2 GroupManager的初始化操作

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。