李勇

1.修改白板标注模块的删除逻辑,批量删除;2.全局替换http为https的逻辑

@@ -58,9 +58,17 @@ export default class MessageEntrance extends Emiter { @@ -58,9 +58,17 @@ export default class MessageEntrance extends Emiter {
58 constructor() { 58 constructor() {
59 super(); 59 super();
60 //sdk 信息 60 //sdk 信息
61 - GlobalConfig.sdkVersion = "v1.67.2.20170811"; 61 + GlobalConfig.sdkVersion = "v1.68.2.20170812";
62 loger.warn("sdkVersion:" + GlobalConfig.sdkVersion); 62 loger.warn("sdkVersion:" + GlobalConfig.sdkVersion);
63 63
  64 + //设置
  65 + let locationProtocol= location.protocol;
  66 + if(locationProtocol!="https:"){
  67 + GlobalConfig.locationProtocol="http://";
  68 + }else {
  69 + GlobalConfig.locationProtocol="https://";
  70 + }
  71 + loger.warn("protocol:" + GlobalConfig.locationProtocol);
64 //获取设备和系统信息 72 //获取设备和系统信息
65 SystemConfig.getSystemInfo(); 73 SystemConfig.getSystemInfo();
66 74
@@ -517,7 +517,7 @@ GlobalConfig.classDetail = {}; //Sass直接返回的当前课堂基本信息 @@ -517,7 +517,7 @@ GlobalConfig.classDetail = {}; //Sass直接返回的当前课堂基本信息
517 517
518 518
519 GlobalConfig.isRecordPlayBack = false; //是否是录制回放,默认是否 519 GlobalConfig.isRecordPlayBack = false; //是否是录制回放,默认是否
520 -GlobalConfig.allowRecordMaxTime = 14400; //(秒)允许录制的最长时间,默认是4小时 520 +GlobalConfig.allowRecordMaxTime = 24*60*60; //(秒)允许录制的最长时间
521 521
522 GlobalConfig.siteId_letv = 'shchuanbao'; //乐视,MS不需要动态选点的站点 522 GlobalConfig.siteId_letv = 'shchuanbao'; //乐视,MS不需要动态选点的站点
523 GlobalConfig.ssTunnelAppURL = ''; //屏幕共享插件的地址 523 GlobalConfig.ssTunnelAppURL = ''; //屏幕共享插件的地址
@@ -533,5 +533,7 @@ GlobalConfig.platform="pc";//平台 IOS/ANDROID/PC @@ -533,5 +533,7 @@ GlobalConfig.platform="pc";//平台 IOS/ANDROID/PC
533 GlobalConfig.explorer="未知";//浏览器 533 GlobalConfig.explorer="未知";//浏览器
534 GlobalConfig.explorerVersion="未知";//浏览器版本 534 GlobalConfig.explorerVersion="未知";//浏览器版本
535 GlobalConfig.os="未知";//系统 535 GlobalConfig.os="未知";//系统
  536 +
  537 +GlobalConfig.locationProtocol="http://";//https;或http:
536 export default GlobalConfig; 538 export default GlobalConfig;
537 539
@@ -9,7 +9,7 @@ import MD5 from "md5"; @@ -9,7 +9,7 @@ import MD5 from "md5";
9 import iphunter from 'iphunter'; 9 import iphunter from 'iphunter';
10 import fetchJsonp from 'fetch-jsonp'; 10 import fetchJsonp from 'fetch-jsonp';
11 import ServerConfig from "config/ServerConfig"; 11 import ServerConfig from "config/ServerConfig";
12 - 12 +import GlobalConfig from "GlobalConfig";
13 // 日志对象 13 // 日志对象
14 const loger = Loger.getLoger('IpManager'); 14 const loger = Loger.getLoger('IpManager');
15 15
@@ -80,7 +80,8 @@ class IpManager extends Emiter { @@ -80,7 +80,8 @@ class IpManager extends Emiter {
80 // //("addr=" + ip + "&token=b657c3507b324353e09c1958ee956a98efceb3e3"),转成MD5 80 // //("addr=" + ip + "&token=b657c3507b324353e09c1958ee956a98efceb3e3"),转成MD5
81 let md5Str = MD5("addr=" + userIp + "&token=b657c3507b324353e09c1958ee956a98efceb3e3"); 81 let md5Str = MD5("addr=" + userIp + "&token=b657c3507b324353e09c1958ee956a98efceb3e3");
82 let timestamp = new Date().getTime(); 82 let timestamp = new Date().getTime();
83 - let url = `http://ipapi.ipip.net/find?addr=${userIp}&sid=14&uid=5237&sig=${md5Str}&_=${timestamp}`; 83 + //let url = `http://ipapi.ipip.net/find?addr=${userIp}&sid=14&uid=5237&sig=${md5Str}&_=${timestamp}`;
  84 + let url = `${GlobalConfig.locationProtocol}ipapi.ipip.net/find?addr=${userIp}&sid=14&uid=5237&sig=${md5Str}&_=${timestamp}`;
84 loger.log("获取IP信息->", url); 85 loger.log("获取IP信息->", url);
85 let _this = this; 86 let _this = this;
86 fetchJsonp(url, { 87 fetchJsonp(url, {
@@ -246,7 +246,8 @@ class RecordPlayBackParse extends Emiter { @@ -246,7 +246,8 @@ class RecordPlayBackParse extends Emiter {
246 this.initReplay(); 246 this.initReplay();
247 loger.log("读取回放数据"); 247 loger.log("读取回放数据");
248 //let url = `http://123.56.73.119:80/h5dev/20170306/1357644520_20170306.rec`; 248 //let url = `http://123.56.73.119:80/h5dev/20170306/1357644520_20170306.rec`;
249 - let url = `http://${ GlobalConfig.RecordServerIP}:${ GlobalConfig.RecordServerPort}/${GlobalConfig.recordFileName}`; 249 + //let url = `http://${ GlobalConfig.RecordServerIP}:${ GlobalConfig.RecordServerPort}/${GlobalConfig.recordFileName}`;
  250 + let url = `${GlobalConfig.locationProtocol+ GlobalConfig.RecordServerIP}:${ GlobalConfig.RecordServerPort}/${GlobalConfig.recordFileName}`;
250 loger.log(url); 251 loger.log(url);
251 fetch(url, { 252 fetch(url, {
252 timeout: 180000 //加载文件超时时间3分 253 timeout: 180000 //加载文件超时时间3分
@@ -38,7 +38,8 @@ class Sass extends Emiter { @@ -38,7 +38,8 @@ class Sass extends Emiter {
38 msType int 媒体服务器类型 38 msType int 媒体服务器类型
39 classType 课堂类型 39 classType 课堂类型
40 */ 40 */
41 - let url = `http://${_initInfo.portal}/3m/api/meeting/joinParams.do?meetingNumber=${_initInfo.classId}&userID=${_initInfo.userId}`; 41 + //let url = `http://${_initInfo.portal}/3m/api/meeting/joinParams.do?meetingNumber=${_initInfo.classId}&userID=${_initInfo.userId}`;
  42 + let url = `${GlobalConfig.locationProtocol+_initInfo.portal}/3m/api/meeting/joinParams.do?meetingNumber=${_initInfo.classId}&userID=${_initInfo.userId}`;
42 loger.log('1.初始化init获取课堂校验信息.'); 43 loger.log('1.初始化init获取课堂校验信息.');
43 loger.log(url); 44 loger.log(url);
44 loger.log(_initInfo); 45 loger.log(_initInfo);
@@ -117,7 +118,9 @@ class Sass extends Emiter { @@ -117,7 +118,9 @@ class Sass extends Emiter {
117 isTeacher = 1 118 isTeacher = 1
118 } 119 }
119 120
120 - let url = `http://${confInfo.portal}/3m/api/meeting/signIn.do?siteId=${confInfo.siteId}&classId=${confInfo.classId}&isTeacher=${isTeacher}&password=${confInfo.password}`; 121 + //let url = `http://${confInfo.portal}/3m/api/meeting/signIn.do?siteId=${confInfo.siteId}&classId=${confInfo.classId}&isTeacher=${isTeacher}&password=${confInfo.password}`;
  122 + let url = `${GlobalConfig.locationProtocol+confInfo.portal}/3m/api/meeting/signIn.do?siteId=${confInfo.siteId}&classId=${confInfo.classId}&isTeacher=${isTeacher}&password=${confInfo.password}`;
  123 +
121 loger.log('3.课堂密码校验', url); 124 loger.log('3.课堂密码校验', url);
122 fetch(url, { 125 fetch(url, {
123 timeout: 5000 126 timeout: 5000
@@ -154,7 +157,9 @@ class Sass extends Emiter { @@ -154,7 +157,9 @@ class Sass extends Emiter {
154 157
155 //MD5校验----------------------------------------------------------------------------------------- 158 //MD5校验-----------------------------------------------------------------------------------------
156 sendMD5Checking() { 159 sendMD5Checking() {
157 - let url = `http://${confInfo.portal}/3m/meeting/md5CheckMeeting.do?siteId=${confInfo.siteId}&meetingNumber=${confInfo.classId}&userId=${confInfo.userId}&userName=${confInfo.userName}&userType=${confInfo.userType}&nopassword=${confInfo.passwordRequired}&md5=${confInfo.md5}`; 160 + // let url = `http://${confInfo.portal}/3m/meeting/md5CheckMeeting.do?siteId=${confInfo.siteId}&meetingNumber=${confInfo.classId}&userId=${confInfo.userId}&userName=${confInfo.userName}&userType=${confInfo.userType}&nopassword=${confInfo.passwordRequired}&md5=${confInfo.md5}`;
  161 + let url = `${GlobalConfig.locationProtocol+confInfo.portal}/3m/meeting/md5CheckMeeting.do?siteId=${confInfo.siteId}&meetingNumber=${confInfo.classId}&userId=${confInfo.userId}&userName=${confInfo.userName}&userType=${confInfo.userType}&nopassword=${confInfo.passwordRequired}&md5=${confInfo.md5}`;
  162 +
158 loger.log('4.MD5校验', url); 163 loger.log('4.MD5校验', url);
159 fetch(url, { 164 fetch(url, {
160 timeout: 5000 165 timeout: 5000
@@ -187,7 +192,9 @@ class Sass extends Emiter { @@ -187,7 +192,9 @@ class Sass extends Emiter {
187 192
188 // 获取课堂基本详情------------------------------------------------------------------------------------ 193 // 获取课堂基本详情------------------------------------------------------------------------------------
189 getClassDetail() { 194 getClassDetail() {
190 - let url = `http://${GlobalConfig.portal}/3m/meeting/getClassH5.do?classNumber=${GlobalConfig.classId}`; 195 + // let url = `http://${GlobalConfig.portal}/3m/meeting/getClassH5.do?classNumber=${GlobalConfig.classId}`;
  196 + let url = `${GlobalConfig.locationProtocol+GlobalConfig.portal}/3m/meeting/getClassH5.do?classNumber=${GlobalConfig.classId}`;
  197 +
191 loger.log('获取Class详情.', url); 198 loger.log('获取Class详情.', url);
192 fetch(url, { 199 fetch(url, {
193 timeout: 5000 200 timeout: 5000
@@ -236,7 +243,9 @@ class Sass extends Emiter { @@ -236,7 +243,9 @@ class Sass extends Emiter {
236 */ 243 */
237 var timestamp = new Date().getTime(); 244 var timestamp = new Date().getTime();
238 var authId = MD5(GlobalConfig.classId + "" + timestamp); //课堂号+时间戳 的字符串,转成MD5 245 var authId = MD5(GlobalConfig.classId + "" + timestamp); //课堂号+时间戳 的字符串,转成MD5
239 - let url = `http://${GlobalConfig.portal}/3m/api/meeting/detail.do?meetingNumber=${GlobalConfig.classId}&timestamp=${timestamp}&authId=${authId}`; 246 + //let url = `http://${GlobalConfig.portal}/3m/api/meeting/detail.do?meetingNumber=${GlobalConfig.classId}&timestamp=${timestamp}&authId=${authId}`;
  247 + let url = `${GlobalConfig.locationProtocol+GlobalConfig.portal}/3m/api/meeting/detail.do?meetingNumber=${GlobalConfig.classId}&timestamp=${timestamp}&authId=${authId}`;
  248 +
240 loger.log('5.获取课堂课堂的完整信息 '); 249 loger.log('5.获取课堂课堂的完整信息 ');
241 loger.log(url); 250 loger.log(url);
242 fetch(url, { 251 fetch(url, {
@@ -286,8 +295,10 @@ class Sass extends Emiter { @@ -286,8 +295,10 @@ class Sass extends Emiter {
286 } 295 }
287 var timestamp = new Date().getTime(); 296 var timestamp = new Date().getTime();
288 var authId = MD5(_param.docId + "" + _param.classId + "" + timestamp); // docId+classId+timestamp的字符串,转成MD5 297 var authId = MD5(_param.docId + "" + _param.classId + "" + timestamp); // docId+classId+timestamp的字符串,转成MD5
289 - let url = `http://${GlobalConfig.portal}/3m/api/document/deleteRelation.do?docId=${_param.docId}&classId=${GlobalConfig.classId}&timestamp=${timestamp}&authId=${authId}`;  
290 - loger.log('sassDeleteDocument', url); 298 + //let url = `http://${GlobalConfig.portal}/3m/api/document/deleteRelation.do?docId=${_param.docId}&classId=${GlobalConfig.classId}&timestamp=${timestamp}&authId=${authId}`;
  299 + let url = `${GlobalConfig.locationProtocol+GlobalConfig.portal}/3m/api/document/deleteRelation.do?docId=${_param.docId}&classId=${GlobalConfig.classId}&timestamp=${timestamp}&authId=${authId}`;
  300 +
  301 + loger.log('删除文档', url);
291 302
292 fetch(url, { 303 fetch(url, {
293 timeout: 5000 304 timeout: 5000
@@ -326,7 +337,9 @@ class Sass extends Emiter { @@ -326,7 +337,9 @@ class Sass extends Emiter {
326 console.warn('删除Music共享实现...'); 337 console.warn('删除Music共享实现...');
327 var timestamp = new Date().getTime(); 338 var timestamp = new Date().getTime();
328 var authId = MD5(_param.fileId + "" + _param.classId + "" + timestamp); // docId+classId+timestamp的字符串,转成MD5 339 var authId = MD5(_param.fileId + "" + _param.classId + "" + timestamp); // docId+classId+timestamp的字符串,转成MD5
329 - let url = `http://${GlobalConfig.portal}/3m/api/media/deleteRelation.do?mediaId=${_param.fileId}&classId=${GlobalConfig.classId}&timestamp=${timestamp}&authId=${authId}`; 340 + //let url = `http://${GlobalConfig.portal}/3m/api/media/deleteRelation.do?mediaId=${_param.fileId}&classId=${GlobalConfig.classId}&timestamp=${timestamp}&authId=${authId}`;
  341 + let url = `${GlobalConfig.locationProtocol+GlobalConfig.portal}/3m/api/media/deleteRelation.do?mediaId=${_param.fileId}&classId=${GlobalConfig.classId}&timestamp=${timestamp}&authId=${authId}`;
  342 +
330 loger.log('删除媒体共享文件', url); 343 loger.log('删除媒体共享文件', url);
331 344
332 fetch(url, { 345 fetch(url, {
@@ -366,7 +379,9 @@ class Sass extends Emiter { @@ -366,7 +379,9 @@ class Sass extends Emiter {
366 } 379 }
367 var timestamp = new Date().getTime(); 380 var timestamp = new Date().getTime();
368 var authId = MD5(_param.fileId + "" + _param.classId + "" + timestamp); // docId+classId+timestamp的字符串,转成MD5 381 var authId = MD5(_param.fileId + "" + _param.classId + "" + timestamp); // docId+classId+timestamp的字符串,转成MD5
369 - let url = `http://${GlobalConfig.portal}/3m/api/sharedMedia/deleteRelation.do?fileId=${_param.fileId}&classId=${GlobalConfig.classId}&timestamp=${timestamp}&authId=${authId}`; 382 + //let url = `http://${GlobalConfig.portal}/3m/api/sharedMedia/deleteRelation.do?fileId=${_param.fileId}&classId=${GlobalConfig.classId}&timestamp=${timestamp}&authId=${authId}`;
  383 + let url = `${GlobalConfig.locationProtocol+GlobalConfig.portal}/3m/api/sharedMedia/deleteRelation.do?fileId=${_param.fileId}&classId=${GlobalConfig.classId}&timestamp=${timestamp}&authId=${authId}`;
  384 +
370 loger.log('删除媒体共享文件', url); 385 loger.log('删除媒体共享文件', url);
371 386
372 fetch(url, { 387 fetch(url, {
@@ -419,7 +434,9 @@ class Sass extends Emiter { @@ -419,7 +434,9 @@ class Sass extends Emiter {
419 var timestamp = new Date().getTime(); 434 var timestamp = new Date().getTime();
420 var authId = MD5(GlobalConfig.classId + "" + timestamp); // (classId+timestamp)的字符串,转成MD5 435 var authId = MD5(GlobalConfig.classId + "" + timestamp); // (classId+timestamp)的字符串,转成MD5
421 let classStatusInfo = JSON.stringify(_param.classStatusInfo); 436 let classStatusInfo = JSON.stringify(_param.classStatusInfo);
422 - let url = `http://${GlobalConfig.portal}/3m/api/meeting/saveInfo.do`; 437 + //let url = `http://${GlobalConfig.portal}/3m/api/meeting/saveInfo.do`;
  438 + let url = `${GlobalConfig.locationProtocol+GlobalConfig.portal}/3m/api/meeting/saveInfo.do`;
  439 +
423 loger.log('saveClassStatusInfo', url); 440 loger.log('saveClassStatusInfo', url);
424 fetch(url, { 441 fetch(url, {
425 method: 'POST', 442 method: 'POST',
@@ -483,7 +500,9 @@ class Sass extends Emiter { @@ -483,7 +500,9 @@ class Sass extends Emiter {
483 500
484 let timestamp = new Date().getTime(); 501 let timestamp = new Date().getTime();
485 let authId = MD5(key + siteID + meetingID + timestamp); 502 let authId = MD5(key + siteID + meetingID + timestamp);
486 - let url = `http://${GlobalConfig.portal}/3m/recordingMeeting/insertRecordingMeeting.do`; 503 + //let url = `http://${GlobalConfig.portal}/3m/recordingMeeting/insertRecordingMeeting.do`;
  504 + let url = `${GlobalConfig.locationProtocol+GlobalConfig.portal}/3m/recordingMeeting/insertRecordingMeeting.do`;
  505 +
487 loger.log('saveClassRecordContrlInfo', url); 506 loger.log('saveClassRecordContrlInfo', url);
488 507
489 fetch(encodeURI(url), { 508 fetch(encodeURI(url), {
@@ -546,7 +565,8 @@ class Sass extends Emiter { @@ -546,7 +565,8 @@ class Sass extends Emiter {
546 let correct = _param.correct.toString(); 565 let correct = _param.correct.toString();
547 let options = JSON.stringify(_param.options); 566 let options = JSON.stringify(_param.options);
548 567
549 - let url = `http://${GlobalConfig.portal}/3m/api/question/add.do`; 568 + //let url = `http://${GlobalConfig.portal}/3m/api/question/add.do`;
  569 + let url = `${GlobalConfig.locationProtocol+GlobalConfig.portal}/3m/api/question/add.do`;
550 loger.log('创建答题数据', url); 570 loger.log('创建答题数据', url);
551 571
552 fetch(encodeURI(url), { 572 fetch(encodeURI(url), {
@@ -622,7 +642,8 @@ class Sass extends Emiter { @@ -622,7 +642,8 @@ class Sass extends Emiter {
622 let userId = _param.userId; 642 let userId = _param.userId;
623 let userName = _param.userName; 643 let userName = _param.userName;
624 644
625 - let url = `http://${GlobalConfig.portal}/3m/api/question/answer.do`; 645 + // let url = `http://${GlobalConfig.portal}/3m/api/question/answer.do`;
  646 + let url = `${GlobalConfig.locationProtocol+GlobalConfig.portal}/3m/api/question/answer.do`;
626 loger.log('保存答题数据', url); 647 loger.log('保存答题数据', url);
627 648
628 fetch(encodeURI(url), { 649 fetch(encodeURI(url), {
@@ -675,8 +696,9 @@ class Sass extends Emiter { @@ -675,8 +696,9 @@ class Sass extends Emiter {
675 //questionId long 题目id 696 //questionId long 题目id
676 697
677 let questionId = parseInt(_param.questionId); //题目id 698 let questionId = parseInt(_param.questionId); //题目id
678 - let url = `http://${GlobalConfig.portal}/3m/api/question/get.do`;  
679 - loger.log('查询题目数据', url); 699 + // let url = `http://${GlobalConfig.portal}/3m/api/question/get.do`;
  700 + let url = `${GlobalConfig.locationProtocol+GlobalConfig.portal}/3m/api/question/get.do`;
  701 + loger.log('查询题目数据', url);
680 //接口中用的是GET 702 //接口中用的是GET
681 fetch(encodeURI(url), { 703 fetch(encodeURI(url), {
682 method: 'POST', 704 method: 'POST',
@@ -733,7 +755,8 @@ class Sass extends Emiter { @@ -733,7 +755,8 @@ class Sass extends Emiter {
733 //questionId long 题目id 755 //questionId long 题目id
734 756
735 let questionId = parseInt(_param.questionId); //题目id 757 let questionId = parseInt(_param.questionId); //题目id
736 - let url = `http://${GlobalConfig.portal}/3m/api/question/results.do`; 758 + //let url = `http://${GlobalConfig.portal}/3m/api/question/results.do`;
  759 + let url = `${GlobalConfig.locationProtocol+GlobalConfig.portal}/3m/api/question/results.do`;
737 loger.log('查询答题结果数据', url); 760 loger.log('查询答题结果数据', url);
738 761
739 fetch(encodeURI(url), { 762 fetch(encodeURI(url), {
@@ -46,7 +46,8 @@ class MediaModule { @@ -46,7 +46,8 @@ class MediaModule {
46 fileName = 'playlist.m3u8'; 46 fileName = 'playlist.m3u8';
47 } 47 }
48 port = (GlobalConfig.MS_PLAY_HLS_PORT == "" || GlobalConfig.MS_PLAY_HLS_PORT == null) ? "" : ":" + GlobalConfig.MS_PLAY_HLS_PORT; 48 port = (GlobalConfig.MS_PLAY_HLS_PORT == "" || GlobalConfig.MS_PLAY_HLS_PORT == null) ? "" : ":" + GlobalConfig.MS_PLAY_HLS_PORT;
49 - path = "http://" + GlobalConfig.MS_PLAY_HLS_IP 49 + //path = "http://" + GlobalConfig.MS_PLAY_HLS_IP
  50 + path =GlobalConfig.locationProtocol + GlobalConfig.MS_PLAY_HLS_IP
50 + port + "/live/" 51 + port + "/live/"
51 + _param.streamId 52 + _param.streamId
52 + ".m3u8";// 53 + ".m3u8";//
@@ -79,7 +80,8 @@ class MediaModule { @@ -79,7 +80,8 @@ class MediaModule {
79 } 80 }
80 //M3U8 http://123.56.73.119:6001/live/h5dev_2106728010_8ab3b0ed5a3a9220015a3a958f0d0003_983041_1489113860/total.m3u8 81 //M3U8 http://123.56.73.119:6001/live/h5dev_2106728010_8ab3b0ed5a3a9220015a3a958f0d0003_983041_1489113860/total.m3u8
81 let port = (GlobalConfig.RS_RECORD_PLAY_PORT == "" || GlobalConfig.RS_RECORD_PLAY_PORT == null) ? "" : ":" + GlobalConfig.RS_RECORD_PLAY_PORT; 82 let port = (GlobalConfig.RS_RECORD_PLAY_PORT == "" || GlobalConfig.RS_RECORD_PLAY_PORT == null) ? "" : ":" + GlobalConfig.RS_RECORD_PLAY_PORT;
82 - let path = "http://" + GlobalConfig.RS_RECORD_PLAY_IP 83 + //let path = "http://" + GlobalConfig.RS_RECORD_PLAY_IP
  84 + let path =GlobalConfig.locationProtocol + GlobalConfig.RS_RECORD_PLAY_IP
83 + port + "/live/" 85 + port + "/live/"
84 + _param.streamId 86 + _param.streamId
85 + "/total.m3u8"; 87 + "/total.m3u8";
@@ -33,434 +33,451 @@ const TYPE_CIRCLE = 3;//圆形 @@ -33,434 +33,451 @@ 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 - this.insertHistory = [];//添加的白板记录,用于撤回操作  
45 - // 白板延迟  
46 - //Ape Models  
47 - this.registerKey(this._session_id, this._session_name, this._session_tag, new ArrayBuffer);  
48 - this.registerObj(pdu.RCPDU_REG_REGISTER_TABLE, ApeConsts.WHITEBOARD_OBJ_TABLE_ID,  
49 - ApeConsts.WHITEBOARD_OBJ_TABLE_NAME, ApeConsts.WHITEBOARD_OBJ_TABLE_TAG, 0, new ArrayBuffer);  
50 -  
51 - // ape listeners  
52 - this.on(pdu.RCPDU_SESSION_JOIN_RESPONSE, this._joinSessionHandler.bind(this));  
53 - //this.on(pdu.RCPDU_CONFERENCE_SEND_DATA_REQUEST, this.whiteboardMsgComingHandler.bind(this));//这个是课堂消息类型,flash里在使用这里不再使用,各个模块的消息由模块自己来处理 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 + //Ape Models
  47 + this.registerKey(this._session_id, this._session_name, this._session_tag, new ArrayBuffer);
  48 + this.registerObj(pdu.RCPDU_REG_REGISTER_TABLE, ApeConsts.WHITEBOARD_OBJ_TABLE_ID,
  49 + ApeConsts.WHITEBOARD_OBJ_TABLE_NAME, ApeConsts.WHITEBOARD_OBJ_TABLE_TAG, 0, new ArrayBuffer);
  50 +
  51 + // ape listeners
  52 + this.on(pdu.RCPDU_SESSION_JOIN_RESPONSE, this._joinSessionHandler.bind(this));
  53 + //this.on(pdu.RCPDU_CONFERENCE_SEND_DATA_REQUEST, this.whiteboardMsgComingHandler.bind(this));//这个是课堂消息类型,flash里在使用这里不再使用,各个模块的消息由模块自己来处理
  54 + }
  55 +
  56 + _joinSessionHandler(_data) {
  57 + //loger.log("RCPDU_SESSION_JOIN_RESPONSE");
  58 + this.insertHistory = [];
  59 + }
  60 +
  61 + //清除当前模块的数据
  62 + clearData() {
  63 + loger.log("clearData->")
  64 + this.annoInfos = {};//储存所有的标注数据
  65 + this.insertHistory = [];//添加的白板记录,用于撤回操作
  66 + }
  67 +
  68 + //更新文档模块的录制信息,每次开启录制的时候需要把当前文档的信息更新一次
  69 + updaterRecordApeStatus(_param) {
  70 + /* if(GlobalConfig.isHost&&!GlobalConfig.isRecordPlayBack){
  71 + let curPageAnnos={};
  72 + for (let key in this.annoInfos) {
  73 + let item = this.annoInfos[key];
  74 + if (item && item.parentId == GlobalConfig.activeDocId && item.curPageNo == GlobalConfig.activeDocCurPage) {
  75 + curPageAnnos[key]=item;
  76 + }
  77 + }
  78 + if(Object.keys(curPageAnnos).length>0){
  79 + loger.log("开启录制成功->更新当前的标注数据->docId:", GlobalConfig.activeDocId, 'page:',GlobalConfig.activeDocCurPage);
  80 + this.sendUpdaterAnnotaion({"itemIdxArr":curPageAnnos});
  81 + }else {
  82 + loger.log("开启录制成功->当前没有标注数据需要更新->docId:", GlobalConfig.activeDocId, 'page:',GlobalConfig.activeDocCurPage);
  83 + }
  84 + }*/
  85 + let curPageAnnos = {};
  86 + for (let key in this.annoInfos) {
  87 + let item = this.annoInfos[key];
  88 + if (item && item.parentId == GlobalConfig.activeDocId && item.curPageNo == GlobalConfig.activeDocCurPage) {
  89 + curPageAnnos[key] = item;
  90 + }
54 } 91 }
55 -  
56 - _joinSessionHandler(_data) {  
57 - //loger.log("RCPDU_SESSION_JOIN_RESPONSE");  
58 - this.insertHistory = []; 92 + if (Object.keys(curPageAnnos).length > 0) {
  93 + loger.warn("录制状态发送改变->更新当前的标注数据->docId:", GlobalConfig.activeDocId, 'page:', GlobalConfig.activeDocCurPage);
  94 + this.sendUpdaterAnnotaion({"itemIdxArr": curPageAnnos});
  95 + } else {
  96 + loger.warn("录制状态发送改变->当前没有标注数据需要更新->docId:", GlobalConfig.activeDocId, 'page:', GlobalConfig.activeDocCurPage);
  97 + }
  98 + }
  99 +
  100 + /////////////发送数据操作//////////////////////////////////////////////////////
  101 + // 添加标注,发送信息
  102 + sendInsetAnnotaion(_param) {
  103 + if (_param == null || EngineUtils.isEmptyObject(_param)) {
  104 + loger.warn('添加标注失败->参数错误->', _param);
  105 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
  106 + return;
59 } 107 }
60 108
61 - //清除当前模块的数据  
62 - clearData(){  
63 - loger.log("clearData->")  
64 - this.annoInfos = {};//储存所有的标注数据  
65 - this.insertHistory = [];//添加的白板记录,用于撤回操作 109 + let itemIdx = EngineUtils.creatSoleNumberFromTimestamp();//创建时间戳,保证每条数据的唯一
  110 + let whiteBoardModelPdu = this.packPdu(_param, itemIdx);
  111 + if (whiteBoardModelPdu == null) {
  112 + loger.warn('添加标注失败-->参数错误->', _param);
  113 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
  114 + return;
66 } 115 }
67 - //更新文档模块的录制信息,每次开启录制的时候需要把当前文档的信息更新一次  
68 - updaterRecordApeStatus(_param){  
69 - /* if(GlobalConfig.isHost&&!GlobalConfig.isRecordPlayBack){  
70 - let curPageAnnos={};  
71 - for (let key in this.annoInfos) {  
72 - let item = this.annoInfos[key];  
73 - if (item && item.parentId == GlobalConfig.activeDocId && item.curPageNo == GlobalConfig.activeDocCurPage) {  
74 - curPageAnnos[key]=item;  
75 - }  
76 - }  
77 - if(Object.keys(curPageAnnos).length>0){  
78 - loger.log("开启录制成功->更新当前的标注数据->docId:", GlobalConfig.activeDocId, 'page:',GlobalConfig.activeDocCurPage);  
79 - this.sendUpdaterAnnotaion({"itemIdxArr":curPageAnnos});  
80 - }else {  
81 - loger.log("开启录制成功->当前没有标注数据需要更新->docId:", GlobalConfig.activeDocId, 'page:',GlobalConfig.activeDocCurPage);  
82 - }  
83 - }*/  
84 - let curPageAnnos={};  
85 - for (let key in this.annoInfos) {  
86 - let item = this.annoInfos[key];  
87 - if (item && item.parentId == GlobalConfig.activeDocId && item.curPageNo == GlobalConfig.activeDocCurPage) {  
88 - curPageAnnos[key]=item;  
89 - }  
90 - }  
91 - if(Object.keys(curPageAnnos).length>0){  
92 - loger.warn("录制状态发送改变->更新当前的标注数据->docId:", GlobalConfig.activeDocId, 'page:',GlobalConfig.activeDocCurPage);  
93 - this.sendUpdaterAnnotaion({"itemIdxArr":curPageAnnos});  
94 - }else {  
95 - loger.warn("录制状态发送改变->当前没有标注数据需要更新->docId:", GlobalConfig.activeDocId, 'page:',GlobalConfig.activeDocCurPage);  
96 - } 116 + //储存记录,用于返回上一步操作
  117 + this.insertHistory.push(whiteBoardModelPdu);
  118 +
  119 + let tableItemPdu = new pdu['RCRegistryTableItemPdu'];
  120 + tableItemPdu.itemIdx = itemIdx;//直接用时间戳作为id
  121 + tableItemPdu.registerObjId = ApeConsts.WHITEBOARD_OBJ_TABLE_ID;
  122 + tableItemPdu.owner = 0;//收到flash的是这个值,不清楚先写固定
  123 + tableItemPdu.itemData = whiteBoardModelPdu.toArrayBuffer();
  124 +
  125 + //insert
  126 + let tableInsertItemPdu = new pdu['RCRegistryTableInsertItemPdu'];
  127 + tableInsertItemPdu.type = pdu.RCPDU_REG_TABLE_INSERT_PDU;//
  128 + tableInsertItemPdu.items.push(tableItemPdu);
  129 +
  130 + let updateObjPdu = new pdu['RCRegistryUpdateObjPdu'];
  131 + updateObjPdu.objId = ApeConsts.WHITEBOARD_OBJ_TABLE_ID;
  132 + updateObjPdu.subType = tableInsertItemPdu.type;
  133 + updateObjPdu.userData = tableInsertItemPdu.toArrayBuffer();
  134 +
  135 + //同步
  136 + let adapterItemPdu = new pdu['RCAdapterItemPdu'];
  137 + adapterItemPdu.type = pdu.RCPDU_REG_UPDATE_OBJ;
  138 + adapterItemPdu.itemData = updateObjPdu.toArrayBuffer();
  139 +
  140 + let adapterPdu = new pdu['RCAdapterPdu'];
  141 + adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
  142 + adapterPdu.item.push(adapterItemPdu);
  143 +
  144 + //loger.log("添加标注->itemIdx=" + tableItemPdu.itemIdx);
  145 + this.sendUniform(adapterPdu, true);
  146 + }
  147 +
  148 + //撤销上一步
  149 + sendGotoPrev() {
  150 + loger.log("撤销上一步");
  151 + if (this.insertHistory == null || this.insertHistory.length < 1) {
  152 + loger.warn("无法继续上一步操作,已经没有可以撤销的数据");
  153 + return;
97 } 154 }
98 -  
99 - /////////////发送数据操作//////////////////////////////////////////////////////  
100 - // 添加标注,发送信息  
101 - sendInsetAnnotaion(_param) {  
102 - if (_param == null || EngineUtils.isEmptyObject(_param)) {  
103 - loger.warn('添加标注失败->参数错误->',_param);  
104 - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);  
105 - return;  
106 - }  
107 -  
108 - let itemIdx = EngineUtils.creatSoleNumberFromTimestamp();//创建时间戳,保证每条数据的唯一  
109 - let whiteBoardModelPdu = this.packPdu(_param, itemIdx);  
110 - if (whiteBoardModelPdu == null) {  
111 - loger.warn('添加标注失败-->参数错误->',_param);  
112 - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);  
113 - return;  
114 - }  
115 - //储存记录,用于返回上一步操作  
116 - this.insertHistory.push(whiteBoardModelPdu);  
117 -  
118 - let tableItemPdu = new pdu['RCRegistryTableItemPdu'];  
119 - tableItemPdu.itemIdx = itemIdx;//直接用时间戳作为id  
120 - tableItemPdu.registerObjId = ApeConsts.WHITEBOARD_OBJ_TABLE_ID;  
121 - tableItemPdu.owner = 0;//收到flash的是这个值,不清楚先写固定  
122 - tableItemPdu.itemData = whiteBoardModelPdu.toArrayBuffer();  
123 -  
124 - //insert  
125 - let tableInsertItemPdu = new pdu['RCRegistryTableInsertItemPdu'];  
126 - tableInsertItemPdu.type = pdu.RCPDU_REG_TABLE_INSERT_PDU;//  
127 - tableInsertItemPdu.items.push(tableItemPdu);  
128 -  
129 - let updateObjPdu = new pdu['RCRegistryUpdateObjPdu'];  
130 - updateObjPdu.objId = ApeConsts.WHITEBOARD_OBJ_TABLE_ID;  
131 - updateObjPdu.subType = tableInsertItemPdu.type;  
132 - updateObjPdu.userData = tableInsertItemPdu.toArrayBuffer();  
133 -  
134 - //同步  
135 - let adapterItemPdu = new pdu['RCAdapterItemPdu'];  
136 - adapterItemPdu.type = pdu.RCPDU_REG_UPDATE_OBJ;  
137 - adapterItemPdu.itemData = updateObjPdu.toArrayBuffer();  
138 -  
139 - let adapterPdu = new pdu['RCAdapterPdu'];  
140 - adapterPdu.type = pdu.RCPDU_REG_ADAPTER;  
141 - adapterPdu.item.push(adapterItemPdu);  
142 -  
143 - loger.log("添加标注->itemIdx=" + tableItemPdu.itemIdx);  
144 - this.sendUniform(adapterPdu, true); 155 + let annoItem = this.insertHistory.pop();
  156 + if (annoItem) {
  157 + let temAnnos = {};
  158 + temAnnos[annoItem.itemIdx] = annoItem;
  159 + this.sendDeleteAnnotaion({"itemIdxArr": temAnnos});
145 } 160 }
146 -  
147 - //撤销上一步  
148 - sendGotoPrev() {  
149 - loger.log("撤销上一步");  
150 - if (this.insertHistory == null || this.insertHistory.length < 1) {  
151 - loger.warn("无法继续上一步操作,已经没有可以撤销的数据");  
152 - return;  
153 - }  
154 - let annoItem=this.insertHistory.pop();  
155 - if(annoItem){  
156 - let temAnnos={};  
157 - temAnnos[annoItem.itemIdx]=annoItem;  
158 - this.sendDeleteAnnotaion({"itemIdxArr":temAnnos});  
159 - } 161 + }
  162 +
  163 + //删除当前页码的所有标注
  164 + sendDeleteCurPageAnnotation(_param) {
  165 + this.insertHistory = [];
  166 + let curPageAnnos = {};
  167 + for (let key in this.annoInfos) {
  168 + let item = this.annoInfos[key];
  169 + if (item && item.parentId == GlobalConfig.activeDocId && item.curPageNo == GlobalConfig.activeDocCurPage) {
  170 + //loger.log("sendDeleteCurPageAnnotation 删除当前页面上的标注", key);
  171 + //this.sendDeleteAnnotaion({"itemIdx": key});
  172 + curPageAnnos[key] = item;
  173 + }
160 } 174 }
161 175
162 - //删除当前页码的所有标注  
163 - sendDeleteCurPageAnnotation(_param) {  
164 - this.insertHistory=[];  
165 - let curPageAnnos={};  
166 - for (let key in this.annoInfos) {  
167 - let item = this.annoInfos[key];  
168 - if (item && item.parentId == GlobalConfig.activeDocId && item.curPageNo == GlobalConfig.activeDocCurPage) {  
169 - //loger.log("sendDeleteCurPageAnnotation 删除当前页面上的标注", key);  
170 - //this.sendDeleteAnnotaion({"itemIdx": key});  
171 - curPageAnnos[key]=item;  
172 - }  
173 - }  
174 -  
175 - this.sendDeleteAnnotaion({"itemIdxArr":curPageAnnos}); 176 + this.sendDeleteAnnotaion({"itemIdxArr": curPageAnnos});
  177 + }
  178 +
  179 + //删除所有标注
  180 + sendDeleteAllAnnotation(_param) {
  181 + this.insertHistory = [];
  182 + /* for (let key in this.annoInfos) {
  183 + this.sendDeleteAnnotaion({"itemIdx": key});
  184 + }*/
  185 + this.sendDeleteAnnotaion({"itemIdxArr": this.annoInfos});
  186 + }
  187 +
  188 + //删除标注,发送信息 {"itemIdxArr":{}}
  189 + sendDeleteAnnotaion(_param) {
  190 + if (_param == null || _param.itemIdxArr == null) {
  191 + loger.warn("要删除的数据不存在->", _param);
  192 + return;
176 } 193 }
177 -  
178 - //删除所有标注  
179 - sendDeleteAllAnnotation(_param) {  
180 - this.insertHistory=[];  
181 - /* for (let key in this.annoInfos) {  
182 - this.sendDeleteAnnotaion({"itemIdx": key});  
183 - }*/  
184 - this.sendDeleteAnnotaion({"itemIdxArr":this.annoInfos}); 194 + let adapterPdu = new pdu['RCAdapterPdu'];
  195 + adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
  196 +
  197 + /*for (let key in _param.itemIdxArr) {
  198 + let tableDeleteItemPdu = new pdu['RCRegistryTableDeleteItemPdu'];
  199 + tableDeleteItemPdu.type = pdu.RCPDU_REG_TABLE_DELETE_PDU;//
  200 + tableDeleteItemPdu.itemIdx = parseInt(key);//这里需要设置要删除的数据的itemIdx,每条数据的这个id都不一样
  201 +
  202 + let updateObjPdu = new pdu['RCRegistryUpdateObjPdu'];
  203 + updateObjPdu.objId = ApeConsts.WHITEBOARD_OBJ_TABLE_ID;
  204 + updateObjPdu.subType = tableDeleteItemPdu.type;
  205 + updateObjPdu.userData = tableDeleteItemPdu.toArrayBuffer();
  206 +
  207 + //同步
  208 + let adapterItemPdu = new pdu['RCAdapterItemPdu'];
  209 + adapterItemPdu.type = pdu.RCPDU_REG_UPDATE_OBJ;
  210 + adapterItemPdu.itemData = updateObjPdu.toArrayBuffer();
  211 + adapterPdu.item.push(adapterItemPdu);
  212 + }*/
  213 + let tableDeleteItemPdu = new pdu['RCRegistryTableDeleteItemPdu'];
  214 + tableDeleteItemPdu.type = pdu.RCPDU_REG_TABLE_DELETE_PDU;//
  215 + for (let key in _param.itemIdxArr) {
  216 + tableDeleteItemPdu.itemIdx.push(parseInt(key));//这里需要设置要删除的数据的itemIdx,每条数据的这个id都不一样
185 } 217 }
186 -  
187 - //删除标注,发送信息 {"itemIdxArr":{}}  
188 - sendDeleteAnnotaion(_param) {  
189 - if (_param == null||_param.itemIdxArr==null) {  
190 - loger.warn("要删除的数据不存在->",_param);  
191 - return;  
192 - }  
193 - let adapterPdu = new pdu['RCAdapterPdu'];  
194 - adapterPdu.type = pdu.RCPDU_REG_ADAPTER;  
195 -  
196 - for (let key in _param.itemIdxArr) {  
197 - let tableDeleteItemPdu = new pdu['RCRegistryTableDeleteItemPdu'];  
198 - tableDeleteItemPdu.type = pdu.RCPDU_REG_TABLE_DELETE_PDU;//  
199 - tableDeleteItemPdu.itemIdx = parseInt(key);//这里需要设置要删除的数据的itemIdx,每条数据的这个id都不一样  
200 -  
201 - let updateObjPdu = new pdu['RCRegistryUpdateObjPdu'];  
202 - updateObjPdu.objId = ApeConsts.WHITEBOARD_OBJ_TABLE_ID;  
203 - updateObjPdu.subType = tableDeleteItemPdu.type;  
204 - updateObjPdu.userData = tableDeleteItemPdu.toArrayBuffer();  
205 -  
206 - //同步  
207 - let adapterItemPdu = new pdu['RCAdapterItemPdu'];  
208 - adapterItemPdu.type = pdu.RCPDU_REG_UPDATE_OBJ;  
209 - adapterItemPdu.itemData = updateObjPdu.toArrayBuffer();  
210 - adapterPdu.item.push(adapterItemPdu);  
211 - }  
212 - loger.log("发送删除白板标注数据->长度:" + adapterPdu.item.length);  
213 - this.sendUniform(adapterPdu, true); 218 + loger.log("发送删除白板标注数据->数量:" + tableDeleteItemPdu.itemIdx.length);
  219 + let updateObjPdu = new pdu['RCRegistryUpdateObjPdu'];
  220 + updateObjPdu.objId = ApeConsts.WHITEBOARD_OBJ_TABLE_ID;
  221 + updateObjPdu.subType = tableDeleteItemPdu.type;
  222 + updateObjPdu.userData = tableDeleteItemPdu.toArrayBuffer();
  223 +
  224 + //同步
  225 + let adapterItemPdu = new pdu['RCAdapterItemPdu'];
  226 + adapterItemPdu.type = pdu.RCPDU_REG_UPDATE_OBJ;
  227 + adapterItemPdu.itemData = updateObjPdu.toArrayBuffer();
  228 + adapterPdu.item.push(adapterItemPdu);
  229 +
  230 + //loger.log("发送删除白板标注数据->长度:" + tableDeleteItemPdu.itemIdx.length);
  231 + this.sendUniform(adapterPdu, true);
  232 + }
  233 +
  234 + /*sendDeleteAnnotaion(_param) {
  235 + if (_param == null) {
  236 + loger.warn("要删除的数据不存在");
  237 + return;
  238 + }
  239 + //{"itemIdx":itemIdx}
  240 + let tableDeleteItemPdu = new pdu['RCRegistryTableDeleteItemPdu'];
  241 + //optional RCPduType_E type = 1 [default = RCPDU_REG_TABLE_DELETE_PDU];
  242 + // repeated uint32 item_idx = 2;
  243 + tableDeleteItemPdu.type = pdu.RCPDU_REG_TABLE_DELETE_PDU;//
  244 + tableDeleteItemPdu.itemIdx = parseInt(_param.itemIdx);//这里需要设置要删除的数据的itemIdx,每条数据的这个id都不一样
  245 +
  246 + let updateObjPdu = new pdu['RCRegistryUpdateObjPdu'];
  247 + updateObjPdu.objId = ApeConsts.WHITEBOARD_OBJ_TABLE_ID;
  248 + updateObjPdu.subType = tableDeleteItemPdu.type;
  249 + updateObjPdu.userData = tableDeleteItemPdu.toArrayBuffer();
  250 +
  251 + //同步
  252 + let adapterItemPdu = new pdu['RCAdapterItemPdu'];
  253 + adapterItemPdu.type = pdu.RCPDU_REG_UPDATE_OBJ;
  254 + adapterItemPdu.itemData = updateObjPdu.toArrayBuffer();
  255 +
  256 + let adapterPdu = new pdu['RCAdapterPdu'];
  257 + adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
  258 + adapterPdu.item.push(adapterItemPdu);
  259 +
  260 + loger.log("白板发送删除数据->" + tableDeleteItemPdu.itemIdx);
  261 + this.sendUniform(adapterPdu, true);
  262 + }*/
  263 +
  264 +
  265 + //更新标注
  266 + sendUpdaterAnnotaion(_param) {
  267 + if (_param == null || _param.itemIdxArr == null) {
  268 + loger.log('更新标注数据->失败->参数错误');
  269 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
  270 + return;
214 } 271 }
215 - /*sendDeleteAnnotaion(_param) {  
216 - if (_param == null) {  
217 - loger.warn("要删除的数据不存在");  
218 - return;  
219 - }  
220 - //{"itemIdx":itemIdx}  
221 - let tableDeleteItemPdu = new pdu['RCRegistryTableDeleteItemPdu'];  
222 - //optional RCPduType_E type = 1 [default = RCPDU_REG_TABLE_DELETE_PDU];  
223 - // repeated uint32 item_idx = 2;  
224 - tableDeleteItemPdu.type = pdu.RCPDU_REG_TABLE_DELETE_PDU;//  
225 - tableDeleteItemPdu.itemIdx = parseInt(_param.itemIdx);//这里需要设置要删除的数据的itemIdx,每条数据的这个id都不一样  
226 -  
227 - let updateObjPdu = new pdu['RCRegistryUpdateObjPdu'];  
228 - updateObjPdu.objId = ApeConsts.WHITEBOARD_OBJ_TABLE_ID;  
229 - updateObjPdu.subType = tableDeleteItemPdu.type;  
230 - updateObjPdu.userData = tableDeleteItemPdu.toArrayBuffer();  
231 -  
232 - //同步  
233 - let adapterItemPdu = new pdu['RCAdapterItemPdu'];  
234 - adapterItemPdu.type = pdu.RCPDU_REG_UPDATE_OBJ;  
235 - adapterItemPdu.itemData = updateObjPdu.toArrayBuffer();  
236 -  
237 - let adapterPdu = new pdu['RCAdapterPdu'];  
238 - adapterPdu.type = pdu.RCPDU_REG_ADAPTER;  
239 - adapterPdu.item.push(adapterItemPdu);  
240 -  
241 - loger.log("白板发送删除数据->" + tableDeleteItemPdu.itemIdx);  
242 - this.sendUniform(adapterPdu, true);  
243 - }*/  
244 -  
245 -  
246 -  
247 -  
248 - //更新标注  
249 - sendUpdaterAnnotaion(_param) {  
250 - if (_param == null ||_param.itemIdxArr==null) {  
251 - loger.log('更新标注数据->失败->参数错误');  
252 - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);  
253 - return;  
254 - }  
255 - let adapterPdu = new pdu['RCAdapterPdu'];  
256 - adapterPdu.type = pdu.RCPDU_REG_ADAPTER;  
257 - for (let key in _param.itemIdxArr) {  
258 - let itemIdx =parseInt(key);  
259 - let item= _param.itemIdxArr[key];  
260 - let whiteBoardModelPdu = this.packPdu(item, itemIdx);  
261 - if (whiteBoardModelPdu == null) {  
262 - loger.log('更新标注数据->失败->数据无效');  
263 - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);  
264 - continue;  
265 - }  
266 - let tableItemPdu = new pdu['RCRegistryTableItemPdu'];  
267 - tableItemPdu.itemIdx = itemIdx;  
268 - tableItemPdu.owner = 0;//收到flash的是这个值,不清楚先写固定  
269 - tableItemPdu.registerObjId = ApeConsts.WHITEBOARD_OBJ_TABLE_ID;  
270 - tableItemPdu.itemData = whiteBoardModelPdu.toArrayBuffer();  
271 -  
272 - //updater  
273 - let whiteBoardUpdateItem = new pdu['RCRegistryTableUpdateItemPdu'];  
274 - whiteBoardUpdateItem.type = pdu.RCPDU_REG_TABLE_UPDATE_PDU;//  
275 - whiteBoardUpdateItem.items.push(tableItemPdu);  
276 -  
277 - let updateObjPdu = new pdu['RCRegistryUpdateObjPdu'];  
278 - updateObjPdu.objId = ApeConsts.WHITEBOARD_OBJ_TABLE_ID;  
279 - updateObjPdu.subType = whiteBoardUpdateItem.type;  
280 - updateObjPdu.userData = whiteBoardUpdateItem.toArrayBuffer();  
281 -  
282 - //同步  
283 - let adapterItemPdu = new pdu['RCAdapterItemPdu'];  
284 - adapterItemPdu.type = pdu.RCPDU_REG_UPDATE_OBJ;  
285 - adapterItemPdu.itemData = updateObjPdu.toArrayBuffer();  
286 - adapterPdu.item.push(adapterItemPdu);  
287 - }  
288 - let len=adapterPdu.item.length  
289 - if(len>0){  
290 - loger.log("更新标注数据->发送数量->",adapterPdu.item.length);  
291 - this.sendUniform(adapterPdu, true);  
292 - }else {  
293 - loger.log("更新标注数据->没有可更新的数据");  
294 - } 272 + let adapterPdu = new pdu['RCAdapterPdu'];
  273 + adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
  274 + for (let key in _param.itemIdxArr) {
  275 + let itemIdx = parseInt(key);
  276 + let item = _param.itemIdxArr[key];
  277 + let whiteBoardModelPdu = this.packPdu(item, itemIdx);
  278 + if (whiteBoardModelPdu == null) {
  279 + loger.log('更新标注数据->失败->数据无效');
  280 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
  281 + continue;
  282 + }
  283 + let tableItemPdu = new pdu['RCRegistryTableItemPdu'];
  284 + tableItemPdu.itemIdx = itemIdx;
  285 + tableItemPdu.owner = 0;//收到flash的是这个值,不清楚先写固定
  286 + tableItemPdu.registerObjId = ApeConsts.WHITEBOARD_OBJ_TABLE_ID;
  287 + tableItemPdu.itemData = whiteBoardModelPdu.toArrayBuffer();
  288 +
  289 + //updater
  290 + let whiteBoardUpdateItem = new pdu['RCRegistryTableUpdateItemPdu'];
  291 + whiteBoardUpdateItem.type = pdu.RCPDU_REG_TABLE_UPDATE_PDU;//
  292 + whiteBoardUpdateItem.items.push(tableItemPdu);
  293 +
  294 + let updateObjPdu = new pdu['RCRegistryUpdateObjPdu'];
  295 + updateObjPdu.objId = ApeConsts.WHITEBOARD_OBJ_TABLE_ID;
  296 + updateObjPdu.subType = whiteBoardUpdateItem.type;
  297 + updateObjPdu.userData = whiteBoardUpdateItem.toArrayBuffer();
  298 +
  299 + //同步
  300 + let adapterItemPdu = new pdu['RCAdapterItemPdu'];
  301 + adapterItemPdu.type = pdu.RCPDU_REG_UPDATE_OBJ;
  302 + adapterItemPdu.itemData = updateObjPdu.toArrayBuffer();
  303 + adapterPdu.item.push(adapterItemPdu);
295 } 304 }
296 -  
297 - /////收到消息处理/////////////////////////////////////////////////////////////////////////////////  
298 - tableInsertHandler(owner, itemIdx, itemData) {  
299 - let whiteBoardModel = this.unPackPdu(owner, itemIdx, itemData);  
300 - loger.log('tableInsertHandler',"activeDocId->",GlobalConfig.activeDocId ,"parentId->", whiteBoardModel.parentId);  
301 - //loger.log(whiteBoardModel);  
302 - if (whiteBoardModel) {  
303 - if (GlobalConfig.activeDocId == whiteBoardModel.parentId && GlobalConfig.activeDocCurPage == whiteBoardModel.curPageNo) {  
304 - //loger.log('显示新增的标注->');  
305 - this.insertAandShowAnnotaion(whiteBoardModel);  
306 - }  
307 - } 305 + let len = adapterPdu.item.length
  306 + if (len > 0) {
  307 + loger.log("更新标注数据->发送数量->", adapterPdu.item.length);
  308 + this.sendUniform(adapterPdu, true);
  309 + } else {
  310 + loger.log("更新标注数据->没有可更新的数据");
308 } 311 }
309 -  
310 - tableUpdateHandler(owner, itemIdx, itemData) {  
311 - //白板标注数据不在这个函数中处理,在tableUpdateApeHandler中处理  
312 - /*let whiteBoardModel = this.unPackPdu(owner, itemIdx, itemData);  
313 - loger.log('tableUpdateHandler',"activeDocId->",GlobalConfig.activeDocId ,"parentId->", whiteBoardModel.parentId);  
314 - loger.log(whiteBoardModel);  
315 - if (whiteBoardModel && whiteBoardModel.parentId == GlobalConfig.activeDocId && whiteBoardModel.curPageNo == GlobalConfig.activeDocCurPage) {  
316 - this.updateAandShowAnnotaion();  
317 - }*/ 312 + }
  313 +
  314 + /////收到消息处理/////////////////////////////////////////////////////////////////////////////////
  315 + tableInsertHandler(owner, itemIdx, itemData) {
  316 + let whiteBoardModel = this.unPackPdu(owner, itemIdx, itemData);
  317 + loger.log('新增标注', "activeDocId->", GlobalConfig.activeDocId, "parentId->", whiteBoardModel.parentId);
  318 + //loger.log(whiteBoardModel);
  319 + if (whiteBoardModel) {
  320 + if (GlobalConfig.activeDocId == whiteBoardModel.parentId && GlobalConfig.activeDocCurPage == whiteBoardModel.curPageNo) {
  321 + //loger.log('显示新增的标注->');
  322 + this.insertAandShowAnnotaion(whiteBoardModel);
  323 + }
318 } 324 }
319 -  
320 - tableUpdateApeHandler(_tableUpdateItems,_seekTime){  
321 - let tableUpdateItemsLen = _tableUpdateItems.length;  
322 - loger.log('白板标注更新->',"activeDocId->",GlobalConfig.activeDocId ,"数量->", tableUpdateItemsLen);  
323 - for (let i = 0; i < tableUpdateItemsLen; ++i) {  
324 - let tableItem = _tableUpdateItems[i];  
325 - let whiteBoardModel = this.unPackPdu(tableItem.owner, tableItem.itemIdx, tableItem.itemData);  
326 - }  
327 - this.updateAandShowAnnotaion(); 325 + }
  326 +
  327 + tableUpdateHandler(owner, itemIdx, itemData) {
  328 + //白板标注数据不在这个函数中处理,在tableUpdateApeHandler中处理
  329 + /*let whiteBoardModel = this.unPackPdu(owner, itemIdx, itemData);
  330 + loger.log('tableUpdateHandler',"activeDocId->",GlobalConfig.activeDocId ,"parentId->", whiteBoardModel.parentId);
  331 + loger.log(whiteBoardModel);
  332 + if (whiteBoardModel && whiteBoardModel.parentId == GlobalConfig.activeDocId && whiteBoardModel.curPageNo == GlobalConfig.activeDocCurPage) {
  333 + this.updateAandShowAnnotaion();
  334 + }*/
  335 + }
  336 +
  337 + tableUpdateApeHandler(_tableUpdateItems, _seekTime) {
  338 + let tableUpdateItemsLen = _tableUpdateItems.length;
  339 + loger.log('白板标注更新->', "activeDocId->", GlobalConfig.activeDocId, "数量->", tableUpdateItemsLen);
  340 + for (let i = 0; i < tableUpdateItemsLen; ++i) {
  341 + let tableItem = _tableUpdateItems[i];
  342 + let whiteBoardModel = this.unPackPdu(tableItem.owner, tableItem.itemIdx, tableItem.itemData);
328 } 343 }
329 -  
330 - tableDeleteHandler(object_id, tableDeleteData) {  
331 - // console.log("白板收到数据,tableDeleteHandler object_id="+object_id);//((18<< 16) + 1)=1179649  
332 - loger.log('删除白板数据->', object_id, tableDeleteData);//["tableDeleteHandler",1179649,{"type":231,"itemIdx":[1486301768]}]  
333 - if (tableDeleteData && tableDeleteData.itemIdx) {  
334 - let len = tableDeleteData.itemIdx.length;  
335 - let itemIdxs = tableDeleteData.itemIdx;  
336 - for (let i = 0; i < len; i++) {  
337 - if (this.annoInfos[itemIdxs[i]]) {  
338 - loger.log("删除白板数据:", itemIdxs[i]);  
339 - delete this.annoInfos[itemIdxs[i]];  
340 - }  
341 - } 344 + this.updateAandShowAnnotaion();
  345 + }
  346 +
  347 + tableDeleteHandler(object_id, tableDeleteData) {
  348 + // console.log("白板收到数据,tableDeleteHandler object_id="+object_id);//((18<< 16) + 1)=1179649
  349 + loger.log('删除白板数据->', object_id, tableDeleteData);//["tableDeleteHandler",1179649,{"type":231,"itemIdx":[1486301768]}]
  350 + if (tableDeleteData && tableDeleteData.itemIdx) {
  351 + let len = tableDeleteData.itemIdx.length;
  352 + let itemIdxs = tableDeleteData.itemIdx;
  353 + for (let i = 0; i < len; i++) {
  354 + if (this.annoInfos[itemIdxs[i]]) {
  355 + //loger.log("删除白板数据:", itemIdxs[i]);
  356 + delete this.annoInfos[itemIdxs[i]];
342 } 357 }
343 - this.updateAandShowAnnotaion(); 358 + }
344 } 359 }
  360 + this.updateAandShowAnnotaion();
  361 + }
345 362
346 - //文档更新,白板也要更新  
347 - docUpdateHandler(_data) {  
348 - //loger.log("白板收到文档更新的消息");  
349 - //loger.log(_data); 363 + //文档更新,白板也要更新
  364 + docUpdateHandler(_data) {
  365 + //loger.log("白板收到文档更新的消息");
  366 + //loger.log(_data);
350 367
351 - //如果切换了文档或翻页,清除之前的添加步骤记录  
352 - if (_data.action == ApeConsts.DOC_ACTION_SWITCH_DOC || _data.action == ApeConsts.DOC_ACTION_SWITCH_PAGE) {  
353 - this.insertHistory = [];  
354 - }  
355 - this.updateAandShowAnnotaion(); 368 + //如果切换了文档或翻页,清除之前的添加步骤记录
  369 + if (_data.action == ApeConsts.DOC_ACTION_SWITCH_DOC || _data.action == ApeConsts.DOC_ACTION_SWITCH_PAGE) {
  370 + this.insertHistory = [];
356 } 371 }
357 -  
358 - //删除白板数据  
359 - docDeleteHandler(_parentId) {  
360 - loger.log("白板收到文档删除的消息->", _parentId);  
361 - for (let key in this.annoInfos) {  
362 - let item = this.annoInfos[key];  
363 - if (item && item.parentId == _parentId) {  
364 - loger.log("文档删除->白板数据也删除,itemIdx:" + key, "_parentId:", _parentId);  
365 - this.sendDeleteAnnotaion({"itemIdx": key});  
366 - }  
367 - }  
368 -  
369 - //判断当前是否有文档在显示,如果文档没有显示就显示默认的白板数据  
370 - if(GlobalConfig.activeDocId==0){  
371 - this.insertHistory=[];  
372 - this.updateAandShowAnnotaion();  
373 - } 372 + this.updateAandShowAnnotaion();
  373 + }
  374 +
  375 + //删除白板数据
  376 + docDeleteHandler(_parentId) {
  377 + loger.log("白板收到文档删除的消息->", _parentId);
  378 + for (let key in this.annoInfos) {
  379 + let item = this.annoInfos[key];
  380 + if (item && item.parentId == _parentId) {
  381 + loger.log("文档删除->白板数据也删除,itemIdx:" + key, "_parentId:", _parentId);
  382 + this.sendDeleteAnnotaion({"itemIdx": key});
  383 + }
374 } 384 }
375 385
376 - //增量添加标注  
377 - insertAandShowAnnotaion(_item) {  
378 - let annotaionItems = [_item];  
379 - var updateObj = {  
380 - "isFresh": false,  
381 - "annotaionItems": annotaionItems  
382 - };  
383 - //loger.log("新增一条标注数据->显示到界面");  
384 - this._emit(MessageTypes.WHITEBOARD_ANNOTATION_UPDATE, updateObj); 386 + //判断当前是否有文档在显示,如果文档没有显示就显示默认的白板数据
  387 + if (GlobalConfig.activeDocId == 0) {
  388 + this.insertHistory = [];
  389 + this.updateAandShowAnnotaion();
385 } 390 }
386 -  
387 - //整体更新并且显示标注  
388 - updateAandShowAnnotaion() {  
389 - let annotaionItems = [];  
390 - for (let key in this.annoInfos) {  
391 - let item = this.annoInfos[key];  
392 - if (item && item.parentId == GlobalConfig.activeDocId && item.curPageNo == GlobalConfig.activeDocCurPage) {  
393 - annotaionItems.push(item);  
394 - //loger.log("显示和文档对应的白板数据->:", item.itemIdx, "doc->itemIdx:", GlobalConfig.activeDocId, "curPageNo:", GlobalConfig.activeDocCurPage);  
395 - } else {  
396 - //loger.log("不显示白板数据docUpdateHandler->",item.itemIdx);  
397 - }  
398 - }  
399 - var updateObj = {  
400 - "isFresh": true,//清除现有显示的数据  
401 - "annotaionItems": annotaionItems //最新需要显示的数据  
402 - };  
403 - //loger.log("清除当前显示的标注---->重绘标注数量--->", annotaionItems.length,"当前文档信息--->DocId->",GlobalConfig.activeDocId,"curPageNo->",GlobalConfig.activeDocCurPage);  
404 - this._emit(MessageTypes.WHITEBOARD_ANNOTATION_UPDATE, updateObj); 391 + }
  392 +
  393 + //增量添加标注
  394 + insertAandShowAnnotaion(_item) {
  395 + let annotaionItems = [_item];
  396 + var updateObj = {
  397 + "isFresh": false,
  398 + "annotaionItems": annotaionItems
  399 + };
  400 + //loger.log("新增一条标注数据->显示到界面");
  401 + this._emit(MessageTypes.WHITEBOARD_ANNOTATION_UPDATE, updateObj);
  402 + }
  403 +
  404 + //整体更新并且显示标注
  405 + updateAandShowAnnotaion() {
  406 + let annotaionItems = [];
  407 + for (let key in this.annoInfos) {
  408 + let item = this.annoInfos[key];
  409 + if (item && item.parentId == GlobalConfig.activeDocId && item.curPageNo == GlobalConfig.activeDocCurPage) {
  410 + annotaionItems.push(item);
  411 + //loger.log("显示和文档对应的白板数据->:", item.itemIdx, "doc->itemIdx:", GlobalConfig.activeDocId, "curPageNo:", GlobalConfig.activeDocCurPage);
  412 + } else {
  413 + //loger.log("不显示白板数据docUpdateHandler->",item.itemIdx);
  414 + }
405 } 415 }
406 -  
407 - ///////白板数据的封包和解包/////////////////////////////////////////  
408 - packPdu(_param, _itemIdx) {  
409 - //验证坐标点集合数组是否合法  
410 - if (_param.pointGroup == null || _param.pointGroup.length < 1) {  
411 - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);  
412 - return null;  
413 - }  
414 - //判断type类型,根据type设置不同的参数  
415 - let whiteBoardModelPdu = new pdu['RCWhiteBoardDataModelPdu'];  
416 - switch (_param.type) {  
417 - case TYPE_BIGHT:  
418 - break;  
419 - case TYPE_LINE:  
420 - break;  
421 - case TYPE_RECT:  
422 - break;  
423 - case TYPE_CIRCLE:  
424 - whiteBoardModelPdu.radius = parseInt(_param.radius);  
425 - break;  
426 - case TYPE_TEXT:  
427 - whiteBoardModelPdu.fontSize = parseInt(_param.fontSize);  
428 - whiteBoardModelPdu.fontName = _param.fontName || null;  
429 - whiteBoardModelPdu.text = _param.text || null;  
430 - break;  
431 - default:  
432 - //其它类型不做处理  
433 - return null;  
434 - break;  
435 - }  
436 - //下面4个是必须的参数  
437 - whiteBoardModelPdu.type = _param.type;  
438 - whiteBoardModelPdu.itemIdx = _itemIdx;  
439 - whiteBoardModelPdu.initiator = GlobalConfig.nodeId;  
440 -  
441 - whiteBoardModelPdu.parentId = GlobalConfig.activeDocId;//当前激活的文档id  
442 - whiteBoardModelPdu.curPageNo = GlobalConfig.activeDocCurPage;//当前激活的文档页码  
443 -  
444 - whiteBoardModelPdu.pointGroup = EngineUtils.arrayToJsonString(_param.pointGroup);  
445 - whiteBoardModelPdu.color = _param.color || "#000000";  
446 - whiteBoardModelPdu.thickness = _param.thickness ||1;  
447 -  
448 - return whiteBoardModelPdu; 416 + var updateObj = {
  417 + "isFresh": true,//清除现有显示的数据
  418 + "annotaionItems": annotaionItems //最新需要显示的数据
  419 + };
  420 + //loger.log("清除当前显示的标注---->重绘标注数量--->", annotaionItems.length,"当前文档信息--->DocId->",GlobalConfig.activeDocId,"curPageNo->",GlobalConfig.activeDocCurPage);
  421 + this._emit(MessageTypes.WHITEBOARD_ANNOTATION_UPDATE, updateObj);
  422 + }
  423 +
  424 + ///////白板数据的封包和解包/////////////////////////////////////////
  425 + packPdu(_param, _itemIdx) {
  426 + //验证坐标点集合数组是否合法
  427 + if (_param.pointGroup == null || _param.pointGroup.length < 1) {
  428 + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
  429 + return null;
449 } 430 }
450 -  
451 - unPackPdu(owner, itemIdx, itemData) {  
452 - try {  
453 - //loger.log("白板标注数据->unPackPdu");  
454 - let whiteBoardModelPdu = pdu['RCWhiteBoardDataModelPdu'].decode(itemData);  
455 - let _pointGroup = EngineUtils.arrayFromJsonString(whiteBoardModelPdu.pointGroup);  
456 - whiteBoardModelPdu.pointGroup = _pointGroup;  
457 - this.annoInfos[itemIdx] = whiteBoardModelPdu;  
458 - return whiteBoardModelPdu;  
459 - } catch (err) {  
460 - loger.log("白板标注数据->unPackPdu->Pdu解析错误,itemIdx=" + itemIdx + " err:" + err.message);  
461 - } 431 + //判断type类型,根据type设置不同的参数
  432 + let whiteBoardModelPdu = new pdu['RCWhiteBoardDataModelPdu'];
  433 + switch (_param.type) {
  434 + case TYPE_BIGHT:
  435 + break;
  436 + case TYPE_LINE:
  437 + break;
  438 + case TYPE_RECT:
  439 + break;
  440 + case TYPE_CIRCLE:
  441 + whiteBoardModelPdu.radius = parseInt(_param.radius);
  442 + break;
  443 + case TYPE_TEXT:
  444 + whiteBoardModelPdu.fontSize = parseInt(_param.fontSize);
  445 + whiteBoardModelPdu.fontName = _param.fontName || null;
  446 + whiteBoardModelPdu.text = _param.text || null;
  447 + break;
  448 + default:
  449 + //其它类型不做处理
462 return null; 450 return null;
  451 + break;
  452 + }
  453 + //下面4个是必须的参数
  454 + whiteBoardModelPdu.type = _param.type;
  455 + whiteBoardModelPdu.itemIdx = _itemIdx;
  456 + whiteBoardModelPdu.initiator = GlobalConfig.nodeId;
  457 +
  458 + whiteBoardModelPdu.parentId = GlobalConfig.activeDocId;//当前激活的文档id
  459 + whiteBoardModelPdu.curPageNo = GlobalConfig.activeDocCurPage;//当前激活的文档页码
  460 +
  461 + whiteBoardModelPdu.pointGroup = EngineUtils.arrayToJsonString(_param.pointGroup);
  462 + whiteBoardModelPdu.color = _param.color || "#000000";
  463 + whiteBoardModelPdu.thickness = _param.thickness || 1;
  464 +
  465 + return whiteBoardModelPdu;
  466 + }
  467 +
  468 + unPackPdu(owner, itemIdx, itemData) {
  469 + try {
  470 + //loger.log("白板标注数据->unPackPdu");
  471 + let whiteBoardModelPdu = pdu['RCWhiteBoardDataModelPdu'].decode(itemData);
  472 + let _pointGroup = EngineUtils.arrayFromJsonString(whiteBoardModelPdu.pointGroup);
  473 + whiteBoardModelPdu.pointGroup = _pointGroup;
  474 + this.annoInfos[itemIdx] = whiteBoardModelPdu;
  475 + return whiteBoardModelPdu;
  476 + } catch (err) {
  477 + loger.log("白板标注数据->unPackPdu->Pdu解析错误,itemIdx=" + itemIdx + " err:" + err.message);
463 } 478 }
  479 + return null;
  480 + }
464 481
465 } 482 }
466 483