李勇

1.删除console.log

... ... @@ -26,7 +26,7 @@ import ArrayBufferUtil from 'libs/ArrayBufferUtil';
import UTF8 from 'utf-8';
let loger = Loger.getLoger('MessageEntrance');
let _sdkInfo = {"version": "v.1.7.0.20170309-1", "author": "www.3mang.com"};
let _sdkInfo = {"version": "v.1.8.0.20170314-1", "author": "www.3mang.com"};
//APE
let _sass;
... ... @@ -470,8 +470,12 @@ export default class MessageEntrance extends Emiter {
if (_data.currentInfo) {
//根据从Sass获取的数据信息,同步最后一次保存的课堂状态信息
loger.log("本地同步最后一次保存过的课堂状态信息");
GlobalConfig.setClassStatusInfo(_data.currentInfo);
console.log(GlobalConfig.classStatusInfo);
try {
GlobalConfig.setClassStatusInfo(JSON.parse(_data.currentInfo));
}catch (err){
GlobalConfig.setClassStatusInfo(_data.currentInfo);
}
loger.log(GlobalConfig.classStatusInfo);
} else {
loger.log("还没有保存过课堂状信息");
}
... ... @@ -523,12 +527,12 @@ export default class MessageEntrance extends Emiter {
//保存会态信息成功
_sassSaveClassStatusInfoSuccessHandler(_data) {
loger.log('保存课堂状态信息成功.');
console.log(_data);
loger.log(_data);
}
_sassSaveClassRecordInfoSuccessHandler(_data) {
loger.log('保存课堂录制信息成功.');
console.log(_data);
loger.log(_data);
}
//Sass校验流程结束之后,开始加入MCU
... ... @@ -589,7 +593,7 @@ export default class MessageEntrance extends Emiter {
joinClassSuccessCallBackData.classTimestamp=GlobalConfig.classTimestamp;//课堂进行的累积时间
joinClassSuccessCallBackData.recordPlaybackMaxTime=GlobalConfig.recordPlaybackMaxTime;//录制回放的总时间
loger.log('加入课堂成功');
console.log(joinClassSuccessCallBackData);
loger.log(joinClassSuccessCallBackData);
//加入课堂成功,广播消息
this._emit(MessageTypes.CLASS_JOIN_SUCCESS, joinClassSuccessCallBackData);
... ... @@ -964,7 +968,7 @@ export default class MessageEntrance extends Emiter {
return;
}
loger.log('Doc UpdateId ->');
console.log(_data);
loger.log(_data);
if (_whiteboard_ape) {
_whiteboard_ape.docUpdateHandler(_data);
}
... ... @@ -980,7 +984,7 @@ export default class MessageEntrance extends Emiter {
//文档加入频道成功,同步到MCU服务器上的数据
docJoinChannelSuccess() {
loger.log("docJoinChannelSuccess isHost=", GlobalConfig.isHost);
console.log(GlobalConfig.docListPrepare);
loger.log(GlobalConfig.docListPrepare);
loger.log("docJoinChannelSuccess docListPrepare=");
//如果是主持人,那么需要判断一下文档模块同步的数据和从sass获取的文档数据是否相同,如果mcu服务器不存在的,需要上传
if (GlobalConfig.isHost) {
... ... @@ -1137,7 +1141,7 @@ export default class MessageEntrance extends Emiter {
joinClassSuccessCallBackData.classTimestamp=GlobalConfig.classTimestamp;//课堂进行的累积时间
joinClassSuccessCallBackData.recordPlaybackMaxTime=GlobalConfig.recordPlaybackMaxTime;//录制回放的总时间
console.log(joinClassSuccessCallBackData);
loger.log(joinClassSuccessCallBackData);
//和加入课堂成功使用同样的消息处理
this._emit(MessageTypes.CLASS_JOIN_SUCCESS, joinClassSuccessCallBackData);
}
... ...
... ... @@ -29,7 +29,7 @@ class RecordPlayBackParse extends Emiter {
loger.log("RecordPlayBackParse");
parseBuffer = new ByteBuffer(ByteBuffer.DEFAULT_CAPACITY, ByteBuffer.LITTLE_ENDIAN);
parseBuffer.clear();
console.log(parseBuffer);
//console.log(parseBuffer);
this._recordPlaybackTimestamp = 0;//回放的时间
this._recordPlaybackMaxTime = 0;//录制回放的总时间
this._isReady = false;//录制回放是否已经准备完成
... ... @@ -53,6 +53,20 @@ class RecordPlayBackParse extends Emiter {
this._apes[ape._session_id] = ape;
}
initReplay() {
this._stopTimerCounter();
this._recordPlaybackTimestamp = 0;//回放的时间
this._recordPlaybackMaxTime = 0;//录制回放的总时间
this._isReady = false;//录制回放是否已经准备完成
this._conferApeMssages = {};//会议数据
this._chatApeMssages = {};//聊天数据
this._videoApeMssages = {};//视频数据
this._audioApeMssages = {};//音频数据
this._docApeMssages = {};//文档数据
this._whiteApeMssages = {};//白板数据
}
//发送数据个各个APE模块处理,data是数据,seekTime是当前数据需要seek的时间长度(针对音视频的seek)
_everSocketMsgReceivedHandler(data, seekTime) {
let pduMsg = pdu.decode_pdu(data);
... ... @@ -65,7 +79,7 @@ class RecordPlayBackParse extends Emiter {
pduMsg.type = PduType.RCPDU_SEND_DATA_REQUEST;
pduType = PduType.RCPDU_SEND_DATA_REQUEST;
}
loger.log('_everSocketMsgReceivedHandler->pduType', pduType,"seekTime->",seekTime);
loger.log('_everSocketMsgReceivedHandler->pduType', pduType, "seekTime->", seekTime);
switch (pduType) {
case PduType.RCPDU_CONNECT_PROVIDER_RESPONSE:
//加入课堂请求返回数据处理
... ... @@ -95,7 +109,7 @@ class RecordPlayBackParse extends Emiter {
let subTypeLabel = pdu.id2type(pduMsg.subType);
//loger.log('MCU-SecondLayer封装消息', 'sessionId', sessionLabel, pduMsg.sessionId, 'subtype', subTypeLabel, pduMsg.subType);
//ape广播事件,只要ape中监听就能收到
ape._emit(pduMsg.subType, pduMsg.data,seekTime);//seekTime是音视频模块seek的时间长度
ape._emit(pduMsg.subType, pduMsg.data, seekTime);//seekTime是音视频模块seek的时间长度
} else {
loger.warn(sessionLabel + '尚未注册');
}
... ... @@ -186,12 +200,17 @@ class RecordPlayBackParse extends Emiter {
//开启计时器
_startTimerCounter() {
this._timerCounter.startTimer();
if (this._timerCounter) {
this._timerCounter.startTimer();
}
}
//停止计时器
_stopTimerCounter() {
this._timerCounter.stopTimer();
if (this._timerCounter) {
this._timerCounter.stopTimer();
}
}
_timerCounterUptate() {
... ... @@ -217,12 +236,11 @@ class RecordPlayBackParse extends Emiter {
//加载录制文件
readyRecordPlay() {
this._isReady = false;
this._stopTimerCounter();
this.initReplay();
loger.log("读取回放数据");
//let url = `http://123.56.73.119:80/h5dev/20170306/1357644520_20170306.rec`;
let url = `http://${ GlobalConfig.RecordServerIP}:${ GlobalConfig.RecordServerPort}/${GlobalConfig.recordFileName}`;
console.log(url);
loger.log(url);
fetch(url, {
timeout: 90000 //加载文件超时时间1分30秒
})
... ... @@ -273,14 +291,6 @@ class RecordPlayBackParse extends Emiter {
position += 4;//4字节
let byteData = parseBuffer.buffer.slice(position, (position + byteLen));
position += byteLen;
console.log(timestamp, byteLen, byteData);
/* let messageItem = this._messages[timestamp];
if (!messageItem) {
this._messages[timestamp] = [];//数组存数据,因为有1秒内收到多个消息的情况,timestamp是按秒记录的
messageItem = this._messages[timestamp];
}
messageItem.push({"timestamp": timestamp, "byteData": byteData});*/
this._parseSaveSocketMsgReceivedHandler(byteData, timestamp);
//记录最后一个数据的时间戳作为整个录制回放的总时间戳
... ... @@ -293,12 +303,12 @@ class RecordPlayBackParse extends Emiter {
GlobalConfig.recordPlaybackMaxTime = this._recordPlaybackMaxTime;
loger.log("录制回放数据解析完成,录制回放的总时间长为->", this._recordPlaybackMaxTime);
//console.log("_messages", this._messages);
console.log("_conferApeMssages", this._conferApeMssages);
console.log("_chatApeMssages", this._chatApeMssages);
console.log("_docApeMssages", this._docApeMssages);
console.log("_whiteApeMssages", this._whiteApeMssages);
console.log("_videoApeMssages", this._videoApeMssages);
console.log("_audioApeMssages", this._audioApeMssages);
loger.log("_conferApeMssages", this._conferApeMssages);
loger.log("_chatApeMssages", this._chatApeMssages);
loger.log("_docApeMssages", this._docApeMssages);
loger.log("_whiteApeMssages", this._whiteApeMssages);
loger.log("_videoApeMssages", this._videoApeMssages);
loger.log("_audioApeMssages", this._audioApeMssages);
this._emit(RecordPlayBackParse.CLASS_JOIN_RECORD_PLAYBACK_SUCCESS, {"recordPlaybackMaxTime": this._recordPlaybackMaxTime});
}
... ... @@ -311,7 +321,7 @@ class RecordPlayBackParse extends Emiter {
} else {
//把时间点对应的数据发送,同一秒内有存在多个数据的情况
for (let i = 0; i < msgDataArr.length; i++) {
this._everSocketMsgReceivedHandler(msgDataArr[i].byteData,0);
this._everSocketMsgReceivedHandler(msgDataArr[i].byteData, 0);
}
}
}
... ... @@ -392,19 +402,21 @@ class RecordPlayBackParse extends Emiter {
messageItem = _apeMessages[i];
if (messageItem) {
keyFrameSeekTime = (this._recordPlaybackTimestamp - i)
loger.log("SEEK->APE", ApeConsts(_apeId), this._recordPlaybackTimestamp, "查找到相连的timestamp->", i, '需要seek->', keyFrameSeekTime, "秒");
loger.log("SEEK->APE", ApeConsts(_apeId), this._recordPlaybackTimestamp, "查找到相连的timestamp->", i, '需要seek->', keyFrameSeekTime, "秒");
//把时间点对应的数据发送,同一秒内有存在多个数据的情况
for (let k = 0; k < messageItem.length; k++) {
this._everSocketMsgReceivedHandler(messageItem[k].byteData,keyFrameSeekTime);
this._everSocketMsgReceivedHandler(messageItem[k].byteData, keyFrameSeekTime);
}
if (_apeId == ApeConsts.AUDIO_SESSION_ID || _apeId == ApeConsts.VIDEO_SESSION_ID) {
this._emit(MessageTypes.RECORD_PLAYBACK_UPDATE, {"status": SEEK, "keyFrameSeekTime": keyFrameSeekTime});
this._emit(MessageTypes.RECORD_PLAYBACK_UPDATE, {
"status": SEEK,
"keyFrameSeekTime": keyFrameSeekTime
});
}
return;
}
}
loger.log("SEEK->APE", ApeConsts(_apeId), this._recordPlaybackTimestamp, "没有查找到相连的数据");
//this._emit(MessageTypes.RECORD_PLAYBACK_UPDATE,{"status":SEEK,"keyFrameSeek":keyFrameSeek});
}
//查找聊天模块ape关键帧数据,聊天模块比较特殊,消息是累积的,当前时间戳之前的都需要显示
... ... @@ -416,7 +428,7 @@ class RecordPlayBackParse extends Emiter {
if (messageItem) {
//把时间点对应的数据发送,同一秒内有存在多个数据的情况
for (let i = 0; i < messageItem.length; i++) {
this._everSocketMsgReceivedHandler(messageItem[i].byteData,0);
this._everSocketMsgReceivedHandler(messageItem[i].byteData, 0);
}
}
}
... ...
... ... @@ -40,8 +40,8 @@ class Sass extends Emiter {
*/
let url = `http://${_initInfo.portal}/3m/api/meeting/joinParams.do?meetingNumber=${_initInfo.classId}&userID=${_initInfo.userId}`;
loger.log('1.初始化init获取课堂校验信息.');
console.log(url);
console.log(_initInfo);
loger.log(url);
loger.log(_initInfo);
fetch(url, {
timeout: 5000
})
... ... @@ -88,7 +88,7 @@ class Sass extends Emiter {
// Sass校验开始-->密码校验(如果需要密码)--->MD5校验----------------------------------------------------
passwordAndMd5Checking(_param) {
loger.log('2.开始Sass校验');
console.log(_param);
loger.log(_param);
confInfo = _param;
// 密码校验
if (confInfo.passwordRequired === 'true' || confInfo.passwordRequired === true) {
... ... @@ -185,7 +185,7 @@ class Sass extends Emiter {
GlobalConfig.maxAudioChannels=confInfo.maxAudioChannels;
GlobalConfig.maxMediaChannels=confInfo.maxMediaChannels;*/
loger.log('MD5校验完成');
console.log(ret);
loger.log(ret);
this._emit(Sass.SUCCESS, ret);
} else {
loger.log('MD5校验-失败.');
... ... @@ -252,7 +252,7 @@ class Sass extends Emiter {
var authId = MD5(GlobalConfig.classId + "" + timestamp);//课堂号+时间戳 的字符串,转成MD5
let url = `http://${GlobalConfig.portal}/3m/api/meeting/detail.do?meetingNumber=${GlobalConfig.classId}&timestamp=${timestamp}&authId=${authId}`;
loger.log('5.获取课堂课堂的完整信息 ');
console.log(url);
loger.log(url);
fetch(url, {
timeout: 5000
})
... ...
... ... @@ -93,8 +93,7 @@ export default class Ape extends Emiter {
let regItems = regPdu.item;
let regItemSize = regItems.length;
//loger.log(this._session_name + '数据同步消息');
loger.log(this._session_name + '数据同步消息.同步条数', regItemSize,"seekTime->",seekTime);
//loger.log(this._session_name + '数据同步消息.同步条数', regItemSize,"seekTime->",seekTime);
for (var i = 0; i < regItemSize; ++i) {
let regItem = regItems[i];
let regItemType = regItem.type;
... ... @@ -164,8 +163,8 @@ export default class Ape extends Emiter {
let tableUpdateData = pdu['RCRegistryTableUpdateItemPdu'].decode(user_data);
let tableUpdateItems = tableUpdateData.items;
let tableUpdateItemsLen = tableUpdateItems.length;
loger.log("RCRegistryTableUpdateItemPdu " + tableUpdateItemsLen);
console.log(tableUpdateData);
//loger.log("RCRegistryTableUpdateItemPdu " + tableUpdateItemsLen);
loger.log(tableUpdateData);
for (let i = 0; i < tableUpdateItemsLen; ++i) {
let tableItem = tableUpdateItems[i];
... ... @@ -311,7 +310,7 @@ export default class Ape extends Emiter {
send(appPdu) {
loger.log('Ape发送数据NORMAL PDU');
console.log(appPdu);
//console.log(appPdu);
//loger.log('当前的状态============',GlobalConfig.getCurrentStatus().code);
if (GlobalConfig.getCurrentStatus().code == 0 || GlobalConfig.getCurrentStatus().code == 1) {
this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_SEND_FAILED_NO_JOIN);
... ... @@ -337,7 +336,7 @@ export default class Ape extends Emiter {
// 发送当前APE(session uniform包)
sendUniform(appPdu, top) {
loger.log('Ape发送数据UNIFORM PDU');
console.log(appPdu);
//console.log(appPdu);
//loger.log('当前的状态============',GlobalConfig.getCurrentStatus().code);
if (GlobalConfig.getCurrentStatus().code == 0 || GlobalConfig.getCurrentStatus().code == 1) {
this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_SEND_FAILED_NO_JOIN);
... ... @@ -362,7 +361,7 @@ export default class Ape extends Emiter {
sendChatUniform(appPdu, top) {
loger.log('Ape发送数据UNIFORM PDU');
console.log(appPdu);
//console.log(appPdu);
//loger.log('当前的状态============',GlobalConfig.getCurrentStatus().code);
if (GlobalConfig.getCurrentStatus().code == 0 || GlobalConfig.getCurrentStatus().code == 1) {
this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_SEND_FAILED_NO_JOIN);
... ...
... ... @@ -349,7 +349,7 @@ class AudioApe extends Ape {
}
}else {
loger.warn("消息是自己发送的或者是消息无效,不需要处理,消息内容如下:");
console.log(unpackChannelInfo);
loger.log(unpackChannelInfo);
}
this._emit(MessageTypes.AUDIO_UPDATE, unpackChannelInfo);
... ... @@ -376,7 +376,7 @@ class AudioApe extends Ape {
packPduModel.timestamp =_param.timestamp||EngineUtils.creatTimestamp();
packPduModel.fromNodeId = GlobalConfig.nodeId;
packPduModel.toNodeId = 0;
console.log("packPdu",packPduModel);
loger.log("packPdu",packPduModel);
return packPduModel;
}
... ... @@ -388,7 +388,7 @@ class AudioApe extends Ape {
}
try {
let packChannelInfo = pdu['RCAudioChannelInfoPdu'].decode(itemData);
console.log(packChannelInfo);
loger.log(packChannelInfo);
return packChannelInfo;
} catch (err) {
loger.log("unPackPdu error,itemIdx=" + itemIdx + " err:" + err.message);
... ...
... ... @@ -65,11 +65,11 @@ class ChatApe extends Ape {
// if (!(chatSendPdu.isPublic || 0 === chatSendPdu.peer)) {
if (!chatSendPdu.isPublic && 0!=chatSendPdu.peer) {
//发送给制定的人
loger.log('发送私聊消息.');
//loger.log('发送私聊消息.');
this.send(chatSendPdu);
} else {
//发送给所有人
loger.log('发送公聊消息.');
//loger.log('发送公聊消息.');
//this.sendUniform(chatSendPdu);
this.sendChatUniform(chatSendPdu);
}
... ...
... ... @@ -64,7 +64,7 @@ class ConferApe extends Ape {
_joinSessionHandler(_data) {
let nodeInfoRecordPdu = this.mcu.mcuClassInfo.self;
loger.log("_joinSessionHandler nodeInfoRecordPdu=");
console.log(nodeInfoRecordPdu);
loger.log(nodeInfoRecordPdu);
let userDataPdu = new pdu['RCNodeInfoUserDataPdu'];
userDataPdu.qq = '';
userDataPdu.skype = '';
... ... @@ -323,7 +323,7 @@ class ConferApe extends Ape {
itemIdx = ApeConsts.CONFERENCE_OBJ_TABLE_ID;// itemIdx=_param.itemIdx;
let modelPdu = this.packPdu(_param, itemIdx);
//loger.log('sendUpdaterClassStatusInfo----2------');
console.log(modelPdu);
loger.log(modelPdu);
if (modelPdu == null) {
loger.log('sendUpdaterClassStatusInfo,参数错误');
... ... @@ -360,7 +360,7 @@ class ConferApe extends Ape {
adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
adapterPdu.item.push(adapterItemPdu);
console.log("课堂发送更新数据============");
loger.log("课堂发送更新数据============");
this.sendUniform(adapterPdu, true);
}
... ... @@ -420,7 +420,7 @@ class ConferApe extends Ape {
try {
let model = this.unPackPdu(owner, itemIdx, itemData);
loger.log('tableUpdateHandler');
console.log(model);
loger.log(model);
//处理课堂更新的信息
if (model && model.classStatusInfo) {
... ... @@ -478,7 +478,7 @@ class ConferApe extends Ape {
loger.log("onSendConferRecordRequestHandler");
try {
let conferRecordSendPdu = pdu['RCConferenceRecordRequestPdu'].decode(_data);
console.log(conferRecordSendPdu);
loger.log(conferRecordSendPdu);
} catch (err) {
loger.warn("onSendConferRecordRequestHandler err", err.message);
}
... ...
... ... @@ -212,7 +212,7 @@ class DocApe extends Ape {
//切换文档
documentSwitchDoc(paramInfo){
loger.log('切换文档,documentSwitchDoc');
console.log(paramInfo);
loger.log(paramInfo);
if(paramInfo==null||paramInfo.itemIdx==null){
loger.warn('documentSwitch失败,参数错误',paramInfo);
this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
... ... @@ -247,7 +247,7 @@ class DocApe extends Ape {
docDataModel.visible=paramInfo.visible||false;//默认是false
//loger.log('切换文档,当前文档和上一个显示的文档都需要更新状态');
console.log({"oldDoc":oldDocModel,"nowDoc":docDataModel});
loger.log({"oldDoc":oldDocModel,"nowDoc":docDataModel});
//更新当前选择的文档
this.updaterDoc(docDataModel,docDataModel.itemIdx);
... ... @@ -261,7 +261,7 @@ class DocApe extends Ape {
//文档翻页
documentSwitchPage(paramInfo){
loger.log('文档翻页,documentSwitchPage');
console.log(paramInfo);
loger.log(paramInfo);
//console.log(this.docList);
//获取已经存在的数据
let docDataModel= this.docList[paramInfo.itemIdx];
... ... @@ -349,7 +349,7 @@ class DocApe extends Ape {
}
loger.log('tableInsertHandler 发送给客户端');
console.log(itemDataInfo);
loger.log(itemDataInfo);
this._emit(MessageTypes.DOC_UPDATE,itemDataInfo);//用添加和更新都统一DOC_UPDATE
}
... ... @@ -401,7 +401,7 @@ class DocApe extends Ape {
loger.log('tableUpdateHandler 设置当前激活的文档id');
}
loger.log('tableUpdateHandler 发送给客户端');
console.log(itemDataInfo);
loger.log(itemDataInfo);
this._emit(MessageTypes.DOC_UPDATE,itemDataInfo);
}else {
... ... @@ -515,7 +515,7 @@ class DocApe extends Ape {
docModelPdu.md5=_param.md5||"";//MD5
docModelPdu.fileName=_param.fileName||"doc_"+_itemIdx;//文档的名字
docModelPdu.dynamicTS=_param.dynamicTS||"0";//文档上传后返回值中的字段dynamicTransferStatic
console.log(docModelPdu);
loger.log(docModelPdu);
return docModelPdu;
}
... ...
... ... @@ -116,7 +116,7 @@ class MediaModule {
counter++;
}
loger.log("getFreeMediaChannel","maxMediaChannel",this.maxMediaChannel,"counter:",counter);
console.log(this.mediaChannels);
loger.log(this.mediaChannels);
if (counter < this.maxMediaChannel) {
return this.MEDIA_OBJ_TABLE_ID + (counter);
}
... ...
... ... @@ -292,7 +292,7 @@ class VideoApe extends Ape {
}
videoReceivePdu.data = this._rCArrayBufferUtil.uint8ArrayToStr(videoReceivePdu.data, 2);//开头两个字会乱码
loger.log('视频控制消息处理 .',videoReceivePdu);
console.log(videoReceivePdu);
loger.log(videoReceivePdu);
//判断接收者的id,如果不是0,并且也不是自己的nodeId,那么消息不做处理
if (videoReceivePdu.toNodeId != 0 && videoReceivePdu.toNodeId != GlobalConfig.nodeId) {
... ... @@ -353,7 +353,7 @@ class VideoApe extends Ape {
}
}else {
loger.warn("视频消息是自己发送的或者是视频消息无效,不需要处理,消息内容如下:");
console.log(unpackChannelInfo);
loger.log(unpackChannelInfo);
}
... ... @@ -381,7 +381,7 @@ class VideoApe extends Ape {
packPduModel.timestamp =_param.timestamp||0;
packPduModel.fromNodeId = GlobalConfig.nodeId;
packPduModel.toNodeId = 0;
console.log(packPduModel);
loger.log(packPduModel);
return packPduModel;
}
... ... @@ -393,7 +393,7 @@ class VideoApe extends Ape {
}
try {
let videoChannelInfo = pdu['RCVideoChannelInfoPdu'].decode(itemData);
console.log(videoChannelInfo);
loger.log(videoChannelInfo);
return videoChannelInfo;
} catch (err) {
loger.log("unPackPdu error,itemIdx=" + itemIdx + " err:" + err.message);
... ...
... ... @@ -25,12 +25,12 @@ import EngineUtils from 'EngineUtils';
let loger = Loger.getLoger('WhiteBoardApe');
let itemIdx=0;//table插入新数据的计数id,目前用时间戳
const TYPE_BIGHT=0;//任意线段
const TYPE_LINE=1;//直线
const TYPE_RECT=2;//矩形
const TYPE_CIRCLE=3;//圆形
const TYPE_TEXT=4;//文本
let itemIdx = 0;//table插入新数据的计数id,目前用时间戳
const TYPE_BIGHT = 0;//任意线段
const TYPE_LINE = 1;//直线
const TYPE_RECT = 2;//矩形
const TYPE_CIRCLE = 3;//圆形
const TYPE_TEXT = 4;//文本
class WhiteBoardApe extends Ape {
constructor() {
... ... @@ -41,7 +41,7 @@ class WhiteBoardApe extends Ape {
);
// properties
this.annoInfos = {};//储存所有的标注数据
this.insertHistory=[];//添加的白板记录,用于撤回操作
this.insertHistory = [];//添加的白板记录,用于撤回操作
// 白板延迟
// this._apeDelayed = true;
... ... @@ -57,24 +57,24 @@ class WhiteBoardApe extends Ape {
_joinSessionHandler(_data) {
loger.log("RCPDU_SESSION_JOIN_RESPONSE");
this.insertHistory=[];
this.insertHistory = [];
}
/////////////发送数据操作//////////////////////////////////////////////////////
// 添加标注,发送信息
sendInsetAnnotaion(_param){
if(_param==null||EngineUtils.isEmptyObject(_param)){
sendInsetAnnotaion(_param) {
if (_param == null || EngineUtils.isEmptyObject(_param)) {
loger.log('sendInsetAnnotaion失败,参数错误');
this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
return ;
this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
return;
}
itemIdx=EngineUtils.creatSoleNumberFromTimestamp();
let whiteBoardModelPdu = this.packPdu(_param,itemIdx);
if(whiteBoardModelPdu==null){
itemIdx = EngineUtils.creatSoleNumberFromTimestamp();
let whiteBoardModelPdu = this.packPdu(_param, itemIdx);
if (whiteBoardModelPdu == null) {
loger.log('sendInsetAnnotaion失败,参数错误');
this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
return ;
this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
return;
}
//console.log(whiteBoardModelPdu);
... ... @@ -82,10 +82,10 @@ class WhiteBoardApe extends Ape {
this.insertHistory.push(whiteBoardModelPdu);
let tableItemPdu = new pdu['RCRegistryTableItemPdu'];
tableItemPdu.itemIdx=itemIdx;//直接用时间戳作为id
tableItemPdu.registerObjId=ApeConsts.WHITEBOARD_OBJ_TABLE_ID;
tableItemPdu.itemIdx = itemIdx;//直接用时间戳作为id
tableItemPdu.registerObjId = ApeConsts.WHITEBOARD_OBJ_TABLE_ID;
tableItemPdu.owner = 0;//收到flash的是这个值,不清楚先写固定
tableItemPdu.itemData =whiteBoardModelPdu.toArrayBuffer();
tableItemPdu.itemData = whiteBoardModelPdu.toArrayBuffer();
//insert
let tableInsertItemPdu = new pdu['RCRegistryTableInsertItemPdu'];
... ... @@ -108,39 +108,42 @@ class WhiteBoardApe extends Ape {
adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
adapterPdu.item.push(adapterItemPdu);
console.log("添加白板数据=====itemIdx="+tableItemPdu.itemIdx);
this.sendUniform(adapterPdu,true);
loger.log("添加白板数据=====itemIdx=" + tableItemPdu.itemIdx);
this.sendUniform(adapterPdu, true);
}
//撤销上一步
sendGotoPrev(){
sendGotoPrev() {
loger.log("白板返回上一步");
if(this.insertHistory==null||this.insertHistory.length<1){
if (this.insertHistory == null || this.insertHistory.length < 1) {
loger.warn("无法继续上一步操作,已经没有可以撤销的数据");
return;
}
console.log(this.insertHistory);
//loger.log(this.insertHistory);
this.sendDeleteAnnotaion(this.insertHistory.pop());
}
//删除当前页码的所有标注
sendDeleteCurPageAnnotation(_param){
for (let key in this.annoInfos){
let item=this.annoInfos[key];
if(item&&item.parentId==GlobalConfig.activeDocId&&item.curPageNo==GlobalConfig.activeDocCurPage){
loger.log("sendDeleteCurPageAnnotation 删除当前页面上的标注",key);
this.sendDeleteAnnotaion({"itemIdx":key});
sendDeleteCurPageAnnotation(_param) {
for (let key in this.annoInfos) {
let item = this.annoInfos[key];
if (item && item.parentId == GlobalConfig.activeDocId && item.curPageNo == GlobalConfig.activeDocCurPage) {
loger.log("sendDeleteCurPageAnnotation 删除当前页面上的标注", key);
this.sendDeleteAnnotaion({"itemIdx": key});
}
}
}
//删除所有标注
sendDeleteAllAnnotation(_param){
for (let key in this.annoInfos){
this.sendDeleteAnnotaion({"itemIdx":key});
sendDeleteAllAnnotation(_param) {
for (let key in this.annoInfos) {
this.sendDeleteAnnotaion({"itemIdx": key});
}
}
//删除标注,发送信息
sendDeleteAnnotaion(_param){
if(_param==null){
sendDeleteAnnotaion(_param) {
if (_param == null) {
loger.warn("要删除的数据不存在");
return;
}
... ... @@ -149,7 +152,7 @@ class WhiteBoardApe extends Ape {
//optional RCPduType_E type = 1 [default = RCPDU_REG_TABLE_DELETE_PDU];
// repeated uint32 item_idx = 2;
tableDeleteItemPdu.type = pdu.RCPDU_REG_TABLE_DELETE_PDU;//
tableDeleteItemPdu.itemIdx=parseInt(_param.itemIdx);//这里需要设置要删除的数据的itemIdx,每条数据的这个id都不一样
tableDeleteItemPdu.itemIdx = parseInt(_param.itemIdx);//这里需要设置要删除的数据的itemIdx,每条数据的这个id都不一样
let updateObjPdu = new pdu['RCRegistryUpdateObjPdu'];
updateObjPdu.objId = ApeConsts.WHITEBOARD_OBJ_TABLE_ID;
... ... @@ -165,33 +168,33 @@ class WhiteBoardApe extends Ape {
adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
adapterPdu.item.push(adapterItemPdu);
console.log("白板发送删除数据============="+tableDeleteItemPdu.itemIdx);
this.sendUniform(adapterPdu,true);
loger.log("白板发送删除数据=============" + tableDeleteItemPdu.itemIdx);
this.sendUniform(adapterPdu, true);
}
//更新标注
sendUpdaterAnnotaion(_param){
if(_param==null||EngineUtils.isEmptyObject(_param)){
sendUpdaterAnnotaion(_param) {
if (_param == null || EngineUtils.isEmptyObject(_param)) {
loger.log('sendUpdaterAnnotaion失败,参数错误');
this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
return ;
this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
return;
}
itemIdx=_param.itemIdx;
let whiteBoardModelPdu = this.packPdu(_param,itemIdx);
itemIdx = _param.itemIdx;
let whiteBoardModelPdu = this.packPdu(_param, itemIdx);
//console.log(whiteBoardModelPdu);
if(whiteBoardModelPdu==null){
if (whiteBoardModelPdu == null) {
loger.log('sendInsetAnnotaion失败,参数错误');
this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
return ;
this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
return;
}
let tableItemPdu = new pdu['RCRegistryTableItemPdu'];
tableItemPdu.itemIdx=itemIdx;
tableItemPdu.itemIdx = itemIdx;
tableItemPdu.owner = 0;//收到flash的是这个值,不清楚先写固定
tableItemPdu.registerObjId=ApeConsts.WHITEBOARD_OBJ_TABLE_ID;
tableItemPdu.itemData =whiteBoardModelPdu.toArrayBuffer();
tableItemPdu.registerObjId = ApeConsts.WHITEBOARD_OBJ_TABLE_ID;
tableItemPdu.itemData = whiteBoardModelPdu.toArrayBuffer();
//updater
... ... @@ -216,50 +219,42 @@ class WhiteBoardApe extends Ape {
adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
adapterPdu.item.push(adapterItemPdu);
console.log("白板发送更新数据===============22");
this.sendUniform(adapterPdu,true);
loger.log("白板发送更新数据===============22");
this.sendUniform(adapterPdu, true);
}
/////收到消息处理/////////////////////////////////////////////////////////////////////////////////
/* whiteboardMsgComingHandler(_data) {
//flash RCConferenceSendDataRequestPdu
//loger.warn('whiteboardMsgComingHandler needs to be handled.');
//const recordInfo = pdu['RCWhiteboardDataRequestPdu'].decode(pdu);
//loger.log("whiteboardMsgComingHandler",recordInfo);
let receiveInfo = pdu['RCConferenceSendDataRequestPdu'].decode(_data);
loger.log("whiteboardMsgComingHandler",receiveInfo);
}*/
tableInsertHandler(owner, itemIdx,itemData) {
let whiteBoardModel=this.unPackPdu(owner, itemIdx,itemData);
tableInsertHandler(owner, itemIdx, itemData) {
let whiteBoardModel = this.unPackPdu(owner, itemIdx, itemData);
loger.log('tableInsertHandler');
console.log(whiteBoardModel);
if(whiteBoardModel){
if(GlobalConfig.activeDocId==whiteBoardModel.parentId&&GlobalConfig.activeDocCurPage==whiteBoardModel.curPageNo){
loger.log('WHITEBOARD_ANNOTAION_INSERT 显示到界面上',whiteBoardModel);
loger.log(whiteBoardModel);
if (whiteBoardModel) {
if (GlobalConfig.activeDocId == whiteBoardModel.parentId && GlobalConfig.activeDocCurPage == whiteBoardModel.curPageNo) {
loger.log('WHITEBOARD_ANNOTAION_INSERT 显示到界面上', whiteBoardModel);
//this._emit(MessageTypes.WHITEBOARD_ANNOTAION_INSERT,whiteBoardModel);
this.insertAandShowAnnotaion(whiteBoardModel);
}
}
}
tableUpdateHandler(owner, itemIdx, itemData) {
let whiteBoardModel=this.unPackPdu(owner, itemIdx,itemData);
let whiteBoardModel = this.unPackPdu(owner, itemIdx, itemData);
loger.log('tableUpdateHandler');
console.log(whiteBoardModel);
if(whiteBoardModel&&whiteBoardModel.parentId==GlobalConfig.activeDocId&&whiteBoardModel.curPageNo==GlobalConfig.activeDocCurPage){
loger.log(whiteBoardModel);
if (whiteBoardModel && whiteBoardModel.parentId == GlobalConfig.activeDocId && whiteBoardModel.curPageNo == GlobalConfig.activeDocCurPage) {
this.updateAandShowAnnotaion();
}
}
tableDeleteHandler(object_id, tableDeleteData){
tableDeleteHandler(object_id, tableDeleteData) {
// console.log("白板收到数据,tableDeleteHandler object_id="+object_id);//((18<< 16) + 1)=1179649
loger.log('tableDeleteHandler',object_id,tableDeleteData);//["tableDeleteHandler",1179649,{"type":231,"itemIdx":[1486301768]}]
if(tableDeleteData&&tableDeleteData.itemIdx){
let len=tableDeleteData.itemIdx.length;
let itemIdxs=tableDeleteData.itemIdx;
for (let i=0;i<len;i++){
if(this.annoInfos[itemIdxs[i]]){
loger.log("删除白板数据:",itemIdxs[i]);
loger.log('tableDeleteHandler', object_id, tableDeleteData);//["tableDeleteHandler",1179649,{"type":231,"itemIdx":[1486301768]}]
if (tableDeleteData && tableDeleteData.itemIdx) {
let len = tableDeleteData.itemIdx.length;
let itemIdxs = tableDeleteData.itemIdx;
for (let i = 0; i < len; i++) {
if (this.annoInfos[itemIdxs[i]]) {
loger.log("删除白板数据:", itemIdxs[i]);
//this._emit(MessageTypes.WHITEBOARD_ANNOTAION_DELETE,{ "itemIdx":itemIdxs[i]});
delete this.annoInfos[itemIdxs[i]];
}
... ... @@ -267,79 +262,72 @@ class WhiteBoardApe extends Ape {
}
this.updateAandShowAnnotaion();
}
//文档更新,白板也要更新
docUpdateHandler(_data){
docUpdateHandler(_data) {
loger.log("白板收到文档更新的消息docUpdateHandler");
console.log(_data);
loger.log(_data);
//如果切换了文档或翻页,清除之前的添加步骤记录
if(_data.action==ApeConsts.DOC_ACTION_SWITCH_DOC||_data.action==ApeConsts.DOC_ACTION_SWITCH_PAGE){
this.insertHistory=[];
if (_data.action == ApeConsts.DOC_ACTION_SWITCH_DOC || _data.action == ApeConsts.DOC_ACTION_SWITCH_PAGE) {
this.insertHistory = [];
}
this.updateAandShowAnnotaion();
}
//删除白板数据
docDeleteHandler(_parentId){
loger.log("白板收到文档删除的消息docDeleteHandler",_parentId);
for (let key in this.annoInfos){
let item=this.annoInfos[key];
if(item&&item.parentId==_parentId){
loger.log("文档删除,白板数据也删除,itemIdx:"+key,"_parentId:",_parentId);
this.sendDeleteAnnotaion({"itemIdx":key});
docDeleteHandler(_parentId) {
loger.log("白板收到文档删除的消息docDeleteHandler", _parentId);
for (let key in this.annoInfos) {
let item = this.annoInfos[key];
if (item && item.parentId == _parentId) {
loger.log("文档删除,白板数据也删除,itemIdx:" + key, "_parentId:", _parentId);
this.sendDeleteAnnotaion({"itemIdx": key});
}
}
}
//增量添加标注
insertAandShowAnnotaion(_item){
let annotaionItems=[_item];
var updateObj={
"isFresh":false,
"annotaionItems":annotaionItems
insertAandShowAnnotaion(_item) {
let annotaionItems = [_item];
var updateObj = {
"isFresh": false,
"annotaionItems": annotaionItems
};
loger.log("WHITEBOARD_ANNOTATION_UPDATE",annotaionItems.length);
this._emit(MessageTypes.WHITEBOARD_ANNOTATION_UPDATE,updateObj);
loger.log("WHITEBOARD_ANNOTATION_UPDATE", annotaionItems.length);
this._emit(MessageTypes.WHITEBOARD_ANNOTATION_UPDATE, updateObj);
}
//整体更新并且显示标注
updateAandShowAnnotaion(){
let annotaionItems=[];
for (let key in this.annoInfos){
let item=this.annoInfos[key];
if(item&&item.parentId==GlobalConfig.activeDocId&&item.curPageNo==GlobalConfig.activeDocCurPage){
updateAandShowAnnotaion() {
let annotaionItems = [];
for (let key in this.annoInfos) {
let item = this.annoInfos[key];
if (item && item.parentId == GlobalConfig.activeDocId && item.curPageNo == GlobalConfig.activeDocCurPage) {
annotaionItems.push(item);
loger.log("显示和文档对应的白板数据docUpdateHandler itemIdx:",item.itemIdx,"doc itemIdx:",GlobalConfig.activeDocId,"curPageNo:",GlobalConfig.activeDocCurPage);
}else{
loger.log("显示和文档对应的白板数据docUpdateHandler itemIdx:", item.itemIdx, "doc itemIdx:", GlobalConfig.activeDocId, "curPageNo:", GlobalConfig.activeDocCurPage);
} else {
//loger.log("不显示白板数据docUpdateHandler",item);
}
}
var updateObj={
"isFresh":true,
"annotaionItems":annotaionItems
var updateObj = {
"isFresh": true,
"annotaionItems": annotaionItems
};
loger.log("WHITEBOARD_ANNOTATION_UPDATE",annotaionItems.length);
this._emit(MessageTypes.WHITEBOARD_ANNOTATION_UPDATE,updateObj);
loger.log("WHITEBOARD_ANNOTATION_UPDATE", annotaionItems.length);
this._emit(MessageTypes.WHITEBOARD_ANNOTATION_UPDATE, updateObj);
}
///////白板数据的封包和解包/////////////////////////////////////////
packPdu(_param,_itemIdx){
/* required uint32 type= 1;//白板类型
required uint32 id= 2;//id 每一次绘制的唯一标识
required uint32 initiator=3; //绘制来自谁
optional string pointGroup=4; //坐标点集数组的JSON字符串
optional string color= 5 [default = "#000000"]; //颜色
optional uint32 thickness= 6 ;//线条粗细
optional uint32 radius= 7;//园的半径
optional uint32 fontSize= 8;//字体大小
optional uint32 fontName= 9;//字体名称
optional uint32 text= 10;//文本内容*/
packPdu(_param, _itemIdx) {
//验证坐标点集合数组是否合法
if(_param.pointGroup==null||_param.pointGroup.length<1){
this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
if (_param.pointGroup == null || _param.pointGroup.length < 1) {
this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
return null;
}
//判断type类型,根据type设置不同的参数
let whiteBoardModelPdu =new pdu['RCWhiteBoardDataModelPdu'];
switch (_param.type){
let whiteBoardModelPdu = new pdu['RCWhiteBoardDataModelPdu'];
switch (_param.type) {
case TYPE_BIGHT:
break;
case TYPE_LINE:
... ... @@ -347,12 +335,12 @@ class WhiteBoardApe extends Ape {
case TYPE_RECT:
break;
case TYPE_CIRCLE:
whiteBoardModelPdu.radius=parseInt(_param.radius);
whiteBoardModelPdu.radius = parseInt(_param.radius);
break;
case TYPE_TEXT:
whiteBoardModelPdu.fontSize=parseInt(_param.fontSize);
whiteBoardModelPdu.fontName=_param.fontName||null;
whiteBoardModelPdu.text=_param.text||null;
whiteBoardModelPdu.fontSize = parseInt(_param.fontSize);
whiteBoardModelPdu.fontName = _param.fontName || null;
whiteBoardModelPdu.text = _param.text || null;
break;
default:
//其它类型不做处理
... ... @@ -360,33 +348,34 @@ class WhiteBoardApe extends Ape {
break;
}
//下面4个是必须的参数
whiteBoardModelPdu.type =_param.type;
whiteBoardModelPdu.itemIdx =_itemIdx;
whiteBoardModelPdu.initiator =GlobalConfig.nodeId;
whiteBoardModelPdu.type = _param.type;
whiteBoardModelPdu.itemIdx = _itemIdx;
whiteBoardModelPdu.initiator = GlobalConfig.nodeId;
/* whiteBoardModelPdu.parentId=_param.parentId||0;
whiteBoardModelPdu.curPage=_param.curPage||1;*/
whiteBoardModelPdu.parentId=GlobalConfig.activeDocId;//当前激活的文档id
whiteBoardModelPdu.curPageNo=GlobalConfig.activeDocCurPage;//当前激活的文档页码
whiteBoardModelPdu.parentId = GlobalConfig.activeDocId;//当前激活的文档id
whiteBoardModelPdu.curPageNo = GlobalConfig.activeDocCurPage;//当前激活的文档页码
whiteBoardModelPdu.pointGroup =EngineUtils.arrayToJsonString(_param.pointGroup);
whiteBoardModelPdu.color=_param.color||"#000000";
whiteBoardModelPdu.pointGroup = EngineUtils.arrayToJsonString(_param.pointGroup);
whiteBoardModelPdu.color = _param.color || "#000000";
return whiteBoardModelPdu;
}
unPackPdu(owner, itemIdx,itemData){
try{
unPackPdu(owner, itemIdx, itemData) {
try {
loger.log("白板收到数据===unPackPdu ");
let whiteBoardModelPdu= pdu['RCWhiteBoardDataModelPdu'].decode(itemData);
let whiteBoardModelPdu = pdu['RCWhiteBoardDataModelPdu'].decode(itemData);
//console.log(whiteBoardModelPdu);
//loger.log(whiteBoardModelPdu);
let _pointGroup= EngineUtils.arrayFromJsonString(whiteBoardModelPdu.pointGroup);
whiteBoardModelPdu.pointGroup=_pointGroup;
let _pointGroup = EngineUtils.arrayFromJsonString(whiteBoardModelPdu.pointGroup);
whiteBoardModelPdu.pointGroup = _pointGroup;
this.annoInfos[itemIdx] = whiteBoardModelPdu;
return whiteBoardModelPdu;
}catch (err){
console.log("unPackPdu Pdu解析错误,itemIdx="+itemIdx+" err:"+err.message);
} catch (err) {
loger.log("unPackPdu Pdu解析错误,itemIdx=" + itemIdx + " err:" + err.message);
}
return null;
}
... ...
... ... @@ -46,7 +46,7 @@ class MCU extends Emiter {
_sendJoinClassRequest(){
//const classInfo = this.classInfo;
loger.log('MCU-发送加入课堂请求.');
console.log(this.classInfo);
loger.log(this.classInfo);
var descriptorPdu = new pdu['RCConferenceDescriptorPdu'];
descriptorPdu.id = this.classInfo.classId;
descriptorPdu.name = this.classInfo.className||"";
... ... @@ -132,7 +132,7 @@ class MCU extends Emiter {
// let _mcuConfDesc=new pdu['RCConferenceDescriptorPdu'].decode(mcuConfDesc);
loger.log('_updateMCUConfInfoDescription.');
//let classDescription=new pdu['RCConferenceDescriptorPdu'].decode(_data);
console.log(_data);
loger.log(_data);
//let info = this.mcuClassInfo.info;
//info._conference_name = ArrayBufferUtil.uint8ArrayToStr(mcuConfDesc.name, 0);
//info._capacity = mcuConfDesc.capacity;
... ... @@ -170,7 +170,7 @@ class MCU extends Emiter {
// 主动建立MCU连接
joinMCU(_classInfo) {
loger.log('开始建立EverSocket通道.');
console.log(_classInfo);
loger.log(_classInfo);
_classInfo.classId = parseInt(_classInfo.classId); // classId 必须整形
this.classInfo = _classInfo;
// 创建刷新nodeId
... ...