CooCare客户端与通讯服务器用法要点 - housekeeper-software/coocare GitHub Wiki

概要

分布式架构和多端在线的能力使得客户端开发时需要有些注意事项。

在线和离线

多端登录的时候,每个端登录和离线都会发通知给需要知道的终端。所以,按照多端登录的原理,客户端需要维持一个客户的多个端的在线状态。
比如桌面端离线,但是UWP还在线,此刻不算离线,因为服务器依然可以通过UWP端转发消息到对端。
再者,如果对端支持推送,即使没有连接,也是可以使得对端收到消息。

用户查询工程师状态

新版本服务器,可能返回state=0(表示离线)的结果,但此刻一定是移动端且有pushid。请检查客户端旧版本是否判断state。
对于新版本客户端,如果支持推送应该理解为在线。

高级查询

服务器新增queryex命令,可以查询一个或者多个终端的所有端登录信息和在线信息。新版本的工程师端和用户端均可以使用此命令。
查询方法:

cmd: queryex  
control:["xxx","xxx"],json数组,不用区分用户类型,在redis中都是唯一的。  
返回:[{},{}...],json数据,每个元素都是一个用户信息字典,如下:   

` 
  root->SetString("uid", user.uid);
  root->SetInteger("type", user.user_type);
  root->SetString("channel_id", user.channel_id);
  root->SetInteger("state", user.state);
  root->SetInteger("platform", user.platform);
  root->SetString("sid", user.sid);
  root->SetString("push_id", user.push_id);
`
uid可能会重复出现,表示一个账号的不同端的登录信息。这些信息在redis中是持久化存储,在用户登录的时候会更新,其他时间不会改变。  
state:用户实时在线状态。  
sid:最近登录的UserCenter  
push_id:如果存在的话,表示这个账号支持推送。此刻无需关心在线状态,直接可以给用户发消息。  
platform:就是最近一次用户登录的平台。