AlexWang

增加音频共享接口

... ... @@ -60,10 +60,10 @@ export default class MessageEntrance extends Emiter {
this.sdkInfo = _sdkInfo;
loger.warn(this.sdkInfo);
//检查是否是移动端
GlobalConfig.isMobile=mdetect.isMobileUA();
if( GlobalConfig.isMobile){
GlobalConfig.isMobile = mdetect.isMobileUA();
if (GlobalConfig.isMobile) {
loger.warn("当前设备是移动设备");
}else {
} else {
loger.warn("当前设备是PC");
}
... ... @@ -89,6 +89,7 @@ export default class MessageEntrance extends Emiter {
_sass.on(_sass.CLASS_SAVE_RECORD_INFO_SUCCESS, this._sassSaveClassRecordInfoSuccessHandler.bind(this)); //保存课堂录制信息
_sass.on(_sass.DELETE_DOCUMENT_SUCCESS, this._sassDeleteDocumentSuccess.bind(this)); //sass删除文档成功
_sass.on(_sass.DELETE_MEDIASHARE_SUCCESS, this._sassDeleteMediaShareSuccess.bind(this)); //sass删除媒体文件成功
_sass.on(_sass.DELETE_MUSICSHARE_SUCCESS, this._sassDeleteMusicShareSuccess.bind(this)); //sass删除MUSIC文件成功
//选点模块
_ipManager = new IpManager();
... ... @@ -234,6 +235,10 @@ export default class MessageEntrance extends Emiter {
this.mediaSharedStop = this._sendMediaSharedStop.bind(this); //停止
this.mediaSharedUpdate = this._sendMediaSharedUpdate.bind(this); //更新媒体的状态
//音频共享模块
this.musicSharedUpload = this._sendMusicSharedUpload.bind(this); //上传
this.musicSharedDelete = this._sassDeletMusicShare.bind(this); //删除,先通过Sass删除,删除成功之后才删除MCU的
this.musicSharedPlay = this._sendMusicSharedPlay.bind(this); //Music播放
this.musicSharedStop = this._sendMusicSharedStop.bind(this); //Music停止
this.musicSharedUpdate = this._sendMusicSharedUpdate.bind(this); //Music更新媒体的状态
... ... @@ -720,10 +725,10 @@ export default class MessageEntrance extends Emiter {
loger.log('加入课堂->.');
loger.warn("课堂服务信息->");
loger.warn('MCU服务器地址->mcu->',GlobalConfig.MCUServerIP, GlobalConfig.MCUServerPort);
loger.warn('MCU服务器地址->mcu->', GlobalConfig.MCUServerIP, GlobalConfig.MCUServerPort);
loger.warn('推流地址->MS->', GlobalConfig.MS_PUBLISH_IP, GlobalConfig.MS_PUBLISH_PORT);
loger.warn('RTMP播流地址->RTMP->',GlobalConfig.MS_PLAY_RTMP_IP, GlobalConfig.MS_PLAY_RTMP_PORT);
loger.warn('HLS播流地址->HLS->',GlobalConfig.MS_PLAY_HLS_IP, GlobalConfig.MS_PLAY_HLS_PORT);
loger.warn('RTMP播流地址->RTMP->', GlobalConfig.MS_PLAY_RTMP_IP, GlobalConfig.MS_PLAY_RTMP_PORT);
loger.warn('HLS播流地址->HLS->', GlobalConfig.MS_PLAY_HLS_IP, GlobalConfig.MS_PLAY_HLS_PORT);
if (_mcu) {
_mcu.joinMCU(GlobalConfig.getClassInfo());
... ... @@ -800,7 +805,7 @@ export default class MessageEntrance extends Emiter {
joinClassSuccessCallBackData.ssTunnelAppURL = GlobalConfig.ssTunnelAppURL;
joinClassSuccessCallBackData.currentSceneTableId = GlobalConfig.currentSceneTableId; //文档区域的模块显示
joinClassSuccessCallBackData.serverAndLoacTimeDistanc=GlobalConfig.serverAndLoacTimeDistanc;
joinClassSuccessCallBackData.serverAndLoacTimeDistanc = GlobalConfig.serverAndLoacTimeDistanc;
loger.log('加入课堂成功->');
loger.log(joinClassSuccessCallBackData);
... ... @@ -946,11 +951,17 @@ export default class MessageEntrance extends Emiter {
loger.log('删除文档成功->', _param);
this._sendDocumentDelete(_param);
}
_sassDeleteMediaShareSuccess(_param) {
loger.log('删除媒体文件成功->', _param);
this._sendMediaSharedDelete(_param);
}
_sassDeleteMusicShareSuccess(_param) {
loger.log('删除Music文件成功->', _param);
this._sendMusicSharedDelete(_param);
}
//ConferApe
//开始上课
_sendStartClass(_param) {
... ... @@ -1189,7 +1200,7 @@ export default class MessageEntrance extends Emiter {
// if(GlobalConfig.classType==ApeConsts.CLASS_TYPE_2&&GlobalConfig.videoCDNAddrList.length>0){
//20170629-直播课堂和移动端设备的时候支持
if(GlobalConfig.classType==ApeConsts.CLASS_TYPE_2||GlobalConfig.isMobile){
if (GlobalConfig.classType == ApeConsts.CLASS_TYPE_2 || GlobalConfig.isMobile) {
if (GlobalConfig.videoCDNAddrList.length > 0) {
//videoCDNAddrList中rtmppush和hls是混在一起的,需要分离开;
let listLen = GlobalConfig.videoCDNAddrList.length;
... ... @@ -1210,9 +1221,9 @@ export default class MessageEntrance extends Emiter {
}
}
} else {
loger.error('videoCDNAddr数据无效->',GlobalConfig.videoCDNAddr);
loger.error('videoCDNAddr数据无效->', GlobalConfig.videoCDNAddr);
}
}else {
} else {
loger.warn('非直播课堂或不是移动端->不需要videoCDN加速');
}
... ... @@ -1675,7 +1686,33 @@ export default class MessageEntrance extends Emiter {
}
}
//删除
// 删除Music
_sassDeletMusicShare(_param) {
if (!_mcu.connected) {
loger.warn(GlobalConfig.getCurrentStatus());
return;
}
//判断传入的参数是否存在
if (_param == null || EngineUtils.isEmptyObject(_param)) {
loger.error('删除媒体文件失败->参数错误', _param);
this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_MUSICSHARE_DELETE_FAILED_PARAM);
return;
}
//判断必要的参数字段值
if (_param.itemIdx == null || isNaN(_param.itemIdx) || _param.fileId == null || _param.fileId == "") {
loger.error('删除媒体文件失败->', _param);
this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_MUSICSHARE_DELETE_FAILED_PARAM);
return;
}
loger.log('删除媒体文件->', _param);
if (_sass) {
_sass.sassDeletMusicShare(_param);
}
}
//删除媒体
_sendMediaSharedDelete(_param) {
if (!_mcu.connected) {
loger.warn(GlobalConfig.getCurrentStatus());
... ... @@ -1686,6 +1723,17 @@ export default class MessageEntrance extends Emiter {
}
}
//删除媒体
_sendMusicSharedDelete(_param) {
if (!_mcu.connected) {
loger.warn(GlobalConfig.getCurrentStatus());
return;
}
if (_musicShareApe) {
_musicShareApe.musicSharedDelete(_param);
}
}
//音乐更新
_sendMusicSharedUpdate(_param) {
if (!_mcu.connected) {
... ... @@ -1934,7 +1982,7 @@ export default class MessageEntrance extends Emiter {
joinClassSuccessCallBackData.ssTunnelAppURL = GlobalConfig.ssTunnelAppURL;
joinClassSuccessCallBackData.currentSceneTableId = GlobalConfig.currentSceneTableId; //文档区域的模块显示
joinClassSuccessCallBackData.serverAndLoacTimeDistanc=GlobalConfig.serverAndLoacTimeDistanc;
joinClassSuccessCallBackData.serverAndLoacTimeDistanc = GlobalConfig.serverAndLoacTimeDistanc;
loger.log(joinClassSuccessCallBackData);
//和加入课堂成功使用同样的消息处理
this._emit(MessageTypes.CLASS_JOIN_SUCCESS, joinClassSuccessCallBackData);
... ...
... ... @@ -89,6 +89,10 @@ MessageTypes.DOC_BROADCAST = "doc_broadcast"; //
MessageTypes.MEDIA_SHARED_DELETE = "media_shared_delete"; //删除媒体文件
MessageTypes.MEDIA_SHARED_UPDATE = "media_shared_update"; //更新媒体文件(添加、变更)
//音频共享
MessageTypes.MUSIC_SHARED_DELETE = "music_shared_delete"; //删除音频文件
MessageTypes.MUSIC_SHARED_UPDATE = "music_shared_update"; //更新音频文件(添加、变更)
//答题卡和点名共用
MessageTypes.START_ANSWER_QUESTION = "start_answer_question"; //开始答题
MessageTypes.UPDATE_ANSWER_QUESTION = "update_answer_question"; //更新答题数据
... ... @@ -151,6 +155,10 @@ MessageTypes.ERR_SDK_FAILED = 700; // sdk还没初始化
MessageTypes.ERR_INTERFACE_NONE = 701; //调用的接口不存在
MessageTypes.ERR_INTERFACE_PARAMS_ERROR = 702; //调用的接口,传递的参数不正确
//音频共享
MessageTypes.ERR_MUSICSHARE_DELETE_FAILED = 720; //删除媒体共享文件失败
MessageTypes.ERR_MUSICSHARE_DELETE_FAILED_PARAM = 721; //删除媒体共享文件,参数错误
MessageTypes.ERR_INIT_RECORD_PLAY_BACK_FAILED = 910; //初始化录制回放失败
MessageTypes.ERR_GET_RECORD_PLAY_BACK_DATA_FAILED = 911; //获取录制回放数据失败
... ...
... ... @@ -234,7 +234,7 @@ class Sass extends Emiter {
meetingNumber String 课堂号 对应的是classId
*/
var timestamp = new Date().getTime();
var authId = MD5(GlobalConfig.classId + "" + timestamp);//课堂号+时间戳 的字符串,转成MD5
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.获取课堂课堂的完整信息 ');
loger.log(url);
... ... @@ -279,12 +279,12 @@ class Sass extends Emiter {
0 成功, 1 验证信息错误
*/
sassDeleteDocument(_param) {
if(GlobalConfig.isRecordPlayBack){
if (GlobalConfig.isRecordPlayBack) {
loger.log('录制回放中,能删除文档');
return;
}
var timestamp = new Date().getTime();
var authId = MD5(_param.docId + "" + _param.classId + "" + timestamp);// docId+classId+timestamp的字符串,转成MD5
var authId = MD5(_param.docId + "" + _param.classId + "" + timestamp); // docId+classId+timestamp的字符串,转成MD5
let url = `http://${GlobalConfig.portal}/3m/api/document/deleteRelation.do?docId=${_param.docId}&classId=${GlobalConfig.classId}&timestamp=${timestamp}&authId=${authId}`;
loger.log('sassDeleteDocument', url);
... ... @@ -316,14 +316,55 @@ class Sass extends Emiter {
});
}
//删除Music共享文件
sassDeletMusicShare(_param) {
if (GlobalConfig.isRecordPlayBack) {
loger.log('录制回放中,能删除文件');
return;
}
console.warn('删除Music共享实现...');
var timestamp = new Date().getTime();
var authId = MD5(_param.fileId + "" + _param.classId + "" + timestamp); // docId+classId+timestamp的字符串,转成MD5
let url = `http://${GlobalConfig.portal}/3m/api/media/deleteRelation.do?mediaId=${_param.fileId}&classId=${GlobalConfig.classId}&timestamp=${timestamp}&authId=${authId}`;
loger.log('删除媒体共享文件', url);
fetch(url, {
timeout: 5000
})
.then(ret => {
if (ret.ok) {
return ret.json();
} else {
loger.error(`删除媒体共享文件-网络异常.状态码:${ret.status}`);
this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_MUSICSHARE_DELETE_FAILED);
throw '';
}
})
.then(ret => {
//code 0 成功, 1 验证信息错误
if (ret.code === 0) {
loger.log('删除媒体共享文件 完成');
this._emit(Sass.DELETE_MUSICSHARE_SUCCESS, _param);
} else {
loger.warn('删除媒体共享文件 失败.');
this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_MUSICSHARE_DELETE_FAILED);
}
})
.catch(err => {
loger.error(`删除媒体共享文件-异常.状态码:${err}`);
this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_MUSICSHARE_DELETE_FAILED);
});
}
//删除媒体共享文件
sassDeletMediaShare(_param) {
if(GlobalConfig.isRecordPlayBack){
if (GlobalConfig.isRecordPlayBack) {
loger.log('录制回放中,能删除文件');
return;
}
var timestamp = new Date().getTime();
var authId = MD5(_param.fileId + "" + _param.classId + "" + timestamp);// docId+classId+timestamp的字符串,转成MD5
var authId = MD5(_param.fileId + "" + _param.classId + "" + timestamp); // docId+classId+timestamp的字符串,转成MD5
let url = `http://${GlobalConfig.portal}/3m/api/sharedMedia/deleteRelation.do?fileId=${_param.fileId}&classId=${GlobalConfig.classId}&timestamp=${timestamp}&authId=${authId}`;
loger.log('删除媒体共享文件', url);
... ... @@ -356,7 +397,6 @@ class Sass extends Emiter {
});
}
//保存课堂的当前信息-----------------------------------------------------
/*保存课堂的当前信息,首次是插入,后面是更新
/api/meeting/saveInfo.do
... ... @@ -370,13 +410,13 @@ class Sass extends Emiter {
code 0 成功 1 课堂号为空 2 无效的课堂号 3 验证信息错误*/
saveClassStatusInfo(_param) {
if(GlobalConfig.isRecordPlayBack){
if (GlobalConfig.isRecordPlayBack) {
loger.log('录制回放中,不需要保存课堂信息');
return;
}
//{"classStatusInfo":classStatusInfo}
var timestamp = new Date().getTime();
var authId = MD5(GlobalConfig.classId + "" + timestamp);// (classId+timestamp)的字符串,转成MD5
var authId = MD5(GlobalConfig.classId + "" + timestamp); // (classId+timestamp)的字符串,转成MD5
let classStatusInfo = JSON.stringify(_param.classStatusInfo);
let url = `http://${GlobalConfig.portal}/3m/api/meeting/saveInfo.do`;
loger.log('saveClassStatusInfo', url);
... ... @@ -420,7 +460,7 @@ class Sass extends Emiter {
//保存录制的信息,主要是录制文件的名称,必须和MCU录制的文件名相同
saveClassRecordContrlInfo(_param) {
if(GlobalConfig.isRecordPlayBack){
if (GlobalConfig.isRecordPlayBack) {
loger.log('录制回放中,不需要保存');
return;
}
... ... @@ -445,7 +485,7 @@ class Sass extends Emiter {
let url = `http://${GlobalConfig.portal}/3m/recordingMeeting/insertRecordingMeeting.do`;
loger.log('saveClassRecordContrlInfo', url);
fetch( encodeURI(url), {
fetch(encodeURI(url), {
method: 'POST',
headers: {
"Content-Type": "application/x-www-form-urlencoded"
... ... @@ -475,11 +515,10 @@ class Sass extends Emiter {
});
}
//答题卡-------------------------------------------------------
//创建答题数据
creatQuestion(_param){
if(GlobalConfig.isRecordPlayBack){
creatQuestion(_param) {
if (GlobalConfig.isRecordPlayBack) {
loger.log('录制回放中->创建答题数据->不做操作');
return;
}
... ... @@ -491,17 +530,17 @@ class Sass extends Emiter {
"options": {},//选项数组,没有就传[]
"option": []//学生选择的答案,没有就传[]
}*/
if(!_param){
loger.warn('创建答题数据->参数错误->param:',_param);
if (!_param) {
loger.warn('创建答题数据->参数错误->param:', _param);
this._emit(Sass.SASS_CREAT_QUESTION_FAILED);
return;
}
let classId=GlobalConfig.classId;//课堂号
let classId = GlobalConfig.classId; //课堂号
var timestamp = new Date().getTime();
let authId = MD5(classId+""+timestamp);
let authId = MD5(classId + "" + timestamp);
let type = parseInt(_param.type);//1单选,2多选,3判断,4点名
let content =_param.content||"";
let type = parseInt(_param.type); //1单选,2多选,3判断,4点名
let content = _param.content || "";
let timeLimit = parseInt(_param.timeLimit);
let correct = _param.correct.toString();
let options = JSON.stringify(_param.options);
... ... @@ -509,7 +548,7 @@ class Sass extends Emiter {
let url = `http://${GlobalConfig.portal}/3m/api/question/add.do`;
loger.log('创建答题数据', url);
fetch( encodeURI(url), {
fetch(encodeURI(url), {
method: 'POST',
headers: {
"Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
... ... @@ -529,17 +568,17 @@ class Sass extends Emiter {
}
})
.then(ret => {
if (ret.code== 0) {
if (ret.code == 0) {
//errorCode int 0 正常 1 没有指定的课堂 4 验证信息错误(authId)
// {"code":0,"id":1}
let question={};
question.questionId=ret.id;
question.type=type;
question.content=_param.content||[];
question.timeLimit=timeLimit;
question.correct=_param.correct||[];
question.options=_param.options||[];
loger.log('创建答题数据->完成->',question);
let question = {};
question.questionId = ret.id;
question.type = type;
question.content = _param.content || [];
question.timeLimit = timeLimit;
question.correct = _param.correct || [];
question.options = _param.options || [];
loger.log('创建答题数据->完成->', question);
this._emit(Sass.SASS_CREAT_QUESTION_SUCCESS, question);
} else {
loger.warn('创建答题数据->失败.', ret);
... ... @@ -552,13 +591,13 @@ class Sass extends Emiter {
});
}
//保存答题数据
sendAnswer(_param){
if(GlobalConfig.isRecordPlayBack){
sendAnswer(_param) {
if (GlobalConfig.isRecordPlayBack) {
loger.log('录制回放中->保存答题数据->不做操作');
return;
}
if(!_param){
loger.warn('保存答题数据->参数错误->param:',_param);
if (!_param) {
loger.warn('保存答题数据->参数错误->param:', _param);
this._emit(Sass.SASS_SEND_ANSWER_FAILED);
return;
}
... ... @@ -571,13 +610,13 @@ class Sass extends Emiter {
userId String 用户id
userName String 用户名字*/
let classId=GlobalConfig.classId;//课堂号
let classId = GlobalConfig.classId; //课堂号
var timestamp = new Date().getTime();
let authId = MD5(classId+""+timestamp);
let authId = MD5(classId + "" + timestamp);
let type = parseInt(_param.type);//1单选,2多选,3判断,4点名
let type = parseInt(_param.type); //1单选,2多选,3判断,4点名
let questionId = parseInt(_param.questionId);//题目id
let questionId = parseInt(_param.questionId); //题目id
let answer = _param.answer.toString();
let userId = _param.userId;
let userName = _param.userName;
... ... @@ -585,7 +624,7 @@ class Sass extends Emiter {
let url = `http://${GlobalConfig.portal}/3m/api/question/answer.do`;
loger.log('保存答题数据', url);
fetch( encodeURI(url), {
fetch(encodeURI(url), {
method: 'POST',
headers: {
"Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
... ... @@ -605,10 +644,10 @@ class Sass extends Emiter {
}
})
.then(ret => {
if (ret.code== 0) {
if (ret.code == 0) {
// 0 正常 1 没有指定的课堂 4 验证信息错误(authId) 5 没有指定的题目 6 题目不属于该课堂
//{"code":0}
let question=_param;
let question = _param;
loger.log('保存答题数据->完成');
this._emit(Sass.SASS_SEND_ANSWER_SUCCESS, question);
} else {
... ... @@ -622,23 +661,23 @@ class Sass extends Emiter {
});
}
//查询题目数据
getQuestion(_param){
if(GlobalConfig.isRecordPlayBack){
getQuestion(_param) {
if (GlobalConfig.isRecordPlayBack) {
loger.log('录制回放中->查询题目数据->不做操作');
return;
}
if(!_param){
loger.warn('查询题目数据->参数错误->param:',_param);
if (!_param) {
loger.warn('查询题目数据->参数错误->param:', _param);
this._emit(Sass.SASS_GET_QUESTION_FAILED);
return;
}
//questionId long 题目id
let questionId = parseInt(_param.questionId);//题目id
let questionId = parseInt(_param.questionId); //题目id
let url = `http://${GlobalConfig.portal}/3m/api/question/get.do`;
loger.log('查询题目数据', url);
//接口中用的是GET
fetch( encodeURI(url), {
fetch(encodeURI(url), {
method: 'POST',
headers: {
"Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
... ... @@ -657,16 +696,16 @@ class Sass extends Emiter {
}
})
.then(ret => {
if (ret.code== 0) {
if (ret.code == 0) {
//0 正常 5 没有指定的题目
//{"timeLimit":90,"code":0,"options":"[\"A\",\"B\",\"C\"]","id":22,"type":2,"content":"题目"}
loger.log('查询题目数据->完成');
let question={};
question.questionId=ret.id||questionId;
question.type=ret.type;
question.timeLimit=ret.timeLimit;
question.options=ret.options;
question.content=ret.content;
let question = {};
question.questionId = ret.id || questionId;
question.type = ret.type;
question.timeLimit = ret.timeLimit;
question.options = ret.options;
question.content = ret.content;
this._emit(Sass.SASS_GET_QUESTION_SUCCESS, question);
} else {
... ... @@ -680,23 +719,23 @@ class Sass extends Emiter {
});
}
//查询答题结果数据
getQuestionResult(_param){
if(GlobalConfig.isRecordPlayBack){
getQuestionResult(_param) {
if (GlobalConfig.isRecordPlayBack) {
loger.log('录制回放中->查询答题结果数据->不做操作');
return;
}
if(!_param){
loger.warn('查询答题结果数据->参数错误->param:',_param);
if (!_param) {
loger.warn('查询答题结果数据->参数错误->param:', _param);
this._emit(Sass.SASS_GET_QUESTION_RESULT_FAILED);
return;
}
//questionId long 题目id
let questionId = parseInt(_param.questionId);//题目id
let questionId = parseInt(_param.questionId); //题目id
let url = `http://${GlobalConfig.portal}/3m/api/question/results.do`;
loger.log('查询答题结果数据', url);
fetch( encodeURI(url), {
fetch(encodeURI(url), {
method: 'POST',
headers: {
"Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
... ... @@ -715,7 +754,7 @@ class Sass extends Emiter {
}
})
.then(ret => {
if (ret.code== 0) {
if (ret.code == 0) {
//int 0 正常5 没有指定的题目
/* list array 数组
userId string 用户id
... ... @@ -724,9 +763,9 @@ class Sass extends Emiter {
{"timeLimit":0,"content":"test question","id":11,"code":0,"type":3,"options":"["True", "False"]"}*/
loger.log('查询答题结果数据->完成');
let result=_param||{};
result.questionId=questionId;
result.list=ret.list;
let result = _param || {};
result.questionId = questionId;
result.list = ret.list;
this._emit(Sass.SASS_GET_QUESTION_RESULT_SUCCESS, result);
} else {
loger.warn('查询答题结果数据->失败.', ret);
... ... @@ -746,24 +785,25 @@ Sass.prototype.SUCCESS = Sass.SUCCESS = 'Sass_success';
Sass.prototype.CLASS_INIT_SUCCESS = Sass.CLASS_INIT_SUCCESS = 'sass_class_init_success';
Sass.prototype.CLASS_GET_CLASS_PARAM = Sass.CLASS_GET_CLASS_PARAM = 'sass_class_getClassParam.message';
Sass.prototype.CLASS_GET_CLASS_DETAIL = Sass.CLASS_GET_CLASS_DETAIL = 'sass_class_getClassDetail_message';
Sass.prototype.DELETE_DOCUMENT_SUCCESS = Sass.DELETE_DOCUMENT_SUCCESS = 'sass_class_deleteDocumentSuccess_message';//删除文档成功
Sass.prototype.DELETE_MEDIASHARE_SUCCESS = Sass.DELETE_MEDIASHARE_SUCCESS = 'sass_class_deleteMediaShareSuccess_message';//删除文档成功
Sass.prototype.DELETE_DOCUMENT_SUCCESS = Sass.DELETE_DOCUMENT_SUCCESS = 'sass_class_deleteDocumentSuccess_message'; //删除文档成功
Sass.prototype.DELETE_MEDIASHARE_SUCCESS = Sass.DELETE_MEDIASHARE_SUCCESS = 'sass_class_deleteMediaShareSuccess_message'; //删除文档成功
Sass.prototype.DELETE_MUSICSHARE_SUCCESS = Sass.DELETE_MUSICSHARE_SUCCESS = 'sass_class_deleteMusicShareSuccess_message'; //删除文档成功
Sass.prototype.CLASS_SAVE_STATUS_INFO_SUCCESS = Sass.CLASS_SAVE_STATUS_INFO_SUCCESS = 'sass_class_saveClassStatusInfoSuccess_message';//保存课堂状态信息
Sass.prototype.CLASS_SAVE_RECORD_INFO_SUCCESS = Sass.CLASS_SAVE_RECORD_INFO_SUCCESS = 'sass_class_saveClassRecordInfoSuccess_message';//保存录制课堂信息
Sass.prototype.CLASS_SAVE_STATUS_INFO_SUCCESS = Sass.CLASS_SAVE_STATUS_INFO_SUCCESS = 'sass_class_saveClassStatusInfoSuccess_message'; //保存课堂状态信息
Sass.prototype.CLASS_SAVE_RECORD_INFO_SUCCESS = Sass.CLASS_SAVE_RECORD_INFO_SUCCESS = 'sass_class_saveClassRecordInfoSuccess_message'; //保存录制课堂信息
//答题卡和点名
Sass.prototype.SASS_CREAT_QUESTION_SUCCESS = Sass.SASS_CREAT_QUESTION_SUCCESS = 'sass_creat_question_success';//创建答题卡问题成功
Sass.prototype.SASS_CREAT_QUESTION_FAILED = Sass.SASS_CREAT_QUESTION_FAILED = 'sass_creat_question_failed';//创建答题卡失败
Sass.prototype.SASS_CREAT_QUESTION_SUCCESS = Sass.SASS_CREAT_QUESTION_SUCCESS = 'sass_creat_question_success'; //创建答题卡问题成功
Sass.prototype.SASS_CREAT_QUESTION_FAILED = Sass.SASS_CREAT_QUESTION_FAILED = 'sass_creat_question_failed'; //创建答题卡失败
Sass.prototype.SASS_GET_QUESTION_SUCCESS = Sass.SASS_GET_QUESTION_SUCCESS = 'sass_get_question_success';//获取问题成功
Sass.prototype.SASS_GET_QUESTION_FAILED = Sass.SASS_GET_QUESTION_FAILED = 'sass_get_question_failed';//获取问题失败
Sass.prototype.SASS_GET_QUESTION_SUCCESS = Sass.SASS_GET_QUESTION_SUCCESS = 'sass_get_question_success'; //获取问题成功
Sass.prototype.SASS_GET_QUESTION_FAILED = Sass.SASS_GET_QUESTION_FAILED = 'sass_get_question_failed'; //获取问题失败
Sass.prototype.SASS_GET_QUESTION_RESULT_SUCCESS = Sass.SASS_GET_QUESTION_RESULT_SUCCESS = 'sass_get_question_result_success';//获取问题结果成功
Sass.prototype.SASS_GET_QUESTION_RESULT_FAILED = Sass.SASS_GET_QUESTION_RESULT_FAILED = 'sass_get_question_result_failed';//获取问题结果失败
Sass.prototype.SASS_GET_QUESTION_RESULT_SUCCESS = Sass.SASS_GET_QUESTION_RESULT_SUCCESS = 'sass_get_question_result_success'; //获取问题结果成功
Sass.prototype.SASS_GET_QUESTION_RESULT_FAILED = Sass.SASS_GET_QUESTION_RESULT_FAILED = 'sass_get_question_result_failed'; //获取问题结果失败
Sass.prototype.SASS_SEND_ANSWER_SUCCESS = Sass.SASS_SEND_ANSWER_SUCCESS = 'sass_send_answer_success';//保存答案成功
Sass.prototype.SASS_SEND_ANSWER_FAILED = Sass.SASS_SEND_ANSWER_FAILED = 'sass_send_answer_failed';//保存答案失败
Sass.prototype.SASS_SEND_ANSWER_SUCCESS = Sass.SASS_SEND_ANSWER_SUCCESS = 'sass_send_answer_success'; //保存答案成功
Sass.prototype.SASS_SEND_ANSWER_FAILED = Sass.SASS_SEND_ANSWER_FAILED = 'sass_send_answer_failed'; //保存答案失败
export default new Sass;
... ...
... ... @@ -95,7 +95,7 @@ class ConferApe extends Ape {
getNodeInfo() {
let nodeInfoRecordPdu = new pdu['RCNodeInfoRecordPdu'];
nodeInfoRecordPdu.nodeId = GlobalConfig.nodeId;
nodeInfoRecordPdu.selfSilence = JSON.stringify(GlobalConfig.selfSilence)||"";
nodeInfoRecordPdu.selfSilence = JSON.stringify(GlobalConfig.selfSilence) || "";
nodeInfoRecordPdu.name = GlobalConfig.userName;
nodeInfoRecordPdu.role = ApeConsts.userTypesToId[GlobalConfig.userRole] || 1; //NR_NORMAL用户的身份,根据用户登录时的身份设置;
nodeInfoRecordPdu.level = GlobalConfig.level;
... ... @@ -333,11 +333,11 @@ class ConferApe extends Ape {
// 全局禁言
silenceClass(params) {
if (GlobalConfig.isHost) {
if (!GlobalConfig.isNormal) {
//同步禁言状态
this.sendUpdaterClassStatusInfo(params);
} else {
loger.warn('没有开始课堂的权限');
loger.warn('老师/监客拥有改权限');
}
}
... ... @@ -415,13 +415,13 @@ class ConferApe extends Ape {
}
let msgObj = {};
msgObj.nodeId = _param.nodeId;
msgObj.silence = _param.silence ||{};
msgObj.silence = _param.silence || {};
this.sendConferMsg({ "to": _param.nodeId, "message": JSON.stringify(msgObj), "actionType": ApeConsts.USER_ACTION_SILENCE_STATUS_CHANGE });
}
changeSilenceStatus(_param) {
loger.log('切换禁言状态->', _param);
GlobalConfig.selfSilence = _param.silence||{};
GlobalConfig.selfSilence = _param.silence || {};
this.updateUserInfo();
}
... ...
... ... @@ -8,7 +8,7 @@
// Author: AlexWang
// Date: 2016-08-26 17:36:20
// QQ Email: 1669499355@qq.com
// Last Modified time: 2017-06-27 18:13:39
// Last Modified time: 2017-06-29 14:09:25
// Description: LiveClass-CursorApe
//
// //////////////////////////////////////////////////////////////////////////////
... ... @@ -54,7 +54,7 @@ class CursorApe extends Ape {
return;
}
let itemIdx = EngineUtils.creatSoleNumberFromTimestamp(); //创建时间戳,保证每条数据的唯一
let itemIdx = ApeConsts.CURSOR_OBJ_TABLE_ID;
let cursorModelPdu = this.packPdu(_param, itemIdx);
if (cursorModelPdu == null) {
loger.warn('添加标注失败-->参数错误->', _param);
... ... @@ -68,13 +68,14 @@ class CursorApe extends Ape {
tableItemPdu.owner = 0; //收到flash的是这个值,不清楚先写固定
tableItemPdu.itemData = cursorModelPdu.toArrayBuffer();
//insert
let tableInsertItemPdu = new pdu['RCRegistryTableInsertItemPdu'];
tableInsertItemPdu.type = pdu.RCPDU_REG_TABLE_INSERT_PDU; //
let tableInsertItemPdu = new pdu['RCRegistryTableUpdateItemPdu'];
//optional RCPduType_E type = 1 [default = RCPDU_REG_TABLE_UPDATE_PDU];
//repeated RCRegistryTableItemPdu items = 2;
tableInsertItemPdu.type = pdu.RCPDU_REG_TABLE_UPDATE_PDU; //
tableInsertItemPdu.items.push(tableItemPdu);
let updateObjPdu = new pdu['RCRegistryUpdateObjPdu'];
updateObjPdu.objId = ApeConsts.CURSOR_OBJ_TABLE_ID;
updateObjPdu.objId = ApeConsts.DOCSHARING_OBJ_TABLE_ID; // updateObjPdu.objId = ApeConsts.DOCSHARING_OBJ_TABLE_ID_H5;
updateObjPdu.subType = tableInsertItemPdu.type;
updateObjPdu.userData = tableInsertItemPdu.toArrayBuffer();
... ... @@ -87,14 +88,14 @@ class CursorApe extends Ape {
adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
adapterPdu.item.push(adapterItemPdu);
loger.log("添加标注->itemIdx=" + tableItemPdu.itemIdx);
loger.log("发送更新.itemIdx=" + tableItemPdu.itemIdx);
this.sendUniform(adapterPdu, true);
}
/////鼠标数据接受/////////////////////////////////////////////////////////////////////////////////
tableInsertHandler(owner, itemIdx, itemData) {
tableUpdateHandler(owner, itemIdx, itemData) {
let cursorModel = this.unPackPdu(owner, itemIdx, itemData);
loger.log('tableInsertHandler', "activeDocId->", GlobalConfig.activeDocId, "parentId->", cursorModel.parentId);
loger.log('tableUpdateHandler', "activeDocId->", GlobalConfig.activeDocId, "parentId->", cursorModel.parentId);
loger.log(cursorModel);
if (cursorModel) {
this._emit(MessageTypes.CURSOR_UPDATE, cursorModel);
... ... @@ -131,8 +132,8 @@ class CursorApe extends Ape {
unPackPdu(owner, itemIdx, itemData) {
try {
loger.log("鼠标标注数据->unPackPdu");
let cursorModelPdu = pdu['RCCursorDataModelPdu'].decode(itemData);
let _pointGroup = EngineUtils.arrayFromJsonString(cursorModelPdu.pointGroup);
const cursorModelPdu = pdu['RCCursorDataModelPdu'].decode(itemData);
const _pointGroup = EngineUtils.arrayFromJsonString(cursorModelPdu.pointGroup);
cursorModelPdu.pointGroup = _pointGroup;
return cursorModelPdu;
} catch (err) {
... ...
... ... @@ -102,7 +102,7 @@ class MusicSharedApe extends Ape {
adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
adapterPdu.item.push(adapterItemPdu);
loger.log("媒体文件发送删除数据=============>" + tableDeleteItemPdu.itemIdx);
loger.log("MUSIC文件发送删除数据=============>" + tableDeleteItemPdu.itemIdx);
this.sendUniform(adapterPdu, true);
}
... ... @@ -347,7 +347,7 @@ class MusicSharedApe extends Ape {
loger.log('添加媒体文件->设置当前激活的媒体文件id');
}
let getMusicPackFullInfo = this._musicSharedPackFullInfo(itemDataInfo);
this._emit(MessageTypes.MEDIA_SHARED_UPDATE, getMusicPackFullInfo);
this._emit(MessageTypes.MUSIC_SHARED_UPDATE, getMusicPackFullInfo);
}
}
//媒体文件数据更新完毕,如果当前没有显示的媒体文件,默认选择一个显示
... ... @@ -367,7 +367,7 @@ class MusicSharedApe extends Ape {
GlobalConfig.activeMusicSeek = 1; //当前激活的媒体文件的当前页
loger.log('删除媒体文件数据->清除当前显示的媒体文件');
}
this._emit(MessageTypes.MEDIA_SHARED_DELETE, { "itemIdx": itemIdxs[i] });
this._emit(MessageTypes.MUSIC_SHARED_DELETE, { "itemIdx": itemIdxs[i] });
delete this.musicSharedList[itemIdxs[i]];
}
}
... ... @@ -393,7 +393,7 @@ class MusicSharedApe extends Ape {
loger.log('更新媒体文件->设置当前激活的媒体文件id->', GlobalConfig.activeMusicId, "curPageNum->", GlobalConfig.activeMusicSeek);
}
let getMusicPackFullInfo = this._musicSharedPackFullInfo(itemDataInfo);
this._emit(MessageTypes.MEDIA_SHARED_UPDATE, getMusicPackFullInfo);
this._emit(MessageTypes.MUSIC_SHARED_UPDATE, getMusicPackFullInfo);
} else {
loger.log('更新媒体文件-> 数据无效--> itemIdx', itemIdx);
}
... ...