李勇

1.增加文档模块的对外接口,整理了文档的pdu结构

2.调整白板模块的pdu结构,和文档模块关联
此 diff 太大无法显示。
@@ -102,12 +102,22 @@ export default class MessageEntrance extends Emiter { @@ -102,12 +102,22 @@ export default class MessageEntrance extends Emiter {
102 //videoApe 102 //videoApe
103 this.getPlayVideoPath=this._getPlayVideoPath; 103 this.getPlayVideoPath=this._getPlayVideoPath;
104 this.getPublishVideoPath=this._getPublishVideoPath; 104 this.getPublishVideoPath=this._getPublishVideoPath;
  105 + this.publishVideo=this._publishVideo;
  106 + this.stopPublishVideo=this._stopPublishVideo;
  107 +
105 108
106 //whiteBoradApe 109 //whiteBoradApe
107 this.sendInsertAnnotaion=this._sendInsertAnnotaion; 110 this.sendInsertAnnotaion=this._sendInsertAnnotaion;
108 //this.sendUpdaterAnnotaion=this._sendUpdaterAnnotaion;//暂时关闭更新接口 111 //this.sendUpdaterAnnotaion=this._sendUpdaterAnnotaion;//暂时关闭更新接口
109 this.sendDeleteAnnotaion=this._sendDeleteAnnotaion; 112 this.sendDeleteAnnotaion=this._sendDeleteAnnotaion;
110 this.sendDeleteAllAnnotation=this._sendDeleteAllAnnotation; 113 this.sendDeleteAllAnnotation=this._sendDeleteAllAnnotation;
  114 +
  115 + //DocApe
  116 + this.sendDocumentUpload= this._sendDocumentUpload;//上传文档
  117 + this.sendDocumentSwitch= this._sendDocumentSwitch; //切换文档
  118 + this.sendDocumentDelete= this. _sendDocumentDelete;//删除文档
  119 + this.sendDocumentCommand= this._sendDocumentCommand;//操作文档(翻页、缩放、滚动...)
  120 +
111 //debug 121 //debug
112 //this.setDebugData=this._setDebugData; 122 //this.setDebugData=this._setDebugData;
113 } 123 }
@@ -295,19 +305,26 @@ export default class MessageEntrance extends Emiter { @@ -295,19 +305,26 @@ export default class MessageEntrance extends Emiter {
295 _getPlayVideoPath(_param){ 305 _getPlayVideoPath(_param){
296 if(_video_ape){ 306 if(_video_ape){
297 return _video_ape.getPlayVideoPath(_param); 307 return _video_ape.getPlayVideoPath(_param);
298 - }else {  
299 - return {"code":1,"data":"获取播放地址失败"};  
300 } 308 }
301 } 309 }
302 310
303 _getPublishVideoPath(_param){ 311 _getPublishVideoPath(_param){
304 if(_video_ape){ 312 if(_video_ape){
305 return _video_ape.getPublishVideoPath(_param); 313 return _video_ape.getPublishVideoPath(_param);
306 - }else {  
307 - return {"code":1,"data":"获取推流地址失败"};  
308 } 314 }
309 } 315 }
310 316
  317 + _publishVideo(_param){
  318 + if(_video_ape){
  319 + return _video_ape.publishVideo(_param);
  320 + }
  321 + }
  322 +
  323 + _stopPublishVideo(_param){
  324 + if(_video_ape){
  325 + return _video_ape.stopPublishVideo(_param);
  326 + }
  327 + }
311 328
312 //WhiteBoardApe 329 //WhiteBoardApe
313 // 添加标注,发送信息 330 // 添加标注,发送信息
@@ -335,6 +352,32 @@ export default class MessageEntrance extends Emiter { @@ -335,6 +352,32 @@ export default class MessageEntrance extends Emiter {
335 } 352 }
336 } 353 }
337 354
  355 + //DocApe
  356 + //上传文档
  357 + _sendDocumentUpload(_param){
  358 + if(_doc_ape){
  359 + _doc_ape.documentUpload(_param);
  360 + }
  361 + }
  362 + //切换文档
  363 + _sendDocumentSwitch(_param){
  364 + if(_doc_ape){
  365 + _doc_ape.documentSwitch(_param);
  366 + }
  367 + }
  368 + //删除文档
  369 + _sendDocumentDelete(_param){
  370 + if(_doc_ape){
  371 + _doc_ape.documentDelete(_param);
  372 + }
  373 + }
  374 + //操作文档(翻页、缩放、滚动...)
  375 + _sendDocumentCommand(_param){
  376 + if(_doc_ape){
  377 + _doc_ape.documentCommand(_param);
  378 + }
  379 + }
  380 +
