揭秘云巢VueClient结构设计
最近云巢桌面云移动端的相关报道指数飙升,为了更深入的了解云巢移动客户端,记者再次走进了云巢,近距离揭秘云巢VueClient结构设计,VueClient是云巢桌面虚拟化协议中的客户端部分,作为用户能够直接接触的组件,具有如下几方面的基本功能:
l 可视化界面
l 鼠标、键盘输入
l 声音、录音
l 基本外设支持(usb、串口…)
结合云巢本身的产品,客户端部分需要实现多平台的支持,例如windows、linux、android、IOS平台的支持,这样VueClient也同样需要考虑如此,所以在设计时就需要将这个特性考虑进去。

图1 VueClient结构
如图1所示,VueClient结构包含4部分模块:
l 公共库
l 逻辑层
l 交互层
l UI层
公共库:
云巢的体系中公共库占有一个重要的位置,其作用就是提供一系列对各组件都可用的公共功能的集合。在VueClient设计中即考虑了云巢现有的资源,同时为了跨平台的考虑,将公共库作为一个模块加入到VueClient的结构中。
VueClient中的公共库模块包含了一些常用功能,同时是需要考虑跨平台性的,所以在添加功能、提供API时会统一接口;同时因为VueClient的一定的特殊性,在设计时将IOS、android平台也考虑进去,把公共库部分做成一个随时可以替换的模式。
逻辑层:
逻辑层实现的基本功能包含三类:协议解析、协议处理、图像处理,其中图像处理又包含普通图像处理,视频处理,图像处理部分涉及到图像算法部分,这里就不在过多介绍,关于图像处理部分有一些额外的设计,后续会继续介绍。
逻辑层使用的c实现的,其中涉及的部分与平台无关,所以这部分是跨平台的,不需要做额外处理。其中协议解析是与VueServer对应的,具体协议内容不做过多介绍;协议处理部分则是对解析后的数据的处理,协议处理部分可以调用部分交互层提供的API,实现两者之间的有机结合。
交互层:
交互层是连接UI层与逻辑层的桥梁,是使整个VueClient正常运作的主体部分。
交互层中包含一种事件处理机制,可以简单的理解为有一个队列去存放所有的事件,然后一个线程会定期的轮询检查每个事件的状态,当对应事件状态发生变化后,即为有操作需要处理,这时候会根据这个事件注册的处理回调函数去处理相应内容,有了解linux下select函数的用法的,也可以做相应类比,原理都很接近,只是实现方式根据具体需要做相应的调整。
交互层最主要的作用是使得UI层与逻辑层完全无关,这种设计思路是为了将UI层单独提出,避免使用平台性相关的方式去实现UI时,造成VueClient主体的大变动。
UI层:
由于有交互层的存在,所有UI层的实现是根据不同平台而选择最适合的实现方式的,现在已经实现的UI层界面实现方式包括:使用QT实现的界面(windows、linux),使用X11实现的linux界面,使用android SDK实现的android界面,使用OC实现的IOS界面,使用windows API实现的windows界面等。
其中UI层可以使用交互层提供的API,来实现与后端逻辑层的间接交互。
VueClient的整体设计即如上所述,这里仅仅是做了一个很粗浅的介绍,关于云巢桌面虚拟化协议的其他内容可以等我们下次在给大家揭秘。