原UShare协议

UShare连接Windows通信协议 ======================= |版本号|修改人|修改日期|备注| |----|----|----|----| |V1.0.0.0|陈熙|2018年8月21日|批注功能待补完| # 1. 协议基础 ## 1.1. 主体 - TCP/IP的Socket通信 ## 1.2. 内存字节序 - 高位编址 ## 1.3. 名词与缩写 |名词|解释|缩写| |----|----|----| |客户端||`C`| |服务端||`S`| |分割符||`\`| # 2. 帧 ## 2.1. 帧格式 |名称|类型|长度|描述| |----|----|----|----| |帧长度|字节|4|例:`0x00 00 00 01`(一个字长度)| |帧内容|字节|N|见帧内容定义| ## 2.2. 帧内容 |名称|类型|长度|描述| |----|----|----|----| |帧类型|字节|1|见帧类型定义| |实际内容|字节|n|不定长| # 3. 帧类型 ## 3.1 功能帧(0x0*) |名称|定义|具体内容| |----|----|----| |0x01|基本信息帧|设备名+ip+port| ## 3.2 屏幕同步(0x1*)(独立一个Socket连接) ### 3.2.1 android同步到pc - android: |名称|定义|具体内容| |----|----|----| |0x10|请求传屏到pc|| |0x11|android端主动结束传屏|| - pc: |名称|定义|具体内容| |----|----|----| |0x1D|pc端主动结束接收传屏|| |0x1E|允许android传屏到pc|ip+port(pc端接收传屏的端口)| |0x1F|拒绝android传屏到pc|| ### 3.2.2 pc同步到android - android: |名称|定义|具体内容| |----|----|----| |0x12|请求pc传屏到android|android端渲染view的高度int(4个Byte)| |0x13|android端主动结束接收传屏|| - pc: |名称|定义|具体内容| |----|----|----| |0x1A|pc端主动结束传屏|| |0x1B|允许传屏到android|ip+port(pc端发送传屏的服务器的端口)| |0x1C|拒绝传屏到android|| ### 3.2.3 视频帧内容 |名称|定义|具体内容| |----|----|----| |0x18|视频帧内容|帧类型(Byte)+H.264编码的视频帧数据| ## 3.3 文件上传与下载(0x2*)(独立一个Socket连接) ### 3.3.1 发送端 |名称|定义|具体内容| |----|----|----| |0x20|请求发送文件|| |0x21|所有文件发送开始|所有文件的文件路径(文件路径之间以`"\"`分割)| |0x22|文件信息(单个文件发送开始)|文件路径(string)+`"\"`+文件字节数(string)| |0x23|发送单个文件内容|文件路径字节长度+文件路径(string)+文件数据(ByteArray)| |0x24|发送单个文件结束|文件路径(string)| |0x25|所有文件发送结束|| ### 3.3.2 接收端 |名称|定义|具体内容| |----|----|----| |0x2E|允许发送文件|ip(string)+port(string)| |0x2F|拒绝发送文件|| ### 3.3.3 打开文件 - 使用原有指令连接发送,若为图片则使用自定义的图片浏览器打开 |名称|定义|具体内容| |----|----|----| |0x26|打开指定文件|具体内容见3.3.3.1| #### 3.3.3.1 |定义|首个字节|后续内容| |----|----|----| |打开图片|0x01|图片在已发送的图片列表中的index(int 4个字节)| |打开其他类型文件|0x00|文件在已发送的文件列表中的index(int 4个字节)| ## 3.4 触控板(0x3*)(键盘相关待补完) |名称|定义|具体内容| |----|----|----| |0x30|按钮点击|左键(0x01)或中键(0x02)或右键(0x03)+down(0x01)或release(0x02)| |0x31|指针移动|指针x轴偏移量dx(4个Byte)+指针y轴偏移量dy(4个Byte)| |0x32|button2(滚轮)滚动|滚轮滚动偏移量dy(4个Byte)| |0x33|快捷键|切换当前窗口(0x01)关闭当前窗口(0x02)显示桌面(0x03)| ## 3.5 图片浏览器(0x4*) - 1、开启批注后发送批注view的宽高给接收端 - 2、批注的坐标定位使用view的中心点偏移量(防止由于发送端接收端view的尺寸不一致引起批注位置偏移) - 3、接收端收到批注的坐标后需要根据发送端的view的搞度与接收端view的高度对坐标进行换算 - 4、第3步中换算得出批注点在接收端相对view中心的点偏移量,还原出接收端批注点在接收端的实际坐标进行绘制 - 5、聚光灯的坐标也与批注点坐标进行相同的换算 ### 3.5.1 批注相关 |名称|定义|具体内容| |----|----|----| |0x40|批注开关|0x01:开启,0x02:关闭| |0x41|切换批注笔类型|0x01:普通笔 0x02:激光笔 0x03:橡皮擦| |0x42|切换批注普通笔颜色|0x00蓝色 0x01黄色 0x02红色| |0x43|修改批注普通笔宽度|0x00小 0x01中 0x02大| |0x44|单点批注事件(包括普通笔(移动事件0x45),激光笔,橡皮擦)|见3.5.1.1| |0x45|普通笔多点移动事件|见3.5.1.2| |0x46|批注操作|清屏(0x01)或撤销(0x02)或恢复(0x03)| #### 3.5.1.1 单点事件 - 依次有 Flag,Mode,EventType,TouchId,x,y 六个参数 |名称|定义|具体内容| |----|----|----| |Flag|声明这是批注事件|0x44| |Mode|批注类型|0x01:普通笔 0x02:激光笔 0x03:橡皮擦| |EventType|批注事件类型|0x01:`ACTION_DOWN`, 0x02:`ACTION_POINTER_DOWN`, 0x03:`ACTION_MOVE`, 0x04:`ACTION_POINTER_UP`, 0x05:`ACTION_UP`| |TouchId|当前事件的touchId|Int值(4个Byte)| |x|事件的x轴坐标点|Int值(4个Byte)| |y|事件的y轴坐标点|Int值(4个Byte)| #### 3.5.1.2 普通笔移动事件 - 依次有 Flag,Mode,EventType,MovePoints 四个参数 |名称|定义|具体内容| |----|----|----| |Flag|声明这是批注普通笔多点移动事件|0x45| |Mode|批注类型|0x01:普通笔| |EventType|事件类型|0x03:`ACTION_MOVE`| |MovePoints|移动的点|每个点有事件id,x坐标,y坐标各4个字节共12个字节,每多1个点就增加12个字节(见3.5.1.3)| #### 3.5.1.3 普通笔移动事件点 - 依次有 id,x,y 三个参数 |名称|定义|具体内容| |----|----|----| |id|对应的事件id|Int值(4个Byte)| |x|事件x轴坐标|Int值(4个Byte)| |y|事件y轴坐标|Int值(4个Byte)| ### 3.5.2 聚光灯相关 |名称|定义|具体内容| |----|----|----| |0x48|聚光灯开关|0x01:打开,0x02:关闭| |0x49|更新聚光灯顶点坐标|index(1个Byte,左上0x00,右上0x01,左下0x02,右下0x03,整体0x05),坐标dx,dy(各4个Byte)| ### 3.5.3 图片旋转缩放事件 |名称|定义|具体内容| |----|----|----| |0x4C|图片缩放事件|缩放比例float(4个Byte) 缩放中心点x坐标与view的中心点x坐标偏差值float(4个Byte) 缩放中心点y坐标与view的中心点y坐标偏差值float(4个Byte)| |0x4D|图片位移|x轴上的偏差值float(4个Byte) y轴上的偏差值float(4个Byte)| |0x4E|图片旋转|旋转角度float(4个Byte) 旋转中心点为图片的中心点| |0x4F|重置图片旋转与缩放|| ### 3.5.4 图片浏览器退出,切换页指令 |名称|定义|具体内容| |----|----|----| |0x61|关闭图片浏览器|| |0x62|切换图片|目标图片在图片列表中的index(int 4个Byte)| ## 3.6 PPT演示(0x5*) - android->pc |名称|定义|具体内容| |----|----|----| |0x50|请求演示ppt|| |0x51|翻页|页码|| |0x52|点击下一步|| |0x53|请求批注|| |0x54|切换批注笔类型|0x01:普通笔 0x02:激光笔 0x03聚光灯| |0x55|切换普通笔颜色|颜色hex值(string)| |0x56|批注事件发送|事件类型(down:0x01,move:0x02,up:0x03),事件坐标点(xy各4个Byte)| |0x57|聚光灯顶点坐标|左上角顶点坐标(xy各4个Byte),右下角顶点坐标(xy各4个Byte)| |0x58|退出聚光灯|| |0x5C|退出演示|| - pc->android |名称|定义|具体内容| |----|----|----| |0x5D|pc端退出演示|| |0x5E|当前有ppt启动,允许演示|ip(string)+port(string)用于android连接下载预览图片| |0x5F|当没有ppt启动,拒绝演示|| ## 3.7 PC传屏android的操作事件定义 ### 3.7.1 鼠标事件 |名称|定义|具体内容| |----|----|----| |0x70|按钮点击|左键(0x01)或中键(0x02)或右键(0x03)+down(0x01)或release(0x02)| |0x71|指针移动|指针x轴偏移量dx(4个Byte)+指针y轴偏移量dy(4个Byte)| # 4. UDP广播 - pc端作为client发送广播,android作为server接收广播 - 广播内容为格式如下的String:“UBoardShare\设备名称\ip\port\连接密码” - 未设置连接密码时内容为:“UBoardShare\设备名称\ip\port”