338 // 白板笔记更新(svg) 381 // 白板笔记更新(svg)
339 annoUpdateHandler(annoInfo) { 382 annoUpdateHandler(annoInfo) {
340 const activeDocId = _confer_ape.activeDocId; 383 const activeDocId = _confer_ape.activeDocId;
@@ -25,5 +25,12 @@ class EngineUtils{ @@ -25,5 +25,12 @@ class EngineUtils{
25 } 25 }
26 return null; 26 return null;
27 } 27 }
  28 +
  29 + //生成nodeId的随机数
  30 + static generateNodeID(){
  31 + let time = new Date().getTime();
  32 + let nodeID:int = time % 1000000000;//time后9位
  33 + return nodeID;
  34 + }
28 } 35 }
29 export default EngineUtils; 36 export default EngineUtils;
@@ -37,6 +37,7 @@ MessageTypes.CHAT_RECEIVE = 'chat.receive'; @@ -37,6 +37,7 @@ MessageTypes.CHAT_RECEIVE = 'chat.receive';
37 //视频模块事件定义 37 //视频模块事件定义
38 MessageTypes.VIDEO_RECEIVE = 'video.receive'; 38 MessageTypes.VIDEO_RECEIVE = 'video.receive';
39 39
  40 +
40 //文档模块事件定义 41 //文档模块事件定义
41 MessageTypes.DOC_SHOW = 'document.show'; 42 MessageTypes.DOC_SHOW = 'document.show';
42 MessageTypes.DOC_UPLOAD='document.upload';//上传文档 43 MessageTypes.DOC_UPLOAD='document.upload';//上传文档
@@ -54,6 +54,7 @@ class ConferApe extends Ape { @@ -54,6 +54,7 @@ class ConferApe extends Ape {
54 ApeConsts.CONFERENCE_OBJ_COUNTER_NAME, ApeConsts.CONFERENCE_OBJ_COUNTER_TAG, 0, new ArrayBuffer); 54 ApeConsts.CONFERENCE_OBJ_COUNTER_NAME, ApeConsts.CONFERENCE_OBJ_COUNTER_TAG, 0, new ArrayBuffer);
55 55
56 this.on(pdu.RCPDU_SESSION_JOIN_RESPONSE, this._joinSessionHandler.bind(this)); 56 this.on(pdu.RCPDU_SESSION_JOIN_RESPONSE, this._joinSessionHandler.bind(this));
  57 +
