李勇

1.修改白板模块的对外接口,简化外部事件的监听

此 diff 太大无法显示。
@@ -115,6 +115,7 @@ export default class MessageEntrance extends Emiter { @@ -115,6 +115,7 @@ export default class MessageEntrance extends Emiter {
115 this.sendInsertAnnotaion=this._sendInsertAnnotaion; 115 this.sendInsertAnnotaion=this._sendInsertAnnotaion;
116 this.sendDeleteAnnotaion=this._sendDeleteAnnotaion; 116 this.sendDeleteAnnotaion=this._sendDeleteAnnotaion;
117 this.sendDeleteAllAnnotation=this._sendDeleteAllAnnotation; 117 this.sendDeleteAllAnnotation=this._sendDeleteAllAnnotation;
  118 + this.sendGotoPrev=this._sendGotoPrev;
118 119
119 //DocApe 120 //DocApe
120 this.sendDocumentUpload= this._sendDocumentUpload;//上传文档 121 this.sendDocumentUpload= this._sendDocumentUpload;//上传文档
@@ -475,6 +476,13 @@ export default class MessageEntrance extends Emiter { @@ -475,6 +476,13 @@ export default class MessageEntrance extends Emiter {
475 _whiteboard_ape.sendDeleteAllAnnotation(_param); 476 _whiteboard_ape.sendDeleteAllAnnotation(_param);
476 } 477 }
477 } 478 }
  479 + //返回上一步标注
  480 + _sendGotoPrev(_param){
  481 + if(_whiteboard_ape){
  482 + _whiteboard_ape.gotoPrev(_param);
  483 + }
  484 + }
  485 +
478 486
479 //DocApe 487 //DocApe
480 //上传文档 488 //上传文档
@@ -47,10 +47,11 @@ MessageTypes.DOC_UPDATE = 'document.update';//更新文档 @@ -47,10 +47,11 @@ MessageTypes.DOC_UPDATE = 'document.update';//更新文档
47 MessageTypes.DOC_DELETE='document.delete';//删除文档 47 MessageTypes.DOC_DELETE='document.delete';//删除文档
48 MessageTypes.DOC_ANNOTATION = 'document.annotation';//笔记 48 MessageTypes.DOC_ANNOTATION = 'document.annotation';//笔记
49 49
50 -//笔记事件定义 50 +//白板笔记事件定义
51 MessageTypes.WHITEBOARD_ANNOTATION_UPDATE = 'whiteboard.annotation.update'; 51 MessageTypes.WHITEBOARD_ANNOTATION_UPDATE = 'whiteboard.annotation.update';
52 -MessageTypes.WHITEBOARD_ANNOTAION_INSERT = 'whiteboard.annotation.insert';  
53 -MessageTypes.WHITEBOARD_ANNOTAION_DELETE = 'whiteboard.annotation.delete'; 52 +//MessageTypes.WHITEBOARD_ANNOTAION_INSERT = 'whiteboard.annotation.insert';
  53 +//MessageTypes.WHITEBOARD_ANNOTAION_DELETE = 'whiteboard.annotation.delete';
  54 +//MessageTypes.WHITEBOARD_ANNOTATION_CLEAR = 'whiteboard.annotation.clear';
