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的初始化操作
TeamTalk Android代码分析(业务流程篇)的更多相关文章
- TeamTalk Android代码分析(业务流程篇)---消息发送和接收的整体逻辑说明
		第一次纪录东西,也没有特别的顺序,想到哪里就随手画了一下,后续会继续整理- 6.2消息页面动作流程 6.2.1 消息页面初始化的总体思路 1.页面数据的填充更新直接由页面主线程从本地数据库请求 2.数 ... 
- Android代码分析工具lint学习
		1 lint简介 1.1 概述 lint是随Android SDK自带的一个静态代码分析工具.它用来对Android工程的源文件进行检查,找出在正确性.安全.性能.可使用性.可访问性及国际化等方面可能 ... 
- ansible代码分析第一篇--主文件—ansible分析
		2016年2月23日,学习,分析ansible代码 ansible是一种运维中使用的批量部署的工具,它本身是一种框架,具体的部署和架构分析,下面这篇文章讲的不错. http://os.51cto.co ... 
- 私有析构函数 Android 代码分析
		有人说声明 Private Destructor, 这对象只能在 stack 上创建,不能在Heap上创建, 其实错了, 这样的程序编译都过不了. 那为何会有 Private Destructor, ... 
- android 代码分析
		1.@Override注解 @Override 注解是用来指定方法重写的,只能修饰方法并且只能用于方法重写,不能修饰其它的元素. 作用是告诉编译器检查这个方法,保证父类要包含一个被该方法重写的方法,否 ... 
- Android事件传递机制详解及最新源码分析——View篇
		摘要: 版权声明:本文出自汪磊的博客,转载请务必注明出处. 对于安卓事件传递机制相信绝大部分开发者都听说过或者了解过,也是面试中最常问的问题之一.但是真正能从源码角度理解具体事件传递流程的相信并不多, ... 
- Android事件传递机制详解及最新源码分析——ViewGroup篇
		版权声明:本文出自汪磊的博客,转载请务必注明出处. 在上一篇<Android事件传递机制详解及最新源码分析--View篇>中,详细讲解了View事件的传递机制,没掌握或者掌握不扎实的小伙伴 ... 
- Android核心分析之十六Android电话系统-概述篇
		Android电话系统之概述篇 首先抛开Android的一切概念来研究一下电话系统的最基本的描述.我们的手机首先用来打电话的,随后是需要一个电话本,随后是PIM,随后是网络应用,随后是云计算,随后是想 ... 
- Android艺术——Bitmap高效加载和缓存代码分析(2)
		Bitmap的加载与缓存代码分析: 图片的压缩 比如有一张1024*768像素的图像要被载入内存,然而最终你要用到的图片大小其实只有128*96,那么我们会浪费很大一部分内存,这显然是没有必要的,下面 ... 
随机推荐
- php错误抑制符
			php错误抑制符 简介 PHP 支持一个错误控制运算符:@.当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉. @这个符号在Java里面是注解符号. 实例 <?ph ... 
- Powershell 渗透测试工具-Nishang
			Powershell 渗透测试工具-Nishang 分享到: 作者:V1ct0r 稿费:500RMB(不服你也来投稿啊!) 投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿 传送门 ... 
- axis2调用webservice教训
			总结教训,axis2client调用WS接口时url不能加?wsdl,而用cxf调用时则要加上. 今天用axis2的RpcServerClient调用https的webservice接口,在设置完op ... 
- C# 添加应用程序包
			项目中可能会遇到某些扩展方法不可以应用的情况,这时候需要在项目中引用程序包 步骤如下: 回车即可 
- WPF全球化与本地化
			当一个App需要推出多语言版本时,就需要使用到[全球化与本地化]服务. 原理及过程 资源文件中包含了所有的控件信息,通过导出这些控件信息,修改其对应的相关属性(比如TextBlock的Text属性)的 ... 
- 判断输入的值是否为Double
			using System; using System.Collections.Generic; using System.Text; namespace TDRFactory { public cla ... 
- 三.Windows I/O模型之事件选择(WSAEventSelect )模型
			1.事件选择模型:和异步选择模型类似的是,它也允许应用程序在一个或多个套接字上,接收以事件为基础的网络事件通知.对于异步选择模型采用的网络事件来说,它们均可原封不动地移植到事件选择模型.事件选择模型和 ... 
- 搭建 Lepus 天兔 监控MySQL
			Part1: Lepus安装需要Lamp环境,lepus官网手册也建议采用XAMPP的方式安装,lepus也是在XAMPP上进行研发的 注意xampp会把apache,mysql,php都安装,所以要 ... 
- (转)基于MVC4+EasyUI的Web开发框架形成之旅--MVC控制器的设计
			http://www.cnblogs.com/wuhuacong/p/3284628.html 自从上篇<基于MVC4+EasyUI的Web开发框架形成之旅--总体介绍>总体性的概括,得到 ... 
- 通过nvm 切换 npm 版本
			通过 nvm-windows 更新 npm 1.先安装 nvm-windows .成功后可在命令窗口 输入nvm 查看到 nvm的版本号. 2..在命令窗口输入 nvm list,查看当前使用的 no ... 