57 } 58 }
58 59
59 _joinSessionHandler(confInfo) { 60 _joinSessionHandler(confInfo) {
@@ -155,7 +156,6 @@ class ConferApe extends Ape { @@ -155,7 +156,6 @@ class ConferApe extends Ape {
155 156
156 //更新人员列表数据 157 //更新人员列表数据
157 rosterUpdateHandler(nodeId, nodeData) { 158 rosterUpdateHandler(nodeId, nodeData) {
158 -  
159 //loger.log("更新人员列表数据 rosterUpdateHandler"); 159 //loger.log("更新人员列表数据 rosterUpdateHandler");
160 if (nodeData.role === ApeConsts.NR_MASTER || 160 if (nodeData.role === ApeConsts.NR_MASTER ||
161 nodeData.role === ApeConsts.NR_SLAVE) { 161 nodeData.role === ApeConsts.NR_SLAVE) {
@@ -18,9 +18,11 @@ import ApeConsts from './ApeConsts'; @@ -18,9 +18,11 @@ import ApeConsts from './ApeConsts';
18 import pdu from 'pdus'; 18 import pdu from 'pdus';
19 import Loger from 'Loger'; 19 import Loger from 'Loger';
20 import MessageTypes from 'MessageTypes'; 20 import MessageTypes from 'MessageTypes';
  21 +import GlobalConfig from 'GlobalConfig';
  22 +import EngineUtils from 'EngineUtils';
21 23
22 let loger = Loger.getLoger('DocApe'); 24 let loger = Loger.getLoger('DocApe');
23 - 25 +let itemIdx=0;//table插入新数据的计数id,目前用时间戳
24 class DocApe extends Ape { 26 class DocApe extends Ape {
25 constructor() { 27 constructor() {
26 super( 28 super(
@@ -38,21 +40,176 @@ class DocApe extends Ape { @@ -38,21 +40,176 @@ class DocApe extends Ape {
38 // 延迟 40 // 延迟
39 this._apeDelayed = true; 41 this._apeDelayed = true;
40 } 42 }
  43 + /////////////发送数据操作//////////////////////////////////////////////////////
  44 + //上传文档
  45 + documentUpload(paramInfo){
  46 + if(paramInfo==null||EngineUtils.isEmptyObject(paramInfo)){
  47 + loger.log('documentUpload失败,参数错误');
  48 + this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
  49 + return ;
  50 + }
  51 +
  52 + itemIdx=parseInt(Date.now()/1000);
  53 + let docDataModelPdu = this.packPdu(paramInfo,itemIdx);
  54 + if(docDataModelPdu==null){
  55 + loger.log('documentUpload失败,参数错误');
  56 + this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
  57 + return ;
  58 + }
  59 + console.log(docDataModelPdu);
  60 +
  61 + let tableItemPdu = new pdu['RCRegistryTableItemPdu'];
  62 + tableItemPdu.itemIdx=itemIdx;//直接用时间戳作为id
  63 + tableItemPdu.registerObjId=ApeConsts.DOCSHARING_OBJ_TABLE_ID_H5;
  64 + tableItemPdu.owner = 0;//收到flash的是这个值,不清楚先写固定
  65 + tableItemPdu.itemData =docDataModelPdu.toArrayBuffer();
  66 +
  67 + //insert
  68 + let tableInsertItemPdu = new pdu['RCRegistryTableInsertItemPdu'];
  69 + //optional RCPduType_E type = 1 [default = RCPDU_REG_TABLE_UPDATE_PDU];
  70 + //repeated RCRegistryTableItemPdu items = 2;
  71 + tableInsertItemPdu.type = pdu.RCPDU_REG_TABLE_INSERT_PDU;//
  72 + tableInsertItemPdu.items.push(tableItemPdu);
  73 +
  74 + let updateObjPdu = new pdu['RCRegistryUpdateObjPdu'];
  75 + updateObjPdu.objId = ApeConsts.DOCSHARING_OBJ_TABLE_ID_H5;
  76 + updateObjPdu.subType = tableInsertItemPdu.type;
  77 + updateObjPdu.userData = tableInsertItemPdu.toArrayBuffer();
  78 +
  79 + //同步
  80 + let adapterItemPdu = new pdu['RCAdapterItemPdu'];
  81 + adapterItemPdu.type = pdu.RCPDU_REG_UPDATE_OBJ;
  82 + adapterItemPdu.itemData = updateObjPdu.toArrayBuffer();
  83 +
  84 + let adapterPdu = new pdu['RCAdapterPdu'];
  85 + adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
  86 + adapterPdu.item.push(adapterItemPdu);
  87 +
  88 + console.log("文档upload tableItemPdu.itemIdx="+tableItemPdu.itemIdx);
  89 + this.sendUniform(adapterPdu,true);
  90 + }
  91 + //切换文档
  92 + documentSwitch(paramInfo){
  93 +
  94 + }
  95 +
  96 + //操作文档(翻页、缩放、滚动...)
  97 + documentCommand(paramInfo){
  98 +
  99 + }
  100 +
  101 + //删除文档
  102 + documentDelete(paramInfo){
  103 + //{"itemIdx":itemIdx}
  104 + let tableDeleteItemPdu = new pdu['RCRegistryTableDeleteItemPdu'];
  105 + //optional RCPduType_E type = 1 [default = RCPDU_REG_TABLE_DELETE_PDU];
  106 + // repeated uint32 item_idx = 2;
  107 + tableDeleteItemPdu.type = pdu.RCPDU_REG_TABLE_DELETE_PDU;//
  108 + tableDeleteItemPdu.itemIdx=parseInt(paramInfo.itemIdx);//这里需要设置要删除的数据的itemIdx,每条数据的这个id都不一样
  109 +
  110 + let updateObjPdu = new pdu['RCRegistryUpdateObjPdu'];
  111 + updateObjPdu.objId = ApeConsts.DOCSHARING_OBJ_TABLE_ID_H5;
  112 + updateObjPdu.subType = tableDeleteItemPdu.type;
  113 + updateObjPdu.userData = tableDeleteItemPdu.toArrayBuffer();
  114 +
  115 + //同步
  116 + let adapterItemPdu = new pdu['RCAdapterItemPdu'];
  117 + adapterItemPdu.type = pdu.RCPDU_REG_UPDATE_OBJ;
  118 + adapterItemPdu.itemData = updateObjPdu.toArrayBuffer();
  119 +
  120 + let adapterPdu = new pdu['RCAdapterPdu'];
  121 + adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
  122 + adapterPdu.item.push(adapterItemPdu);
  123 +
  124 + console.log("文档发送删除数据============="+tableDeleteItemPdu.itemIdx);
  125 + this.sendUniform(adapterPdu,true);
  126 + }
41 127
  128 + ///////白板数据的封包和解包/////////////////////////////////////////
  129 + packPdu(_param,_itemIdx){
  130 + //验证坐标点集合数组是否合法
  131 + if(_param.pointGroup==null||_param.pointGroup.length<1){
  132 + this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
  133 + return null;
  134 + }
  135 + /* required uint32 item_idx=1;//唯一标识
  136 + required uint32 owner=2;
  137 + optional uint32 from=3;
  138 + optional uint32 cur_page_no=4;
  139 + optional uint32 page_num =5;
  140 + required string filetype=6;
  141 + required string doc_type=7;
  142 + required string relative_url=8;//文档相对地址
  143 + optional string url =9;//文档地址
  144 + optional uint32 cur_V=10;
  145 + optional uint32 cur_H=11;
  146 + optional uint32 scale=12;
  147 + optional bool visible=13;
  148 + optional uint32 action=14;//0,无操作, 1翻页、2.显示/隐藏
  149 + optional string id=15;//文档在服务器数据库中的唯一id*/
  150 +
  151 + //判断type类型,根据type设置不同的参数
  152 + let docModelPdu =new pdu['RCDocSendDataModel'];
  153 + docModelPdu.itemIdx=_itemIdx;
  154 + docModelPdu.owner=GlobalConfig.nodeId;
  155 + docModelPdu.from=GlobalConfig.nodeId;
  156 + docModelPdu.curPageNo = 1;
  157 + docModelPdu.pageNum =10;
  158 + docModelPdu.fileType=_param.fileType||"";
  159 + docModelPdu.docType="pdf2swf";
  160 + docModelPdu.url = "http://101.200.150.192/DocSharing/data/h5test/20170206-171100025/7e9c4178cac1133e0dd9d5b583439122.jpg";
  161 + docModelPdu.relativeUrl="/DocSharing/data/h5test/20170206-171100025/7e9c4178cac1133e0dd9d5b583439122.jpg";
  162 + docModelPdu.curV=0;
  163 + docModelPdu.curH=0;
  164 + docModelPdu.scale=1;
  165 + docModelPdu.visible=false;
  166 + docModelPdu.action=0;//0,无操作, 1翻页、2.显示/隐藏
  167 + docModelPdu.id=_param.id||"";//文档在服务器数据库中的唯一id
  168 + return docModelPdu;
  169 + }
  170 +
  171 + unPackPdu(owner, itemIdx,itemData){
  172 + this.docList[itemIdx] = itemData;
  173 + try{
  174 + console.log("文档收到数据===unPackPdu ");
  175 + let docModelPdu= pdu['RCDocSendDataModel'].decode(itemData);
  176 + //console.log(whiteBoardModelPdu);
  177 + loger.log(docModelPdu);
  178 + return docModelPdu;
  179 + }catch (err){
  180 + console.log("unPackPdu Pdu解析错误,itemIdx="+itemIdx+" err:"+err.message);
  181 + }
  182 + return null;
  183 + }
  184 +
  185 + /////收到消息处理/////////////////////////////////////////////////////////////////////////////////
42 tableInsertHandler(owner, itemIdx, itemData) { 186 tableInsertHandler(owner, itemIdx, itemData) {
43 //this.tableUpdateHandler(owner, tableId, itemData); 187 //this.tableUpdateHandler(owner, tableId, itemData);
44 - let itemDataInfo = pdu['RCDocSendDataRequestPdu'].decode(itemData); 188 + //loger.log('tableInsertHandler---',itemData);
  189 + let itemDataInfo = this.unPackPdu(owner, itemIdx, itemData);
45 loger.log('tableInsertHandler',itemDataInfo); 190 loger.log('tableInsertHandler',itemDataInfo);
46 } 191 }
47 192
48 - tableDeleteHandler(itemIdx, itemData){ 193 + tableDeleteHandler(object_id, tableDeleteData){
49 /*const re={}; 194 /*const re={};
50 re.type=ApeConsts.DOCUMENT_DEL; 195 re.type=ApeConsts.DOCUMENT_DEL;
51 this._emit(MessageTypes.DOC_DELETE, re);*/ 196 this._emit(MessageTypes.DOC_DELETE, re);*/
52 197
  198 + loger.log('tableDeleteHandler',object_id,tableDeleteData);//["tableDeleteHandler",1179649,{"type":231,"itemIdx":[1486301768]}]
  199 + if(tableDeleteData&&tableDeleteData.itemIdx){
  200 + let len=tableDeleteData.itemIdx.length;
  201 + let itemIdxs=tableDeleteData.itemIdx;
  202 + for (let i=0;i<len;i++){
  203 + if(this.docList[itemIdxs[i]]){
  204 + delete this.docList[itemIdxs[i]];
  205 + loger.log("删除文档数据:",itemIdxs[i],"当前剩余的文档数据",this.docList);
  206 + }
  207 + }
  208 + }
53 } 209 }
54 tableUpdateHandler(owner, itemIdx, itemData) { 210 tableUpdateHandler(owner, itemIdx, itemData) {
55 - let itemDataInfo = pdu['RCDocSendDataRequestPdu'].decode(itemData); 211 + //let itemDataInfo = pdu['RCDocSendDataRequestPdu'].decode(itemData);
  212 + let itemDataInfo = this.unPackPdu(owner, itemIdx, itemData);
56 loger.log('tableUpdateHandler',itemDataInfo); 213 loger.log('tableUpdateHandler',itemDataInfo);
57 /*try { 214 /*try {
58 const recordInfo = pdu['RCDocSendDataRequestPdu'].decode(itemData); 215 const recordInfo = pdu['RCDocSendDataRequestPdu'].decode(itemData);
@@ -45,16 +45,30 @@ class VideoChat extends Ape { @@ -45,16 +45,30 @@ class VideoChat extends Ape {
45 // ape listeners 45 // ape listeners
46 this.on(pdu.RCPDU_VIDEO_SEND_DATA_REQUEST, this.videoIncomingHandler.bind(this)); 46 this.on(pdu.RCPDU_VIDEO_SEND_DATA_REQUEST, this.videoIncomingHandler.bind(this));
47 } 47 }
48 - 48 + /////////////发送数据操作//////////////////////////////////////////////////////
49 //获取播流地址 49 //获取播流地址
50 getPlayVideoPath(_param){ 50 getPlayVideoPath(_param){
  51 + loger.log('getPlayVideoPath');
51 return {"code":0,"data":"播放流地址XXXXXXXXXXXXXXXXXXXXX"}; 52 return {"code":0,"data":"播放流地址XXXXXXXXXXXXXXXXXXXXX"};
52 } 53 }
53 //获取推流地址 54 //获取推流地址
54 getPublishVideoPath(_param){ 55 getPublishVideoPath(_param){
  56 + loger.log('getPublishVideoPath');
55 return {"code":0,"data":"推流地址XXXXXXXXXXXXXXXXXXXXXXX"}; 57 return {"code":0,"data":"推流地址XXXXXXXXXXXXXXXXXXXXXXX"};
56 } 58 }
57 59
  60 + //推流
  61 + publishVideo(_param){
  62 + loger.log('publishVideo');
  63 + }
  64 + //停止推流
  65 + stopPublishVideo(_param){
  66 + loger.log('stopPublishVideo.');
  67 + }
  68 +
  69 +
  70 + /////收到消息处理/////////////////////////////////////////////////////////////////////////////////
  71 +
58 // 视频消息处理 72 // 视频消息处理
59 videoIncomingHandler(videoBuffer) { 73 videoIncomingHandler(videoBuffer) {
60 let videoReceivePdu = pdu['VideoSendDataRequestPdu'].decode(videoBuffer); 74 let videoReceivePdu = pdu['VideoSendDataRequestPdu'].decode(videoBuffer);
@@ -261,8 +261,8 @@ class WhiteBoardApe extends Ape { @@ -261,8 +261,8 @@ class WhiteBoardApe extends Ape {
261 whiteBoardModelPdu.type =_param.type; 261 whiteBoardModelPdu.type =_param.type;
262 whiteBoardModelPdu.itemIdx =_itemIdx; 262 whiteBoardModelPdu.itemIdx =_itemIdx;
263 whiteBoardModelPdu.initiator =GlobalConfig.nodeId; 263 whiteBoardModelPdu.initiator =GlobalConfig.nodeId;
264 - whiteBoardModelPdu.parentId=ApeConsts.WHITEBOARD_OBJ_TABLE_ID;  
265 - whiteBoardModelPdu.pageNum=_param.pageNum||1; 264 + whiteBoardModelPdu.parentId=_param.parentId||0;
  265 + whiteBoardModelPdu.curPage=_param.curPage||1;
266 whiteBoardModelPdu.pointGroup =EngineUtils.arrayToJsonString(_param.pointGroup); 266 whiteBoardModelPdu.pointGroup =EngineUtils.arrayToJsonString(_param.pointGroup);
267 whiteBoardModelPdu.color=_param.color||"#000000"; 267 whiteBoardModelPdu.color=_param.color||"#000000";
268 268
@@ -274,7 +274,9 @@ class WhiteBoardApe extends Ape { @@ -274,7 +274,9 @@ class WhiteBoardApe extends Ape {
274 console.log("白板收到数据===unPackPdu "); 274 console.log("白板收到数据===unPackPdu ");
275 let whiteBoardModelPdu= pdu['RCWhiteBoardDataModel'].decode(itemData); 275 let whiteBoardModelPdu= pdu['RCWhiteBoardDataModel'].decode(itemData);
276 //console.log(whiteBoardModelPdu); 276 //console.log(whiteBoardModelPdu);
277 - loger.log(whiteBoardModelPdu); 277 + //loger.log(whiteBoardModelPdu);
  278 + let _pointGroup= EngineUtils.arrayFromJsonString(whiteBoardModelPdu.pointGroup);
  279 + whiteBoardModelPdu.pointGroup=_pointGroup;
278 return whiteBoardModelPdu; 280 return whiteBoardModelPdu;
279 }catch (err){ 281 }catch (err){
280 console.log("unPackPdu Pdu解析错误,itemIdx="+itemIdx+" err:"+err.message); 282 console.log("unPackPdu Pdu解析错误,itemIdx="+itemIdx+" err:"+err.message);
@@ -300,6 +302,7 @@ class WhiteBoardApe extends Ape { @@ -300,6 +302,7 @@ class WhiteBoardApe extends Ape {
300 }*/ 302 }*/
301 let whiteBoardModel=this.unPackPdu(owner, itemIdx,itemData); 303 let whiteBoardModel=this.unPackPdu(owner, itemIdx,itemData);
302 loger.log('tableInsertHandler',whiteBoardModel); 304 loger.log('tableInsertHandler',whiteBoardModel);
  305 + this._emit(MessageTypes.WHITEBOARD_ANNOTAION_INSERT,whiteBoardModel);
303 } 306 }
304 307
305 tableUpdateHandler(owner, itemIdx, itemData) { 308 tableUpdateHandler(owner, itemIdx, itemData) {
@@ -332,6 +335,8 @@ class WhiteBoardApe extends Ape { @@ -332,6 +335,8 @@ class WhiteBoardApe extends Ape {
332 } else { 335 } else {
333 loger.log('白板动作忽略,类型:', ApeConsts(recordInfo.type)); 336 loger.log('白板动作忽略,类型:', ApeConsts(recordInfo.type));
334 }*/ 337 }*/
  338 +
  339 + this._emit(MessageTypes.WHITEBOARD_ANNOTATION_UPDATE,whiteBoardModel);
335 } 340 }
336 tableDeleteHandler(object_id, tableDeleteData){ 341 tableDeleteHandler(object_id, tableDeleteData){
337 // console.log("白板收到数据,tableDeleteHandler object_id="+object_id);//((18<< 16) + 1)=1179649 342 // console.log("白板收到数据,tableDeleteHandler object_id="+object_id);//((18<< 16) + 1)=1179649
@@ -341,8 +346,10 @@ class WhiteBoardApe extends Ape { @@ -341,8 +346,10 @@ class WhiteBoardApe extends Ape {
341 let itemIdxs=tableDeleteData.itemIdx; 346 let itemIdxs=tableDeleteData.itemIdx;
342 for (let i=0;i<len;i++){ 347 for (let i=0;i<len;i++){
343 if(this.annoInfos[itemIdxs[i]]){ 348 if(this.annoInfos[itemIdxs[i]]){
  349 + loger.log("删除白板数据:",itemIdxs[i],"当前剩余的白板数据");
  350 + console.log(this.annoInfos); this._emit(MessageTypes.WHITEBOARD_ANNOTAION_DELETE,{ "itemIdx":itemIdxs[i]});
  351 + this._emit(MessageTypes.WHITEBOARD_ANNOTAION_DELETE,{ "itemIdx":itemIdxs[i]});
344 delete this.annoInfos[itemIdxs[i]]; 352 delete this.annoInfos[itemIdxs[i]];
345 - loger.log("删除白板数据:",itemIdxs[i],"当前剩余的白板数据",this.annoInfos);  
346 } 353 }
347 } 354 }
348 } 355 }
@@ -12,6 +12,7 @@ import ConferApe from 'apes/ConferApe'; @@ -12,6 +12,7 @@ import ConferApe from 'apes/ConferApe';
12 import ArrayBufferUtil from 'libs/ArrayBufferUtil'; 12 import ArrayBufferUtil from 'libs/ArrayBufferUtil';
13 import Base64 from 'base64-js'; 13 import Base64 from 'base64-js';
14 import GlobalConfig from 'GlobalConfig'; 14 import GlobalConfig from 'GlobalConfig';
  15 +import EngineUtils from 'EngineUtils';
15 16
16 let loger = Loger.getLoger('MCU'); 17 let loger = Loger.getLoger('MCU');
17 18
@@ -161,7 +162,7 @@ class MCU extends Emiter { @@ -161,7 +162,7 @@ class MCU extends Emiter {
161 _confInfo.confId = parseInt(_confInfo.confId); // confId 必须整形 162 _confInfo.confId = parseInt(_confInfo.confId); // confId 必须整形
162 this.confInfo = _confInfo; 163 this.confInfo = _confInfo;
163 // 创建刷新nodeId 164 // 创建刷新nodeId
164 - this.confInfo.nodeId = parseInt(Date.now() / 1000); 165 + this.confInfo.nodeId =EngineUtils.generateNodeID();
165 GlobalConfig.nodeId=this.confInfo.nodeId;//这是标识自己身份的id 166 GlobalConfig.nodeId=this.confInfo.nodeId;//这是标识自己身份的id
166 167
167 let nodeInfoRecordPdu = new pdu['RCNodeInfoRecordPdu']; 168 let nodeInfoRecordPdu = new pdu['RCNodeInfoRecordPdu'];
@@ -701,19 +701,35 @@ message RCChatSendDataRequestPdu { @@ -701,19 +701,35 @@ message RCChatSendDataRequestPdu {
701 } 701 }
702 702
703 message RCDocSendDataRequestPdu { 703 message RCDocSendDataRequestPdu {
704 - required int32 id = 1; 704 + required uint32 id = 1;
705 required string doc_type = 2; 705 required string doc_type = 2;
706 required string uri = 3; 706 required string uri = 3;
707 - optional int32 owner = 4;  
708 - optional int32 from = 5; 707 + optional uint32 owner = 4;
  708 + optional uint32 from = 5;
709 optional string name = 6; 709 optional string name = 6;
710 - optional int32 cur_page_no = 7;  
711 - optional int32 cur_H = 8;  
712 - optional int32 cur_V = 9;  
713 - optional int32 scale = 10;  
714 - optional int32 page_num = 11; 710 + optional uint32 cur_page_no = 7;
  711 + optional uint32 cur_H = 8;
  712 + optional uint32 cur_V = 9;
  713 + optional uint32 scale = 10;
  714 + optional uint32 page_num = 11;
  715 +}
  716 +message RCDocSendDataModel {
  717 + required uint32 item_idx=1;//唯一标识
  718 + required uint32 owner=2;
  719 + optional uint32 from=3;
  720 + optional uint32 cur_page_no=4;
  721 + optional uint32 page_num =5;
  722 + required string file_type=6;
  723 + required string doc_type=7;
  724 + required string relative_url=8;//文档相对地址
  725 + optional string url =9;//文档地址
  726 + optional uint32 cur_V=10;
  727 + optional uint32 cur_H=11;
  728 + optional uint32 scale=12;
  729 + optional bool visible=13;
  730 + optional uint32 action=14;//0,无操作, 1翻页、2.显示/隐藏
  731 + optional string id=15;//文档在服务器数据库中的唯一id
715 } 732 }
716 -  
717 message RCGiftSendDataRequestPdu { 733 message RCGiftSendDataRequestPdu {
718 optional uint32 initiator = 1; 734 optional uint32 initiator = 1;
719 required uint32 peer = 2; 735 required uint32 peer = 2;
@@ -834,7 +850,7 @@ message RCWhiteBoardDataModel { @@ -834,7 +850,7 @@ message RCWhiteBoardDataModel {
834 required uint32 itemIdx= 2;//itemIdx 每一次绘制的唯一标识 850 required uint32 itemIdx= 2;//itemIdx 每一次绘制的唯一标识
835 required uint32 initiator=3; //绘制来自谁 851 required uint32 initiator=3; //绘制来自谁
836 required uint32 parentId=4; //父级的id 852 required uint32 parentId=4; //父级的id
837 - required uint32 pageNum= 5;//页码 853 + required uint32 curPage= 5;//页码
838 optional string pointGroup=6; //坐标点集数组的JSON字符串 854 optional string pointGroup=6; //坐标点集数组的JSON字符串
839 optional string color=7 [default = "#000000"]; //颜色 855 optional string color=7 [default = "#000000"]; //颜色
840 optional uint32 thickness= 8 ;//线条粗细 856 optional uint32 thickness= 8 ;//线条粗细