• 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的初始化操作

  • 相关阅读:
    网络爬虫之框架(Scrapy)
    模拟投币试验
    [LeetCode#177]Nth Highest Salary
    Windows Server 2008 各版本功能差异与比较各版本概观--转载
    Win2008 R2下Server Core常用命令小结
    powershell 中用Sqlps管理我台sqlserver 2008r2
    初识 Markdown
    React 入门(3): 严格模式 ReactDOM
    ES6 类的正确定义方式 公有类字段 getter / setter
    Lodash 去抖动 节流
  • 原文地址:https://www.cnblogs.com/qiyongqiang/p/4440432.html
Copyright © 2020-2023  润新知