54 55
55 56
56 //音频 57 //音频
@@ -160,7 +160,7 @@ export default class Ape extends Emiter { @@ -160,7 +160,7 @@ export default class Ape extends Emiter {
160 let tableInsertItemsLen = tableInsertItems.length; 160 let tableInsertItemsLen = tableInsertItems.length;
161 for (let i = 0; i < tableInsertItemsLen; ++i) { 161 for (let i = 0; i < tableInsertItemsLen; ++i) {
162 let insertItem = tableInsertItems[i]; 162 let insertItem = tableInsertItems[i];
163 - console.log("insertItem",insertItem); 163 + loger.log("insertItem",insertItem);
164 this.tableInsertHandler(insertItem.owner, insertItem.itemIdx, insertItem.itemData); 164 this.tableInsertHandler(insertItem.owner, insertItem.itemIdx, insertItem.itemData);
165 } 165 }
166 break; 166 break;
@@ -173,7 +173,7 @@ export default class Ape extends Emiter { @@ -173,7 +173,7 @@ export default class Ape extends Emiter {
173 let tableUpdateData = pdu['RCRegistryTableUpdateItemPdu'].decode(user_data); 173 let tableUpdateData = pdu['RCRegistryTableUpdateItemPdu'].decode(user_data);
174 let tableUpdateItems = tableUpdateData.items; 174 let tableUpdateItems = tableUpdateData.items;
175 let tableUpdateItemsLen= tableUpdateItems.length; 175 let tableUpdateItemsLen= tableUpdateItems.length;
176 - console.log("RCRegistryTableUpdateItemPdu "+tableUpdateItemsLen); 176 + loger.log("RCRegistryTableUpdateItemPdu "+tableUpdateItemsLen);
177 console.log(tableUpdateData); 177 console.log(tableUpdateData);
178 178
179 for (let i = 0; i < tableUpdateItemsLen; ++i) { 179 for (let i = 0; i < tableUpdateItemsLen; ++i) {
@@ -209,7 +209,6 @@ export default class Ape extends Emiter { @@ -209,7 +209,6 @@ export default class Ape extends Emiter {
209 tableDeleteHandler(tableId, record) { 209 tableDeleteHandler(tableId, record) {
210 loger.warn(this._session_name + ' tableDelHandler 应有子类具体覆盖处理.'); 210 loger.warn(this._session_name + ' tableDelHandler 应有子类具体覆盖处理.');
211 } 211 }
212 -  
213 onJoinChannelHandlerSuccess(){ 212 onJoinChannelHandlerSuccess(){
214 loger.warn(this._session_name + ' onJoinChannelHandlerSuccess 应有子类具体覆盖处理.'); 213 loger.warn(this._session_name + ' onJoinChannelHandlerSuccess 应有子类具体覆盖处理.');
215 } 214 }
@@ -33,379 +33,344 @@ const TYPE_CIRCLE=3;//圆形 @@ -33,379 +33,344 @@ const TYPE_CIRCLE=3;//圆形
33 const TYPE_TEXT=4;//文本 33 const TYPE_TEXT=4;//文本
34 34
35 class WhiteBoardApe extends Ape { 35 class WhiteBoardApe extends Ape {
36 - constructor() {  
37 - super(  
38 - ApeConsts.WHITEBOARD_SESSION_ID,  
39 - ApeConsts.WHITEBOARD_SESSION_NAME,  
40 - ApeConsts.WHITEBOARD_SESSION_TAG  
41 - );  
42 - // properties  
43 - this.annoInfos = {};  
44 - // 白板延迟  
45 - // this._apeDelayed = true;  
46 -  
47 - //Ape Models  
48 - this.registerKey(this._session_id, this._session_name, this._session_tag, new ArrayBuffer);  
49 - this.registerObj(pdu.RCPDU_REG_REGISTER_TABLE, ApeConsts.WHITEBOARD_OBJ_TABLE_ID,  
50 - ApeConsts.WHITEBOARD_OBJ_TABLE_NAME, ApeConsts.WHITEBOARD_OBJ_TABLE_TAG, 0, new ArrayBuffer);  
51 -  
52 - // ape listeners  
53 - this.on(pdu.RCPDU_SESSION_JOIN_RESPONSE, this._joinSessionHandler.bind(this));  
54 - //this.on(pdu.RCPDU_CONFERENCE_SEND_DATA_REQUEST, this.whiteboardMsgComingHandler.bind(this));//这个是会议消息类型,flash里在使用这里不再使用,各个模块的消息由模块自己来处理  
55 - }  
56 -  
57 - _joinSessionHandler(_data) {  
58 - loger.log("RCPDU_SESSION_JOIN_RESPONSE");  
59 - }  
60 -  
61 - /////////////发送数据操作//////////////////////////////////////////////////////  
62 - // 添加标注,发送信息  
63 - sendInsetAnnotaion(_param){  
64 -/* itemIdx=parseInt(Date.now()/1000);  
65 - let whiteBoardModelPdu =new pdu['RCWhiteBoardDataModel'];  
66 - whiteBoardModelPdu.id =itemIdx;  
67 - whiteBoardModelPdu.initiator =GlobalConfig.nodeId;  
68 - whiteBoardModelPdu.pointGroup =EngineUtils.arrayToJsonString([{"w":10,"h":20},{"w":10,"h":20},{"w":10,"h":20},{"w":10,"h":20}]);  
69 - whiteBoardModelPdu.type = 3;  
70 -  
71 - */  
72 -  
73 - /* let whiteBoardModelPdu =new pdu['RCWhiteBoardDataModel'];  
74 - whiteBoardModelPdu.id =ApeConsts.WHITEBOARD_OBJ_TABLE_ID;  
75 - whiteBoardModelPdu.initiator =GlobalConfig.nodeId;  
76 - whiteBoardModelPdu.pointGroup =EngineUtils.arrayToJsonString([{"w":133,"h":20},{"w":1313,"h":20},{"w":313,"h":20},{"w":10,"h":20}]);  
77 - whiteBoardModelPdu.type = 3;  
78 - */  
79 -  
80 - if(_param==null||EngineUtils.isEmptyObject(_param)){  
81 - loger.log('sendInsetAnnotaion失败,参数错误');  
82 - this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);  
83 - return ; 36 + constructor() {
  37 + super(
  38 + ApeConsts.WHITEBOARD_SESSION_ID,
  39 + ApeConsts.WHITEBOARD_SESSION_NAME,
  40 + ApeConsts.WHITEBOARD_SESSION_TAG
  41 + );
  42 + // properties
  43 + this.annoInfos = {};//储存所有的标注数据
  44 + this.insertHistory=[];//添加的白板记录,用于撤回操作
  45 + // 白板延迟
  46 + // this._apeDelayed = true;
  47 +
  48 + //Ape Models
  49 + this.registerKey(this._session_id, this._session_name, this._session_tag, new ArrayBuffer);
  50 + this.registerObj(pdu.RCPDU_REG_REGISTER_TABLE, ApeConsts.WHITEBOARD_OBJ_TABLE_ID,
  51 + ApeConsts.WHITEBOARD_OBJ_TABLE_NAME, ApeConsts.WHITEBOARD_OBJ_TABLE_TAG, 0, new ArrayBuffer);
  52 +
  53 + // ape listeners
  54 + this.on(pdu.RCPDU_SESSION_JOIN_RESPONSE, this._joinSessionHandler.bind(this));
  55 + //this.on(pdu.RCPDU_CONFERENCE_SEND_DATA_REQUEST, this.whiteboardMsgComingHandler.bind(this));//这个是会议消息类型,flash里在使用这里不再使用,各个模块的消息由模块自己来处理
84 } 56 }
85 57
86 - itemIdx=EngineUtils.creatTimestamp();  
87 - let whiteBoardModelPdu = this.packPdu(_param,itemIdx);  
88 - if(whiteBoardModelPdu==null){  
89 - loger.log('sendInsetAnnotaion失败,参数错误');  
90 - this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);  
91 - return ;  
92 - }  
93 - console.log(whiteBoardModelPdu);  
94 -  
95 - let tableItemPdu = new pdu['RCRegistryTableItemPdu'];  
96 - tableItemPdu.itemIdx=itemIdx;//直接用时间戳作为id  
97 - tableItemPdu.registerObjId=ApeConsts.WHITEBOARD_OBJ_TABLE_ID;  
98 - tableItemPdu.owner = 0;//收到flash的是这个值,不清楚先写固定  
99 - tableItemPdu.itemData =whiteBoardModelPdu.toArrayBuffer();  
100 -  
101 - //insert  
102 - let tableInsertItemPdu = new pdu['RCRegistryTableInsertItemPdu'];  
103 - //optional RCPduType_E type = 1 [default = RCPDU_REG_TABLE_UPDATE_PDU];  
104 - //repeated RCRegistryTableItemPdu items = 2;  
105 - tableInsertItemPdu.type = pdu.RCPDU_REG_TABLE_INSERT_PDU;//  
106 - tableInsertItemPdu.items.push(tableItemPdu);  
107 -  
108 - let updateObjPdu = new pdu['RCRegistryUpdateObjPdu'];  
109 - updateObjPdu.objId = ApeConsts.WHITEBOARD_OBJ_TABLE_ID;  
110 - updateObjPdu.subType = tableInsertItemPdu.type;  
111 - updateObjPdu.userData = tableInsertItemPdu.toArrayBuffer();  
112 -  
113 - //同步  
114 - let adapterItemPdu = new pdu['RCAdapterItemPdu'];  
115 - adapterItemPdu.type = pdu.RCPDU_REG_UPDATE_OBJ;  
116 - adapterItemPdu.itemData = updateObjPdu.toArrayBuffer();  
117 -  
118 - let adapterPdu = new pdu['RCAdapterPdu'];  
119 - adapterPdu.type = pdu.RCPDU_REG_ADAPTER;  
120 - adapterPdu.item.push(adapterItemPdu);  
121 -  
122 - console.log("添加白板数据=====itemIdx="+tableItemPdu.itemIdx);  
123 - this.sendUniform(adapterPdu,true);  
124 - }  
125 - //删除所有标注  
126 - sendDeleteAllAnnotation(_param){  
127 - for (let key in this.annoInfos){  
128 - //console.log("key:"+key);  
129 - console.log("删除白板数据,itemIdx:"+key);  
130 - this.sendDeleteAnnotaion({"itemIdx":key}); 58 + _joinSessionHandler(_data) {
  59 + loger.log("RCPDU_SESSION_JOIN_RESPONSE");
  60 + this.insertHistory=[];
131 } 61 }
132 - }  
133 - //删除标注,发送信息  
134 - sendDeleteAnnotaion(_param){  
135 - //{"itemIdx":itemIdx}  
136 - let tableDeleteItemPdu = new pdu['RCRegistryTableDeleteItemPdu'];  
137 - //optional RCPduType_E type = 1 [default = RCPDU_REG_TABLE_DELETE_PDU];  
138 - // repeated uint32 item_idx = 2;  
139 - tableDeleteItemPdu.type = pdu.RCPDU_REG_TABLE_DELETE_PDU;//  
140 - tableDeleteItemPdu.itemIdx=parseInt(_param.itemIdx);//这里需要设置要删除的数据的itemIdx,每条数据的这个id都不一样  
141 -  
142 - let updateObjPdu = new pdu['RCRegistryUpdateObjPdu'];  
143 - updateObjPdu.objId = ApeConsts.WHITEBOARD_OBJ_TABLE_ID;  
144 - updateObjPdu.subType = tableDeleteItemPdu.type;  
145 - updateObjPdu.userData = tableDeleteItemPdu.toArrayBuffer();  
146 -  
147 - //同步  
148 - let adapterItemPdu = new pdu['RCAdapterItemPdu'];  
149 - adapterItemPdu.type = pdu.RCPDU_REG_UPDATE_OBJ;  
150 - adapterItemPdu.itemData = updateObjPdu.toArrayBuffer();  
151 -  
152 - let adapterPdu = new pdu['RCAdapterPdu'];  
153 - adapterPdu.type = pdu.RCPDU_REG_ADAPTER;  
154 - adapterPdu.item.push(adapterItemPdu);  
155 -  
156 - console.log("白板发送删除数据============="+tableDeleteItemPdu.itemIdx);  
157 - this.sendUniform(adapterPdu,true);  
158 - }  
159 -  
160 -  
161 - //更新标注  
162 - sendUpdaterAnnotaion(_param){  
163 - if(_param==null||EngineUtils.isEmptyObject(_param)){  
164 - loger.log('sendUpdaterAnnotaion失败,参数错误');  
165 - this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);  
166 - return ;  
167 - }  
168 -  
169 - /* let whiteBoardModelPdu =new pdu['RCWhiteBoardDataModel'];  
170 - whiteBoardModelPdu.id =ApeConsts.WHITEBOARD_OBJ_TABLE_ID;  
171 - whiteBoardModelPdu.initiator =GlobalConfig.nodeId;  
172 - whiteBoardModelPdu.pointGroup =EngineUtils.arrayToJsonString([{"w":133,"h":20},{"w":1313,"h":20},{"w":313,"h":20},{"w":10,"h":20}]);  
173 - whiteBoardModelPdu.type = 3;  
174 - */  
175 -  
176 - itemIdx=_param.itemIdx;  
177 - let whiteBoardModelPdu = this.packPdu(_param,itemIdx);  
178 - //console.log(whiteBoardModelPdu);  
179 -  
180 - if(whiteBoardModelPdu==null){  
181 - loger.log('sendInsetAnnotaion失败,参数错误');  
182 - this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);  
183 - return ;  
184 - }  
185 -  
186 - let tableItemPdu = new pdu['RCRegistryTableItemPdu'];  
187 - tableItemPdu.itemIdx=itemIdx;  
188 - tableItemPdu.owner = 0;//收到flash的是这个值,不清楚先写固定  
189 - tableItemPdu.registerObjId=ApeConsts.WHITEBOARD_OBJ_TABLE_ID;  
190 - tableItemPdu.itemData =whiteBoardModelPdu.toArrayBuffer();  
191 -  
192 -  
193 - //updater  
194 - let whiteBoardUpdateItem = new pdu['RCRegistryTableUpdateItemPdu'];  
195 - //optional RCPduType_E type = 1 [default = RCPDU_REG_TABLE_UPDATE_PDU];  
196 - //repeated RCRegistryTableItemPdu items = 2;  
197 - whiteBoardUpdateItem.type = pdu.RCPDU_REG_TABLE_UPDATE_PDU;//  
198 - whiteBoardUpdateItem.items.push(tableItemPdu);  
199 -  
200 -  
201 - let updateObjPdu = new pdu['RCRegistryUpdateObjPdu'];  
202 - updateObjPdu.objId = ApeConsts.WHITEBOARD_OBJ_TABLE_ID;  
203 - updateObjPdu.subType = whiteBoardUpdateItem.type;  
204 - updateObjPdu.userData = whiteBoardUpdateItem.toArrayBuffer();  
205 -  
206 - //同步  
207 - let adapterItemPdu = new pdu['RCAdapterItemPdu'];  
208 - adapterItemPdu.type = pdu.RCPDU_REG_UPDATE_OBJ;  
209 - adapterItemPdu.itemData = updateObjPdu.toArrayBuffer();  
210 -  
211 - let adapterPdu = new pdu['RCAdapterPdu'];  
212 - adapterPdu.type = pdu.RCPDU_REG_ADAPTER;  
213 - adapterPdu.item.push(adapterItemPdu);  
214 -  
215 - console.log("白板发送更新数据===============22");  
216 - this.sendUniform(adapterPdu,true);  
217 - }  
218 -  
219 - ///////白板数据的封包和解包/////////////////////////////////////////  
220 - packPdu(_param,_itemIdx){  
221 - /* required uint32 type= 1;//白板类型  
222 - required uint32 id= 2;//id 每一次绘制的唯一标识  
223 - required uint32 initiator=3; //绘制来自谁  
224 - optional string pointGroup=4; //坐标点集数组的JSON字符串  
225 - optional string color= 5 [default = "#000000"]; //颜色  
226 - optional uint32 thickness= 6 ;//线条粗细  
227 - optional uint32 radius= 7;//园的半径  
228 - optional uint32 fontSize= 8;//字体大小  
229 - optional uint32 fontName= 9;//字体名称  
230 - optional uint32 text= 10;//文本内容*/  
231 -  
232 - //验证坐标点集合数组是否合法  
233 - if(_param.pointGroup==null||_param.pointGroup.length<1){  
234 - this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);  
235 - return null;  
236 - }  
237 - //判断type类型,根据type设置不同的参数  
238 - let whiteBoardModelPdu =new pdu['RCWhiteBoardDataModelPdu'];  
239 - switch (_param.type){  
240 - case TYPE_BIGHT:  
241 - break;  
242 - case TYPE_LINE:  
243 - break;  
244 - case TYPE_RECT: 62 +
  63 + /////////////发送数据操作//////////////////////////////////////////////////////
  64 + // 添加标注,发送信息
  65 + sendInsetAnnotaion(_param){
  66 + if(_param==null||EngineUtils.isEmptyObject(_param)){
  67 + loger.log('sendInsetAnnotaion失败,参数错误');
  68 + this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
  69 + return ;
  70 + }
  71 +
  72 + itemIdx=EngineUtils.creatTimestamp();
  73 + let whiteBoardModelPdu = this.packPdu(_param,itemIdx);
  74 + if(whiteBoardModelPdu==null){
  75 + loger.log('sendInsetAnnotaion失败,参数错误');
  76 + this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
  77 + return ;
  78 + }
  79 + console.log(whiteBoardModelPdu);
  80 +
  81 + //储存记录,用于返回上一步操作
  82 + this.insertHistory.push(whiteBoardModelPdu);
  83 +
  84 + let tableItemPdu = new pdu['RCRegistryTableItemPdu'];
  85 + tableItemPdu.itemIdx=itemIdx;//直接用时间戳作为id
  86 + tableItemPdu.registerObjId=ApeConsts.WHITEBOARD_OBJ_TABLE_ID;
  87 + tableItemPdu.owner = 0;//收到flash的是这个值,不清楚先写固定
  88 + tableItemPdu.itemData =whiteBoardModelPdu.toArrayBuffer();
  89 +
  90 + //insert
  91 + let tableInsertItemPdu = new pdu['RCRegistryTableInsertItemPdu'];
  92 + //optional RCPduType_E type = 1 [default = RCPDU_REG_TABLE_UPDATE_PDU];
  93 + //repeated RCRegistryTableItemPdu items = 2;
  94 + tableInsertItemPdu.type = pdu.RCPDU_REG_TABLE_INSERT_PDU;//
  95 + tableInsertItemPdu.items.push(tableItemPdu);
  96 +
  97 + let updateObjPdu = new pdu['RCRegistryUpdateObjPdu'];
  98 + updateObjPdu.objId = ApeConsts.WHITEBOARD_OBJ_TABLE_ID;
  99 + updateObjPdu.subType = tableInsertItemPdu.type;
  100 + updateObjPdu.userData = tableInsertItemPdu.toArrayBuffer();
  101 +
  102 + //同步
  103 + let adapterItemPdu = new pdu['RCAdapterItemPdu'];
  104 + adapterItemPdu.type = pdu.RCPDU_REG_UPDATE_OBJ;
  105 + adapterItemPdu.itemData = updateObjPdu.toArrayBuffer();
  106 +
  107 + let adapterPdu = new pdu['RCAdapterPdu'];
  108 + adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
  109 + adapterPdu.item.push(adapterItemPdu);
  110 +
  111 + console.log("添加白板数据=====itemIdx="+tableItemPdu.itemIdx);
  112 + this.sendUniform(adapterPdu,true);
  113 + }
  114 + //撤销上一步
  115 + gotoPrev(){
  116 + loger.log("白板返回上一步");
  117 + if(this.insertHistory==null||this.insertHistory.length<1){
  118 + loger.warn("无法继续上一步操作,已经没有可以撤销的数据");
  119 + return;
  120 + }
  121 + console.log(this.insertHistory);
  122 + this.sendDeleteAnnotaion(this.insertHistory.pop());
  123 + }
  124 + //删除所有标注
  125 + sendDeleteAllAnnotation(_param){
  126 + for (let key in this.annoInfos){
  127 + //console.log("key:"+key);
  128 + console.log("删除白板数据,itemIdx:"+key);
  129 + this.sendDeleteAnnotaion({"itemIdx":key});
  130 + }
  131 + }
  132 +
  133 + //删除标注,发送信息
  134 + sendDeleteAnnotaion(_param){
  135 + if(_param==null){
  136 + loger.warn("要删除的数据不存在");
  137 + return;
  138 + }
  139 + //{"itemIdx":itemIdx}
  140 + let tableDeleteItemPdu = new pdu['RCRegistryTableDeleteItemPdu'];
  141 + //optional RCPduType_E type = 1 [default = RCPDU_REG_TABLE_DELETE_PDU];
  142 + // repeated uint32 item_idx = 2;
  143 + tableDeleteItemPdu.type = pdu.RCPDU_REG_TABLE_DELETE_PDU;//
  144 + tableDeleteItemPdu.itemIdx=parseInt(_param.itemIdx);//这里需要设置要删除的数据的itemIdx,每条数据的这个id都不一样
  145 +
  146 + let updateObjPdu = new pdu['RCRegistryUpdateObjPdu'];
  147 + updateObjPdu.objId = ApeConsts.WHITEBOARD_OBJ_TABLE_ID;
  148 + updateObjPdu.subType = tableDeleteItemPdu.type;
  149 + updateObjPdu.userData = tableDeleteItemPdu.toArrayBuffer();
  150 +
  151 + //同步
  152 + let adapterItemPdu = new pdu['RCAdapterItemPdu'];
  153 + adapterItemPdu.type = pdu.RCPDU_REG_UPDATE_OBJ;
  154 + adapterItemPdu.itemData = updateObjPdu.toArrayBuffer();
  155 +
  156 + let adapterPdu = new pdu['RCAdapterPdu'];
  157 + adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
  158 + adapterPdu.item.push(adapterItemPdu);
  159 +
  160 + console.log("白板发送删除数据============="+tableDeleteItemPdu.itemIdx);
  161 + this.sendUniform(adapterPdu,true);
  162 + }
  163 +
  164 +
  165 + //更新标注
  166 + sendUpdaterAnnotaion(_param){
  167 + if(_param==null||EngineUtils.isEmptyObject(_param)){
  168 + loger.log('sendUpdaterAnnotaion失败,参数错误');
  169 + this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
  170 + return ;
  171 + }
  172 + itemIdx=_param.itemIdx;
  173 + let whiteBoardModelPdu = this.packPdu(_param,itemIdx);
  174 + //console.log(whiteBoardModelPdu);
  175 +
  176 + if(whiteBoardModelPdu==null){
  177 + loger.log('sendInsetAnnotaion失败,参数错误');
  178 + this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
  179 + return ;
  180 + }
  181 +
  182 + let tableItemPdu = new pdu['RCRegistryTableItemPdu'];
  183 + tableItemPdu.itemIdx=itemIdx;
  184 + tableItemPdu.owner = 0;//收到flash的是这个值,不清楚先写固定
  185 + tableItemPdu.registerObjId=ApeConsts.WHITEBOARD_OBJ_TABLE_ID;
  186 + tableItemPdu.itemData =whiteBoardModelPdu.toArrayBuffer();
  187 +
  188 +
  189 + //updater
  190 + let whiteBoardUpdateItem = new pdu['RCRegistryTableUpdateItemPdu'];
  191 + //optional RCPduType_E type = 1 [default = RCPDU_REG_TABLE_UPDATE_PDU];
  192 + //repeated RCRegistryTableItemPdu items = 2;
  193 + whiteBoardUpdateItem.type = pdu.RCPDU_REG_TABLE_UPDATE_PDU;//
  194 + whiteBoardUpdateItem.items.push(tableItemPdu);
  195 +
  196 +
  197 + let updateObjPdu = new pdu['RCRegistryUpdateObjPdu'];
  198 + updateObjPdu.objId = ApeConsts.WHITEBOARD_OBJ_TABLE_ID;
  199 + updateObjPdu.subType = whiteBoardUpdateItem.type;
  200 + updateObjPdu.userData = whiteBoardUpdateItem.toArrayBuffer();
  201 +
  202 + //同步
  203 + let adapterItemPdu = new pdu['RCAdapterItemPdu'];
  204 + adapterItemPdu.type = pdu.RCPDU_REG_UPDATE_OBJ;
  205 + adapterItemPdu.itemData = updateObjPdu.toArrayBuffer();
  206 +
  207 + let adapterPdu = new pdu['RCAdapterPdu'];
  208 + adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
  209 + adapterPdu.item.push(adapterItemPdu);
  210 +
  211 + console.log("白板发送更新数据===============22");
  212 + this.sendUniform(adapterPdu,true);
  213 + }
  214 +
  215 + /////收到消息处理/////////////////////////////////////////////////////////////////////////////////
  216 + /* whiteboardMsgComingHandler(_data) {
  217 + //flash RCConferenceSendDataRequestPdu
  218 + //loger.warn('whiteboardMsgComingHandler needs to be handled.');
  219 + //const recordInfo = pdu['RCWhiteboardDataRequestPdu'].decode(pdu);
  220 + //loger.log("whiteboardMsgComingHandler",recordInfo);
  221 +
  222 + let receiveInfo = pdu['RCConferenceSendDataRequestPdu'].decode(_data);
  223 + loger.log("whiteboardMsgComingHandler",receiveInfo);
  224 + }*/
  225 +
  226 + tableInsertHandler(owner, itemIdx,itemData) {
  227 + let whiteBoardModel=this.unPackPdu(owner, itemIdx,itemData);
  228 + loger.log('tableInsertHandler',whiteBoardModel);
  229 + if(whiteBoardModel){
  230 + if(GlobalConfig.activeDocId==whiteBoardModel.parentId&&GlobalConfig.activeDocCurPage==whiteBoardModel.curPageNo){
  231 + loger.log('WHITEBOARD_ANNOTAION_INSERT 显示到界面上',whiteBoardModel);
  232 + //this._emit(MessageTypes.WHITEBOARD_ANNOTAION_INSERT,whiteBoardModel);
  233 + this.insertAandShowAnnotaion(whiteBoardModel);
  234 + }
  235 + }
  236 + }
  237 + tableUpdateHandler(owner, itemIdx, itemData) {
  238 + let whiteBoardModel=this.unPackPdu(owner, itemIdx,itemData);
  239 + loger.log('tableUpdateHandler',whiteBoardModel);
  240 + this.updateAandShowAnnotaion();
  241 + }
  242 + tableDeleteHandler(object_id, tableDeleteData){
  243 + // console.log("白板收到数据,tableDeleteHandler object_id="+object_id);//((18<< 16) + 1)=1179649
  244 + loger.log('tableDeleteHandler',object_id,tableDeleteData);//["tableDeleteHandler",1179649,{"type":231,"itemIdx":[1486301768]}]
  245 + if(tableDeleteData&&tableDeleteData.itemIdx){
  246 + let len=tableDeleteData.itemIdx.length;
  247 + let itemIdxs=tableDeleteData.itemIdx;
  248 + for (let i=0;i<len;i++){
  249 + if(this.annoInfos[itemIdxs[i]]){
  250 + loger.log("删除白板数据:",itemIdxs[i]);
  251 + //this._emit(MessageTypes.WHITEBOARD_ANNOTAION_DELETE,{ "itemIdx":itemIdxs[i]});
  252 + delete this.annoInfos[itemIdxs[i]];
  253 + }
  254 + }
  255 + }
  256 + this.updateAandShowAnnotaion();
  257 + }
  258 + //文档更新,白板也要更新
  259 + docUpdateHandler(_data){
  260 + loger.log("白板收到文档更新的消息docUpdateHandler",_data);
  261 + this.updateAandShowAnnotaion();
  262 + }
  263 + //删除白板数据
  264 + docDeleteHandler(_parentId){
  265 + loger.log("白板收到文档删除的消息docDeleteHandler",_parentId);
  266 + for (let key in this.annoInfos){
  267 + let item=this.annoInfos[key];
  268 + if(item&&item.parentId==_parentId){
  269 + loger.log("文档删除,白板数据也删除,itemIdx:"+key,"_parentId:",_parentId);
  270 + this.sendDeleteAnnotaion({"itemIdx":key});
  271 + }
  272 + }
  273 + }
  274 + //增量添加标注
  275 + insertAandShowAnnotaion(_item){
  276 + let annotaionItems=[_item];
  277 + var updateObj={
  278 + "isFresh":false,
  279 + "annotaionItems":annotaionItems
  280 + }
  281 + this._emit(MessageTypes.WHITEBOARD_ANNOTATION_UPDATE,updateObj);
  282 + }
  283 + //整体更新并且显示标注
  284 + updateAandShowAnnotaion(){
  285 + let annotaionItems=[];
  286 + for (let key in this.annoInfos){
  287 + let item=this.annoInfos[key];
  288 + if(item&&item.parentId==GlobalConfig.activeDocId&&item.curPageNo==GlobalConfig.activeDocCurPage){
  289 + annotaionItems.push(item);
  290 + loger.log("显示和文档对应的白板数据docUpdateHandler",item);
  291 + }else{
  292 + loger.log("不显示白板数据docUpdateHandler",item);
  293 + }
  294 + }
  295 + var updateObj={
  296 + "isFresh":true,
  297 + "annotaionItems":annotaionItems
  298 + }
  299 + this._emit(MessageTypes.WHITEBOARD_ANNOTATION_UPDATE,updateObj);
  300 + }
  301 +
  302 + ///////白板数据的封包和解包/////////////////////////////////////////
  303 + packPdu(_param,_itemIdx){
  304 + /* required uint32 type= 1;//白板类型
  305 + required uint32 id= 2;//id 每一次绘制的唯一标识
  306 + required uint32 initiator=3; //绘制来自谁
  307 + optional string pointGroup=4; //坐标点集数组的JSON字符串
  308 + optional string color= 5 [default = "#000000"]; //颜色
  309 + optional uint32 thickness= 6 ;//线条粗细
  310 + optional uint32 radius= 7;//园的半径
  311 + optional uint32 fontSize= 8;//字体大小
  312 + optional uint32 fontName= 9;//字体名称
  313 + optional uint32 text= 10;//文本内容*/
  314 +
  315 + //验证坐标点集合数组是否合法
  316 + if(_param.pointGroup==null||_param.pointGroup.length<1){
  317 + this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
  318 + return null;
  319 + }
  320 + //判断type类型,根据type设置不同的参数
  321 + let whiteBoardModelPdu =new pdu['RCWhiteBoardDataModelPdu'];
  322 + switch (_param.type){
  323 + case TYPE_BIGHT:
245 break; 324 break;
246 - case TYPE_CIRCLE:  
247 - whiteBoardModelPdu.radius=parseInt(_param.radius); 325 + case TYPE_LINE:
248 break; 326 break;
249 - case TYPE_TEXT:  
250 - whiteBoardModelPdu.fontSize=parseInt(_param.fontSize);  
251 - whiteBoardModelPdu.fontName=_param.fontName||null;  
252 - whiteBoardModelPdu.text=_param.text||null; 327 + case TYPE_RECT:
253 break; 328 break;
254 - default:  
255 - //其它类型不做处理  
256 - return null;  
257 - break;  
258 - }  
259 - //下面4个是必须的参数  
260 - whiteBoardModelPdu.type =_param.type;  
261 - whiteBoardModelPdu.itemIdx =_itemIdx;  
262 - whiteBoardModelPdu.initiator =GlobalConfig.nodeId;  
263 -  
264 - /* whiteBoardModelPdu.parentId=_param.parentId||0;  
265 - whiteBoardModelPdu.curPage=_param.curPage||1;*/  
266 -  
267 - whiteBoardModelPdu.parentId=GlobalConfig.activeDocId;//当前激活的文档id  
268 - whiteBoardModelPdu.curPageNo=GlobalConfig.activeDocCurPage;//当前激活的文档页码  
269 -  
270 - whiteBoardModelPdu.pointGroup =EngineUtils.arrayToJsonString(_param.pointGroup);  
271 - whiteBoardModelPdu.color=_param.color||"#000000";  
272 -  
273 - return whiteBoardModelPdu;  
274 - }  
275 - unPackPdu(owner, itemIdx,itemData){  
276 - try{  
277 - console.log("白板收到数据===unPackPdu ");  
278 - let whiteBoardModelPdu= pdu['RCWhiteBoardDataModelPdu'].decode(itemData);  
279 - //console.log(whiteBoardModelPdu);  
280 - //loger.log(whiteBoardModelPdu);  
281 - let _pointGroup= EngineUtils.arrayFromJsonString(whiteBoardModelPdu.pointGroup);  
282 - whiteBoardModelPdu.pointGroup=_pointGroup;  
283 - this.annoInfos[itemIdx] = whiteBoardModelPdu;  
284 - return whiteBoardModelPdu;  
285 - }catch (err){  
286 - console.log("unPackPdu Pdu解析错误,itemIdx="+itemIdx+" err:"+err.message);  
287 - }  
288 - return null;  
289 - }  
290 -  
291 - /////收到消息处理/////////////////////////////////////////////////////////////////////////////////  
292 -/* whiteboardMsgComingHandler(_data) {  
293 - //flash RCConferenceSendDataRequestPdu  
294 - //loger.warn('whiteboardMsgComingHandler needs to be handled.');  
295 - //const recordInfo = pdu['RCWhiteboardDataRequestPdu'].decode(pdu);  
296 - //loger.log("whiteboardMsgComingHandler",recordInfo);  
297 -  
298 - let receiveInfo = pdu['RCConferenceSendDataRequestPdu'].decode(_data);  
299 - loger.log("whiteboardMsgComingHandler",receiveInfo);  
300 - }*/  
301 -  
302 - tableInsertHandler(owner, itemIdx,itemData) {  
303 - /* try{  
304 - console.log("白板收到数据===tableInsertHandler ");  
305 - let whiteBoardModelPdu= pdu['RCWhiteBoardDataModel'].decode(itemData);  
306 - this.annoInfos[itemIdx] = itemData;  
307 - console.log(whiteBoardModelPdu);  
308 - }catch (err){  
309 - console.log("tableInsertHandler Pdu解析错误,itemIdx="+itemIdx+" err:"+err.message);  
310 - }*/  
311 - let whiteBoardModel=this.unPackPdu(owner, itemIdx,itemData);  
312 - loger.log('tableInsertHandler',whiteBoardModel);  
313 - if(whiteBoardModel){  
314 - if(GlobalConfig.activeDocId==whiteBoardModel.parentId&&GlobalConfig.activeDocCurPage==whiteBoardModel.curPageNo){  
315 - loger.log('WHITEBOARD_ANNOTAION_INSERT 显示到界面上',whiteBoardModel);  
316 - this._emit(MessageTypes.WHITEBOARD_ANNOTAION_INSERT,whiteBoardModel);  
317 - }  
318 - }  
319 - }  
320 -  
321 - tableUpdateHandler(owner, itemIdx, itemData) {  
322 - let whiteBoardModel=this.unPackPdu(owner, itemIdx,itemData);  
323 - loger.log('tableUpdateHandler',whiteBoardModel);  
324 - if(whiteBoardModel){  
325 - if(GlobalConfig.activeDocId==whiteBoardModel.parentId&&GlobalConfig.activeDocCurPage==whiteBoardModel.curPageNo){  
326 - loger.log('WHITEBOARD_ANNOTATION_UPDATE 显示到界面上',whiteBoardModel);  
327 - this._emit(MessageTypes.WHITEBOARD_ANNOTATION_UPDATE,whiteBoardModel);  
328 - }  
329 - }  
330 -  
331 - /* try{  
332 - console.log("白板收到数据===tableUpdateHandler ");  
333 - let whiteBoardModelPdu= pdu['RCWhiteBoardDataModel'].decode(itemData);  
334 - this.annoInfos[itemIdx] = itemData;  
335 - console.log(whiteBoardModelPdu);  
336 - loger.log(whiteBoardModelPdu)  
337 - }catch (err){  
338 - console.log("tableUpdateHandler Pdu解析错误,itemIdx="+itemIdx+" err:"+err.message);  
339 - }*/  
340 -  
341 - /*const recordInfo = pdu['RCWhiteboardDataRequestPdu'].decode(recordData);  
342 - console.log("recordInfo");  
343 - loger.log(recordInfo);  
344 -  
345 - // 目前只处理 文档标注  
346 - if (recordInfo.type == ApeConsts.WBA_DOC_ANNOTATION) {  
347 - const uncompressedBytes = new Zlib.Inflate(recordInfo.action.compact().view).decompress();  
348 - const annoInfo = {  
349 - id: recordId,  
350 - svg: UTF8.getStringFromBytes(uncompressedBytes)  
351 - };  
352 - loger.log(annoInfo);  
353 - this.annoInfos[recordId] = annoInfo;  
354 - this._emit(MessageTypes.WHITEBOARD_ANNOTATION_UPDATE, annoInfo);  
355 - } else {  
356 - loger.log('白板动作忽略,类型:', ApeConsts(recordInfo.type));  
357 - }*/  
358 -  
359 - }  
360 - tableDeleteHandler(object_id, tableDeleteData){  
361 - // console.log("白板收到数据,tableDeleteHandler object_id="+object_id);//((18<< 16) + 1)=1179649  
362 - loger.log('tableDeleteHandler',object_id,tableDeleteData);//["tableDeleteHandler",1179649,{"type":231,"itemIdx":[1486301768]}]  
363 - if(tableDeleteData&&tableDeleteData.itemIdx){  
364 - let len=tableDeleteData.itemIdx.length;  
365 - let itemIdxs=tableDeleteData.itemIdx;  
366 - for (let i=0;i<len;i++){  
367 - if(this.annoInfos[itemIdxs[i]]){  
368 - loger.log("删除白板数据:",itemIdxs[i],"当前剩余的白板数据");  
369 - console.log(this.annoInfos); this._emit(MessageTypes.WHITEBOARD_ANNOTAION_DELETE,{ "itemIdx":itemIdxs[i]});  
370 - this._emit(MessageTypes.WHITEBOARD_ANNOTAION_DELETE,{ "itemIdx":itemIdxs[i]});  
371 - delete this.annoInfos[itemIdxs[i]];  
372 - }  
373 - }  
374 - }  
375 - }  
376 - //文档更新,白板也要更新  
377 - docUpdateHandler(_data){  
378 - loger.log("白板收到文档更新的消息docUpdateHandler",_data);  
379 - for (let key in this.annoInfos){  
380 - let item=this.annoInfos[key];  
381 - if(item&&item.parentId==GlobalConfig.activeDocId&&item.curPageNo==GlobalConfig.activeDocCurPage){  
382 - loger.log("显示和文档对应的白板数据docUpdateHandler",item);  
383 - }else{  
384 - loger.log("不显示白板数据docUpdateHandler",item);  
385 - }  
386 - }  
387 -  
388 - /* let docItem=_data;  
389 - for (let key in this.annoInfos){  
390 - let item=this.annoInfos[key];  
391 - if(item&&docItem.visible==true&&item.parentId==docItem.itemIdx&&item.curPageNo==docItem.curPageNo){  
392 - loger.log("显示和文档对应的白板数据docUpdateHandler",item);  
393 - }else{  
394 - loger.log("不显示白板数据docUpdateHandler",item);  
395 - }  
396 - }*/  
397 - }  
398 - //删除白板数据  
399 - docDeleteHandler(_parentId){  
400 - loger.log("白板收到文档删除的消息docDeleteHandler",_parentId);  
401 - for (let key in this.annoInfos){  
402 - let item=this.annoInfos[key];  
403 - if(item&&item.parentId==_parentId){  
404 - loger.log("文档删除,白板数据也删除,itemIdx:"+key,"_parentId:",_parentId);  
405 - this.sendDeleteAnnotaion({"itemIdx":key});  
406 - }  
407 - }  
408 - } 329 + case TYPE_CIRCLE:
  330 + whiteBoardModelPdu.radius=parseInt(_param.radius);
  331 + break;
  332 + case TYPE_TEXT:
  333 + whiteBoardModelPdu.fontSize=parseInt(_param.fontSize);
  334 + whiteBoardModelPdu.fontName=_param.fontName||null;
  335 + whiteBoardModelPdu.text=_param.text||null;
  336 + break;
  337 + default:
  338 + //其它类型不做处理
  339 + return null;
  340 + break;
  341 + }
  342 + //下面4个是必须的参数
  343 + whiteBoardModelPdu.type =_param.type;
  344 + whiteBoardModelPdu.itemIdx =_itemIdx;
  345 + whiteBoardModelPdu.initiator =GlobalConfig.nodeId;
  346 +
  347 + /* whiteBoardModelPdu.parentId=_param.parentId||0;
  348 + whiteBoardModelPdu.curPage=_param.curPage||1;*/
  349 +
  350 + whiteBoardModelPdu.parentId=GlobalConfig.activeDocId;//当前激活的文档id
  351 + whiteBoardModelPdu.curPageNo=GlobalConfig.activeDocCurPage;//当前激活的文档页码
  352 +
  353 + whiteBoardModelPdu.pointGroup =EngineUtils.arrayToJsonString(_param.pointGroup);
  354 + whiteBoardModelPdu.color=_param.color||"#000000";
  355 +
  356 + return whiteBoardModelPdu;
  357 + }
  358 + unPackPdu(owner, itemIdx,itemData){
  359 + try{
  360 + console.log("白板收到数据===unPackPdu ");
  361 + let whiteBoardModelPdu= pdu['RCWhiteBoardDataModelPdu'].decode(itemData);
  362 + //console.log(whiteBoardModelPdu);
  363 + //loger.log(whiteBoardModelPdu);
  364 + let _pointGroup= EngineUtils.arrayFromJsonString(whiteBoardModelPdu.pointGroup);
  365 + whiteBoardModelPdu.pointGroup=_pointGroup;
  366 + this.annoInfos[itemIdx] = whiteBoardModelPdu;
  367 + return whiteBoardModelPdu;
  368 + }catch (err){
  369 + console.log("unPackPdu Pdu解析错误,itemIdx="+itemIdx+" err:"+err.message);
  370 + }
  371 + return null;
  372 + }
  373 +
409 } 374 }
410 375
411 export default WhiteBoardApe; 376 export default WhiteBoardApe;