李勇
aae6d846 1 parent fff22239 master ... 20170922-1 20171019-1 20171120-1w dev letv-20170426 ly20170622 ly20170622-2 ly20170622-3 ly20170627-2 ly20170706-1 ly20170708-2 ly20170708-3 ly20170710-1 ly20170717-1 ly20170719-1 ly20170723-1 ly20170724-2 ly20170726-1 ly20170731-1 ly20170731-2 ly20170801-2 ly20170802-1 ly20170818-1 ly20170818-2 ly20170820-1 ly20170821-1 ly20170824-1 ly20170829-1 ly20170925-1 ly20170926-1 ly20170927-1 ly20170929-1 ly20171011-1 ly20171013-1 ly20171013-2 ly20171016-1 ly20171021-1 ly20171023-1 ly20171024-1w ly20171025-1w ly20171026-1w ly20171027-1w ly20171030-1 ly20171030-2w ly20171107-1 ly20171110-1w ly20171113-1w ly20171204-1w ly20171208-1w ly20171211-1w ly20171211-2w ly20171214-1w mcuClientBranch mcuClientBranch20170228 webRtc-dev 1.7.0 v2.38.13.20171216 v2.38.11.20171214 v2.38.3.201712011 v2.38.1.201712011 v2.36.11.20171204 v2.36.8.20171206 v2.36.4.20171201 v2.35.11.20171130 v2.34.16.20171128 v2.34.5.20171127 v2.33.6.20171123 v2.32.1.20171123 v2.31.12.20171122 v2.31.10.20171122 v2.30.5.20171117 v2.30.2.20171117 v2.29.5.20171114 v2.28.1.20171110 v2.27.11.20171109 v2.26.9.20171107 v2.26.6.20171103 v2.26.2.20171102 v2.25.7.20171031 v2.25.6.20171031 v2.25.0.20171030 v2.24.2.20171030 v2.23.0.20171030 v2.22.7.20171026 v2.20.5.20171023 v2.20.0.20171021 v2.19.8.20171020 v2.18.14.20171020 v2.18.10.20171019 v2.17.11.20171014 v2.16.8.20171012 v2.16.5.20171012 v2.15.5.20171001 v2.15.3.20170929 v2.14.5.20170927 v2.13.5.20170927 v2.12.14.20170927 v2.12.8.20170926 v2.12.6.20170925 v2.11.13.20170925 v2.10.7.20170921 v2.10.6.20170921 v2.10.5.20170920 v2.10.4.20170920 v2.9.3.20170919 v2.8.17.20170918 v2.8.8.20170917 v2.8.2.20170916 v2.6.2.20170915 v2.5.12.20170915 v2.5.6.20170914 v2.5.5.20170914 v2.4.4.20170908 v2.4.2.20170908 v2.4.0.20170907 v2.3.6.20170907 v2.2.16.20170905 v2.1.22.20170904 v1.84.0.20170912 v1.83.2.20170831 v1.82.11.20170829 v1.81.19.20170828 v1.80.2.20170824 v1.79.6.20170822 v1.79.5.20170821 v1.79.4.20170821 v1.79.3.20170821 v1.78.4.20170820 v1.77.4.20170819 v1.76.2.20170818 v1.75.0.20170815 v1.74.0.20170814 v1.73.2.20170814 v1.73.1.20170814 v1.71.0.20170813 v1.70.5.20170812 v1.68.2.20170812 v1.66.1.20170809 v1.65.25.20170808 v1.65.24.20170806 v1.63.1.20170731 v1.62.3.20170731 v1.61.0.20170729 v1.60.0.20170729 v1.59.0.20170729 v1.58.0.20170729 v1.57.0.20170727 v1.56.1.20170727 v1.56.0.20170727 v1.52.1.20170726 v1.51.0.20170724 v1.50.7.20170724 v1.49.1.20170724 v1.48.2.20170723 v1.46.1.20170722 v1.45.1.20170717 v1.43.1.20170711 v1.42.1.20170708 v1.41.0.20170708 v1.40.0.20170706 v1.39.2.20170706 v1.39.1.20170705 v1.38.4.20170629 v1.37.5.20170627 v1.37.2.20170622 v1.36.7.20170620 v1.36.4.20170620 v1.36.1.20170619 v1.35.4.20170619 v1.34.2.20170615 v1.33.2.20170615 v1.32.1.20170614 v1.31.11.20170613 v1.30.20.20170607 v1.30.7.20170606 v1.30.6.20170606 v1.30.5.20170605 v1.30.3.20170602 v1.29.8.20170601 v1.28.0.201705031 v1.27.16.201705027 v1.27.14.201705027 v1.27.10.201705026 v1.25.2.201705025 v1.23.5.201705023 v1.23.4.201705018 v1.21.1.201705017 v1.20.1.201705015 v1.19.1.201705012 v1.19.0.201705011 v1.18.0.201705010 v1.16.1.201705010 v1.15.2.20170507 v1.14.1.20170505 v1.13.0.20170504 v1.11.3.20170504 v1.10.2.20170428 v1.10.0.20170427 v1.9.20.20170426 v1.9.19.20170425 v1.9.18.20170425 v1.9.17.20170421 v1.9.16.20170420 v1.9.15.20170420 v1.9.11.20170419 v1.9.6.20170418 v1.9.4.20170417 v.1.9.2.20170413 v.1.9.0.20170411 v.1.8.22.20170411 v.1.8.19.20170411 v.1.8.16.20170410 v.1.8.13.20170409 v.1.8.10.20170407 v.1.8.9.20170407 v1.8.8.20170406 v.1.8.7.20170405-1 v.1.8.6.20170401-2 v.1.8.5.20170331-1 v.1.8.3.20170329-4 v1.8.1.20170321 mcuClient20170302 mcuClient_v1.8.0.20170314 修复音视频channel占用问题

1.统一名称meeting conf 统一为class

2.会议相关数据的统一管理
... ... @@ -73,7 +73,7 @@ return /******/ (function(modules) { // webpackBootstrap
/******/ }
/******/ var hotApplyOnUpdate = true;
/******/ var hotCurrentHash = "5e0ae84f169d08ac1a6d"; // eslint-disable-line no-unused-vars
/******/ var hotCurrentHash = "d635f2d355b4ed7cd341"; // eslint-disable-line no-unused-vars
/******/ var hotCurrentModuleData = {};
/******/ var hotCurrentParents = []; // eslint-disable-line no-unused-vars
... ... @@ -810,7 +810,6 @@ return /******/ (function(modules) { // webpackBootstrap
_this.getMcuClientStatus = _this._getMcuClientStatus;
_this.getClassDetail = _this._getClassDetail;
_this.sendUpdaterClassInfo = _this._sendUpdaterClassInfo;
_this.sendUpdaterClassInfo1 = _this._sendUpdaterClassInfo1;
//chatApe
_this.sendChatMsg = _this._sendChatMsg;
... ... @@ -873,7 +872,7 @@ return /******/ (function(modules) { // webpackBootstrap
value: function _init(_param, _onSuccess, _mcuErrorCallBack) {
_initSuccessCallBackFun = _onSuccess;
_mcuErrorCallBackFun = _mcuErrorCallBack;
//{"meetingNumber":"1653304953","portal":"112.126.80.182:80","userRole":"normal","userId":0}
//{"classId":"1653304953","portal":"112.126.80.182:80","userRole":"normal","userId":0}
//判断传入的参数是否存在
if (_param == null || _EngineUtils2.default.isEmptyObject(_param) || _onSuccess == null || _mcuErrorCallBack == null) {
loger.error('init初始化失败,参数错误');
... ... @@ -881,21 +880,21 @@ return /******/ (function(modules) { // webpackBootstrap
return;
}
//判断必要的参数字段值
if (_param.meetingNumber == null || isNaN(_param.meetingNumber) || _param.portal == null || _param.portal == "") {
if (_param.classId == null || isNaN(_param.classId) || _param.portal == null || _param.portal == "") {
loger.error('init初始化失败', _param);
this._emit(_MessageTypes2.default.MCU_ERROR, _MessageTypes2.default.ERR_CLASS_INIT_PAEAM);
return;
}
loger.log('init', _param);
//保存参数
_GlobalConfig2.default.confId = _param.meetingNumber;
_GlobalConfig2.default.classId = _param.classId;
_GlobalConfig2.default.portal = _param.portal;
_GlobalConfig2.default.userRole = _param.userRole || _ApeConsts2.default.normal;
_GlobalConfig2.default.userId = _param.userId || "0";
//获取课堂校验信息
if (_sass) {
_sass.getJoinParams(_GlobalConfig2.default.getConfInfo());
_sass.getJoinParams(_GlobalConfig2.default.getClassInfo());
}
}
... ... @@ -923,7 +922,7 @@ return /******/ (function(modules) { // webpackBootstrap
//开始校验
if (_sass) {
_sass.passwordAndMd5Checking(_GlobalConfig2.default.getConfInfo());
_sass.passwordAndMd5Checking(_GlobalConfig2.default.getClassInfo());
}
}
// 离开会议
... ... @@ -940,7 +939,7 @@ return /******/ (function(modules) { // webpackBootstrap
}
}
// 用meetingNumber向SASS平台获取入会验证信息成功
// 用classId向SASS平台获取入会验证信息成功
}, {
key: '_sassInitSuccessHandler',
... ... @@ -971,7 +970,7 @@ return /******/ (function(modules) { // webpackBootstrap
//返回给客户端初始化成功的数据
var initSuccessCallBackData = {};
initSuccessCallBackData.siteId = _GlobalConfig2.default.siteId;
initSuccessCallBackData.meetingNumber = _GlobalConfig2.default.confId;
initSuccessCallBackData.classId = _GlobalConfig2.default.classId;
initSuccessCallBackData.userRole = _GlobalConfig2.default.userRole;
initSuccessCallBackData.userId = _GlobalConfig2.default.userId;
initSuccessCallBackData.passwordRequired = _GlobalConfig2.default.passwordRequired;
... ... @@ -981,24 +980,14 @@ return /******/ (function(modules) { // webpackBootstrap
}
}
//// 用meetingNumber向SASS平台获取入会验证信息失败
//_sassInitFailedHandler(_data) {
// loger.log('向SASS平台获取入会验证信息失败.');
// //this._emit(MessageTypes.CLASS_INIT_FAILED);
// let callBackObj={"code":_data,"message":""};
// if(_initFailureCallBackFun){
// _initFailureCallBackFun(callBackObj);
// }
//}
//使用固定的假数据
}, {
key: '_setDebugData',
value: function _setDebugData(_data) {
loger.log("setDebugData " + _data);
//GlobalConfig.setDebugData(_data);
}
value: function _setDebugData(_data) {}
//loger.log("setDebugData "+_data);
//GlobalConfig.setDebugData(_data);
// 通过SASS平台验证
... ... @@ -1030,7 +1019,7 @@ return /******/ (function(modules) { // webpackBootstrap
loger.log('加入底层MCU会议.');
if (_mcu) {
_mcu.joinMCU(_GlobalConfig2.default.getConfInfo());
_mcu.joinMCU(_GlobalConfig2.default.getClassInfo());
}
}
... ... @@ -1070,8 +1059,8 @@ return /******/ (function(modules) { // webpackBootstrap
key: '_h5SassGetMeetingParaSuccessHandler',
value: function _h5SassGetMeetingParaSuccessHandler(_data) {
loger.log('获取api/meeting/detail.do完成.');
console.log(_data.docListPrepare);
console.log(_data.mcuList);
//console.log(_data.docListPrepare);
//console.log(_data.mcuList);
//包含整个会议最全的信息,储存数据
if (_data) {
_GlobalConfig2.default.setDocListPrepare(_data.docListPrepare); //提前上传的文档列表
... ... @@ -1102,13 +1091,13 @@ return /******/ (function(modules) { // webpackBootstrap
_GlobalConfig2.default.MCUServerIP = _data.MCUServerIP;
_GlobalConfig2.default.MCUServerPort = _data.MCUServerPort;
//GlobalConfig.classRole=_data.classRole;
_GlobalConfig2.default.confId = _data.confId;
_GlobalConfig2.default.classId = _data.classId;
_GlobalConfig2.default.h5Module = _data.h5Module;
//GlobalConfig.isHost=_data.isHost;
_GlobalConfig2.default.maxAudioChannels = _data.maxAudioChannels;
_GlobalConfig2.default.maxVideoChannels = _data.maxVideoChannels;
_GlobalConfig2.default.maxMediaChannels = _data.maxMediaChannels;
_GlobalConfig2.default.mcuConfInfo = _data.mcuConfInfo;
_GlobalConfig2.default.mcuClassInfo = _data.mcuClassInfo;
_GlobalConfig2.default.mcuDelay = _data.mcuDelay;
_GlobalConfig2.default.md5 = _data.md5;
_GlobalConfig2.default.msType = _data.msType;
... ... @@ -1134,13 +1123,13 @@ return /******/ (function(modules) { // webpackBootstrap
initSuccessCallBackData.doc = _GlobalConfig2.default.doc; //文档服务器地址
//initSuccessCallBackData.classRole=GlobalConfig.classRole;
initSuccessCallBackData.confId = _GlobalConfig2.default.confId;
initSuccessCallBackData.classId = _GlobalConfig2.default.classId;
initSuccessCallBackData.h5Module = _GlobalConfig2.default.h5Module;
initSuccessCallBackData.isHost = _GlobalConfig2.default.isHost;
initSuccessCallBackData.maxAudioChannels = _GlobalConfig2.default.maxAudioChannels;
initSuccessCallBackData.maxVideoChannels = _GlobalConfig2.default.maxVideoChannels;
initSuccessCallBackData.maxMediaChannels = _GlobalConfig2.default.maxMediaChannels;
// GlobalConfig.mcuConfInfo=_data.mcuConfInfo;
// GlobalConfig.mcuClassInfo=_data.mcuClassInfo;
initSuccessCallBackData.mcuDelay = _GlobalConfig2.default.mcuDelay;
//GlobalConfig.md5=_data.md5;
initSuccessCallBackData.msType = _GlobalConfig2.default.msType;
... ... @@ -1158,7 +1147,7 @@ return /******/ (function(modules) { // webpackBootstrap
initSuccessCallBackData.userType = _GlobalConfig2.default.userType;
initSuccessCallBackData.siteId = _GlobalConfig2.default.siteId;
initSuccessCallBackData.meetingNumber = _GlobalConfig2.default.confId;
initSuccessCallBackData.classId = _GlobalConfig2.default.classId;
initSuccessCallBackData.userRole = _GlobalConfig2.default.userRole;
initSuccessCallBackData.userId = _GlobalConfig2.default.userId;
initSuccessCallBackData.passwordRequired = _GlobalConfig2.default.passwordRequired;
... ... @@ -1661,15 +1650,15 @@ return /******/ (function(modules) { // webpackBootstrap
//Sass 接口
//----1.校验之前的接口-----
//getJoinParams 获取课堂校验信息 let url = `http://${_initInfo.portal}/3m/api/meeting/joinParams.do?meetingNumber=${_initInfo.confId}&userID=${_initInfo.userId}`;
//getJoinParams 获取课堂校验信息 let url = `http://${_initInfo.portal}/3m/api/meeting/joinParams.do?meetingNumber=${_initInfo.classId}&userID=${_initInfo.userId}`;
//-----2.开始校验,如果有密码先校验密码,否则直接开始MD5验证-----
//sendPWDChecking入会密码校验 let url = `http://${confInfo.portal}/3m/getCheckMeetinig.do?siteId=${confInfo.siteId}&classId=${confInfo.confId}&password=${confInfo.password}`;
//sendMD5Checking MD5校验(发起入会) let url = `http://${confInfo.portal}/3m/meeting/md5CheckMeeting.do?siteId=${confInfo.siteId}&meetingNumber=${confInfo.confId}&userId=${confInfo.userId}&userName=${confInfo.userName}&userType=${confInfo.userType}&passwordRequired=${confInfo.passwordRequired}&md5=${confInfo.md5}`;
//sendPWDChecking入会密码校验 let url = `http://${classInfo.portal}/3m/getCheckMeetinig.do?siteId=${classInfo.siteId}&classId=${classInfo.classId}&password=${classInfo.password}`;
//sendMD5Checking MD5校验(发起入会) let url = `http://${classInfo.portal}/3m/meeting/md5CheckMeeting.do?siteId=${classInfo.siteId}&meetingNumber=${classInfo.classId}&userId=${classInfo.userId}&userName=${classInfo.userName}&userType=${classInfo.userType}&passwordRequired=${classInfo.passwordRequired}&md5=${classInfo.md5}`;
//----3.验证完成后获取------
//getClassDetail 获取会议详情 let url = `http://${confInfo.portal}/3m/meeting/getClassH5.do?classNumber=${confInfo.confId}`;
//getMeetingParam 获取会议最全参数集合 let url = `http://${confInfo.portal}/3m/api/meeting/detail.do?meetingNumber=${confInfo.confId}&timestamp=${timestamp}&authId=${authId}`;
//getClassDetail 获取会议详情 let url = `http://${classInfo.portal}/3m/meeting/getClassH5.do?classNumber=${classInfo.classId}`;
//getMeetingParam 获取会议最全参数集合 let url = `http://${classInfo.portal}/3m/api/meeting/detail.do?meetingNumber=${classInfo.classId}&timestamp=${timestamp}&authId=${authId}`;
//Sass获取课堂校验信息
... ... @@ -1699,7 +1688,7 @@ return /******/ (function(modules) { // webpackBootstrap
md5 String 用于后续加入课堂验证
msType int 媒体服务器类型
*/
var url = 'http://' + _initInfo.portal + '/3m/api/meeting/joinParams.do?meetingNumber=' + _initInfo.confId + '&userID=' + _initInfo.userId;
var url = 'http://' + _initInfo.portal + '/3m/api/meeting/joinParams.do?meetingNumber=' + _initInfo.classId + '&userID=' + _initInfo.userId;
loger.log('Sass获取课堂校验信息.', url);
fetch(url, {
timeout: 5000
... ... @@ -1764,7 +1753,7 @@ return /******/ (function(modules) { // webpackBootstrap
value: function sendPWDChecking() {
var _this3 = this;
//let url = `http://${confInfo.portal}/3m/getCheckMeetinig.do?siteId=${confInfo.siteId}&classId=${confInfo.confId}&password=${confInfo.password}`;
//let url = `http://${classInfo.portal}/3m/getCheckMeetinig.do?siteId=${classInfo.siteId}&classId=${classInfo.classId}&password=${classInfo.password}`;
/*
/3m/api/meeting/signIn.do
... ... @@ -1780,7 +1769,7 @@ return /******/ (function(modules) { // webpackBootstrap
isTeacher = 1;
}
var url = 'http://' + confInfo.portal + '/3m/api/meeting/signIn.do?siteId=' + confInfo.siteId + '&classId=' + confInfo.confId + '&isTeacher=' + isTeacher + '&password=' + confInfo.password;
var url = 'http://' + confInfo.portal + '/3m/api/meeting/signIn.do?siteId=' + confInfo.siteId + '&classId=' + confInfo.classId + '&isTeacher=' + isTeacher + '&password=' + confInfo.password;
loger.log('会议密码校验', url);
fetch(url, {
timeout: 5000
... ... @@ -1819,7 +1808,7 @@ return /******/ (function(modules) { // webpackBootstrap
value: function sendMD5Checking() {
var _this4 = this;
var url = 'http://' + confInfo.portal + '/3m/meeting/md5CheckMeeting.do?siteId=' + confInfo.siteId + '&meetingNumber=' + confInfo.confId + '&userId=' + confInfo.userId + '&userName=' + confInfo.userName + '&userType=' + confInfo.userType + '&nopassword=' + confInfo.passwordRequired + '&md5=' + confInfo.md5;
var 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;
loger.log('H5SassMD5校验', url);
fetch(url, {
timeout: 5000
... ... @@ -1867,7 +1856,7 @@ return /******/ (function(modules) { // webpackBootstrap
value: function getClassDetail() {
var _this5 = this;
var url = 'http://' + confInfo.portal + '/3m/meeting/getClassH5.do?classNumber=' + confInfo.confId;
var url = 'http://' + confInfo.portal + '/3m/meeting/getClassH5.do?classNumber=' + confInfo.classId;
loger.log('Sass获取Class详情.', url);
fetch(url, {
timeout: 5000
... ... @@ -1911,11 +1900,11 @@ return /******/ (function(modules) { // webpackBootstrap
3 没有对应的站点
4 站点已过期
siteId String 站点号
meetingNumber String 课堂号
meetingNumber String 课堂号 对应的是classId
*/
var timestamp = new Date().getTime();
var authId = (0, _md2.default)(confInfo.confId + "" + timestamp); //课堂号+时间戳 的字符串,转成MD5
var url = 'http://' + confInfo.portal + '/3m/api/meeting/detail.do?meetingNumber=' + confInfo.confId + '&timestamp=' + timestamp + '&authId=' + authId;
var authId = (0, _md2.default)(confInfo.classId + "" + timestamp); //课堂号+时间戳 的字符串,转成MD5
var url = 'http://' + confInfo.portal + '/3m/api/meeting/detail.do?meetingNumber=' + confInfo.classId + '&timestamp=' + timestamp + '&authId=' + authId;
loger.log('H5Sass获取getMeetingParam ', url);
fetch(url, {
timeout: 5000
... ... @@ -2337,10 +2326,33 @@ return /******/ (function(modules) { // webpackBootstrap
key: 'setClassDetail',
value: function setClassDetail(_data) {
this.classDetail = _data;
this.className = _data.meetingName || "";
this.classBeginTime = _data.beginTime || "";
this.classEndTime = _data.endTime || "";
//
//"cycle": 0,
// "repeatmonthweekweek": 0,
// "status": 1,
// "repeatmonthday": 0,
// "repeatmode": 0,
// "beginTime": "2017-02-03 09:00:00",
// "frequency": 1,
// "endmode": 0,
// "meetingContent": "",
// "endTime": "2017-03-31 11:00:00",
// "repeatweek": "",
// "category": "",
// "finalenddate": "",
// "repeatday": 0,
// "meetingName": "mcu1",
// "errorCode": 0,
// "monthType": 0,
// "repeatmonthweekday": 0,
// "endcount": 1
}
}, {
key: 'getConfInfo',
value: function getConfInfo() {
key: 'getClassInfo',
value: function getClassInfo() {
if (this.isDebug) {
//这几个属性是sass验证完成之后返回的,启动MCU的时候需要
... ... @@ -2354,7 +2366,8 @@ return /******/ (function(modules) { // webpackBootstrap
} else {
return {
"siteId": this.siteId,
"confId": this.confId,
"classId": this.classId,
"className": this.className,
"h5Module": this.h5Module,
"nodeId": this.nodeId,
"topNodeID": this.topNodeID,
... ... @@ -2506,9 +2519,11 @@ return /******/ (function(modules) { // webpackBootstrap
"classType": this.classType, //课堂类型
"classStatus": this.classStatus, //课堂的状态
"classStartTime": this.classStartTime, //课堂点击开始时间
"classEndTime": this.classEndTime, //最后一次的时间(点暂停或结束),每次发送数据都获取当前时间戳
"classStopTime": this.classStopTime, //最后一次停止的时间(点暂停或结束),每次发送数据都获取当前时间戳
"classTimestamp": this.recordTimestamp, //相对于点开始课堂的时间戳
"classBeginTime": this.classBeginTime, //课堂创建的时间
"classEndTime": this.classEndTime, //课堂结束的时间
"recordStatus": this.recordStatus, //当前录制状态
"recordTimestamp": this.recordTimestamp, //相对于开始录制的时间戳
... ... @@ -2518,8 +2533,8 @@ return /******/ (function(modules) { // webpackBootstrap
"systemTimestamp": this.systemTimestamp //当前的系统时间戳
}
};
},
set: function set(_param) {}
}
// 判断自己是否主持人角色
}, {
... ... @@ -2585,22 +2600,6 @@ return /******/ (function(modules) { // webpackBootstrap
GlobalConfig.statusCode_3 = { "code": 3, message: "已经离开会议" };
GlobalConfig.statusCode_4 = { "code": 4, message: "未知状态" };
GlobalConfig.siteId = "gust";
GlobalConfig.confId = 0; //课堂号=classId=meetingNumber 之后统一修改为classId
GlobalConfig.nodeId = 0; //随机生成
GlobalConfig.topNodeID = 101; //现在固定值,还不知道是做什么用
GlobalConfig.userRole = _ApeConsts2.default.normal;
GlobalConfig.role = 1;
//GlobalConfig.isHost=false;
//GlobalConfig.classRole=0;//废弃
GlobalConfig.userId = 0;
GlobalConfig.userName = "";
GlobalConfig.password = "";
GlobalConfig.userType = 8;
GlobalConfig.h5Module = 0;
GlobalConfig.passwordRequired = false;
GlobalConfig.md5 = "";
GlobalConfig.msType = 1;
GlobalConfig.mcuDelay = 3000; //默认的延迟时间
... ... @@ -2619,11 +2618,29 @@ return /******/ (function(modules) { // webpackBootstrap
GlobalConfig.deviceType = -1; //设备类型 0:电脑 1:安卓 2:ios -1未知
GlobalConfig.userIP = ""; //用户当前IP
GlobalConfig.userId = 0;
GlobalConfig.userName = "";
GlobalConfig.nodeId = 0; //随机生成
GlobalConfig.passwordRequired = false;
GlobalConfig.password = "";
GlobalConfig.userType = 8;
GlobalConfig.userRole = _ApeConsts2.default.normal; //用户的身份,5种类型:
GlobalConfig.role = _ApeConsts2.default.NR_NORMAL; //课堂角色身份
GlobalConfig.h5Module = 0;
GlobalConfig.siteId = "gust";
GlobalConfig.topNodeID = 101; //现在固定值,还不知道是做什么用
GlobalConfig.className = ""; // 课程名称
GlobalConfig.classId = ""; // 课程号
GlobalConfig.classId = 0; //课堂号=classId=meetingNumber 之后统一修改为classId
GlobalConfig.classType = _ApeConsts2.default.CLASS_TYPE_INTERACT; //1:互动课堂,2:直播课堂
GlobalConfig.classStatus = _ApeConsts2.default.CLASS_STATUS_WAIT; // 0;//课堂还未开始 1;//直播中 2 //课间休息 3已经停止
GlobalConfig.classStartTime = ""; //课堂点击开始时间
GlobalConfig.classStopTime = ""; //最后一次停止的时间(点暂停或结束),每次发送数据都获取当前时间戳
GlobalConfig.classBeginTime = ""; //课堂创建的时间
GlobalConfig.classEndTime = ""; //课堂结束的时间
GlobalConfig.recordStartTime = "";
GlobalConfig.recordStartTimestam = "";
... ... @@ -3336,27 +3353,27 @@ return /******/ (function(modules) { // webpackBootstrap
}, {
key: '_sendJoinClassRequest',
value: function _sendJoinClassRequest() {
var confInfo = this.confInfo;
loger.log('MCU-发送加入会议请求.', confInfo);
var joinRequestPdu = new _index2.default['RCConferenceJoinRequestPdu']();
joinRequestPdu.type = 2;
joinRequestPdu.initiator = confInfo.nodeId;
joinRequestPdu.nodeType = _PduConsts2.default.NT_TERMINAL; //normal
//const classInfo = this.classInfo;
loger.log('MCU-发送加入会议请求.', this.classInfo);
var descriptorPdu = new _index2.default['RCConferenceDescriptorPdu']();
descriptorPdu.id = confInfo.confId;
descriptorPdu.name = new ArrayBuffer();
descriptorPdu.id = this.classInfo.classId;
descriptorPdu.name = this.classInfo.className || "";
descriptorPdu.mode = 0;
descriptorPdu.capacity = 1;
joinRequestPdu.confDesc = descriptorPdu;
var pduMsg = _index2.default.create_join_class_request_pdu(joinRequestPdu.type, confInfo.nodeId, confInfo.confId, 0, _ApeConsts2.default.BROADCAST_CHANNEL_ID, true, _PduConsts2.default.DP_TOP, confInfo.topNodeID, _PduConsts2.default.SEG_ONCE);
var joinRequestPdu = new _index2.default['RCConferenceJoinRequestPdu']();
joinRequestPdu.type = 2;
joinRequestPdu.initiator = this.classInfo.nodeId;
joinRequestPdu.nodeType = _PduConsts2.default.NT_TERMINAL; //normal
joinRequestPdu.classDescription = descriptorPdu; // classDescription
pduMsg.set("site", confInfo.siteId); //课堂号对应的名称
pduMsg.set("userId", confInfo.userId);
pduMsg.set("userName", _base64Js2.default.fromByteArray(_ArrayBufferUtil2.default.strToUint8Array(confInfo.userName)));
pduMsg.set("userRole", confInfo.userRole);
var pduMsg = _index2.default.create_join_class_request_pdu(joinRequestPdu.type, this.classInfo.nodeId, this.classInfo.classId, 0, _ApeConsts2.default.BROADCAST_CHANNEL_ID, true, _PduConsts2.default.DP_TOP, this.classInfo.topNodeID, _PduConsts2.default.SEG_ONCE);
pduMsg.set("site", this.classInfo.siteId); //课堂号对应的名称
pduMsg.set("userId", this.classInfo.userId);
pduMsg.set("userName", _base64Js2.default.fromByteArray(_ArrayBufferUtil2.default.strToUint8Array(this.classInfo.userName)));
pduMsg.set("userRole", this.classInfo.userRole);
pduMsg.set("deviceType", "");
pduMsg.set("data", joinRequestPdu.toArrayBuffer());
... ... @@ -3377,13 +3394,13 @@ return /******/ (function(modules) { // webpackBootstrap
case _PduType2.default.RCPDU_CONNECT_PROVIDER_RESPONSE:
//加入会议请求返回数据处理
var joinConfPdu = _index2.default['RCConferenceJoinResponsePdu'].decode(pduData);
var pduResultCode = joinConfPdu.get("result");
var pduResultCode = joinConfPdu.result;
loger.warn('RCPDU_CONNECT_PROVIDER_RESPONSE ->pduResultCode:' + pduResultCode);
switch (pduResultCode) {
case _PduConsts2.default.RET_SUCCESS:
//加入成功
this._updateMCUConfInfoDesc(joinConfPdu.get("confDesc"));
this._emit(_MessageTypes2.default.CLASS_JOIN_SUCCESS, this.confInfo);
this._updateMCUConfInfoDescription(joinConfPdu.classDescription);
this._emit(_MessageTypes2.default.CLASS_JOIN_SUCCESS, this.classInfo);
break;
case _PduConsts2.default.RET_FULL_CAPACITY:
this._emit(_MessageTypes2.default.MCU_ERROR, _MessageTypes2.default.ERR_CLASS_JOIN_FULL);
... ... @@ -3413,12 +3430,16 @@ return /******/ (function(modules) { // webpackBootstrap
}
}
}, {
key: '_updateMCUConfInfoDesc',
value: function _updateMCUConfInfoDesc(mcuConfDesc) {
var info = this.mcuConfInfo.info;
info._conference_name = _ArrayBufferUtil2.default.uint8ArrayToStr(mcuConfDesc.name, 0);
info._capacity = mcuConfDesc.capacity;
info._mode = mcuConfDesc.mode;
key: '_updateMCUConfInfoDescription',
value: function _updateMCUConfInfoDescription(_data) {
// let _mcuConfDesc=new pdu['RCConferenceDescriptorPdu'].decode(mcuConfDesc);
loger.log('_updateMCUConfInfoDescription. _mcuConfDesc', _data);
//let classDescription=new pdu['RCConferenceDescriptorPdu'].decode(_data);
console.log(_data);
//let info = this.mcuClassInfo.info;
//info._conference_name = ArrayBufferUtil.uint8ArrayToStr(mcuConfDesc.name, 0);
//info._capacity = mcuConfDesc.capacity;
//info._mode = mcuConfDesc.mode;
}
// MU服务是否连接
... ... @@ -3455,34 +3476,34 @@ return /******/ (function(modules) { // webpackBootstrap
}, {
key: 'joinMCU',
value: function joinMCU(_confInfo) {
loger.log('开始建立EverSocket通道.', _confInfo);
_confInfo.confId = parseInt(_confInfo.confId); // confId 必须整形
this.confInfo = _confInfo;
value: function joinMCU(_classInfo) {
loger.log('开始建立EverSocket通道.', _classInfo);
_classInfo.classId = parseInt(_classInfo.classId); // classId 必须整形
this.classInfo = _classInfo;
// 创建刷新nodeId
this.confInfo.nodeId = _EngineUtils2.default.creatTimestamp();
_GlobalConfig2.default.nodeId = this.confInfo.nodeId; //这是标识自己身份的id
this.classInfo.nodeId = _EngineUtils2.default.creatTimestamp();
_GlobalConfig2.default.nodeId = this.classInfo.nodeId; //这是标识自己身份的id
var nodeInfoRecordPdu = new _index2.default['RCNodeInfoRecordPdu']();
nodeInfoRecordPdu.name = this.confInfo.userName;
nodeInfoRecordPdu.nodeId = this.confInfo.nodeId;
nodeInfoRecordPdu.userId = this.confInfo.userId;
nodeInfoRecordPdu.name = this.classInfo.userName;
nodeInfoRecordPdu.nodeId = this.classInfo.nodeId;
nodeInfoRecordPdu.userId = this.classInfo.userId;
nodeInfoRecordPdu.role = 1; //NR_NORMAL
nodeInfoRecordPdu.level = 0;
var conferenceRecord = {}; //RCConferenceRecord_T
conferenceRecord._conference_id = this.confInfo.confId;
conferenceRecord._top_node_id = this.confInfo.topNodeID;
conferenceRecord._conference_id = this.classInfo.classId;
conferenceRecord._top_node_id = this.classInfo.topNodeID;
this.mcuConfInfo = {}; //RCMeetingInfo_T
this.mcuConfInfo.self = nodeInfoRecordPdu;
this.mcuConfInfo.info = conferenceRecord;
this.mcuClassInfo = {}; //RCMeetingInfo_T
this.mcuClassInfo.self = nodeInfoRecordPdu;
this.mcuClassInfo.info = conferenceRecord;
// 内部mcuConfInfo
this.confInfo.mcuConfInfo = this.mcuConfInfo;
this.classInfo.mcuClassInfo = this.mcuClassInfo;
//开启EverSocket
this._everSocket.begin(this.confInfo.MCUServerIP, this.confInfo.MCUServerPort);
this._everSocket.begin(this.classInfo.MCUServerIP, this.classInfo.MCUServerPort);
}
}, {
key: 'connected',
... ... @@ -3782,7 +3803,7 @@ return /******/ (function(modules) { // webpackBootstrap
pduMsg.set("type", type);
pduMsg.set("subType", sub_type);
pduMsg.set("initiator", initiator);
pduMsg.set("confId", conference_id);
pduMsg.set("confId", conference_id); //***confId mcu服务用的是这个字段,客户端在其他地方统一为classId
pduMsg.set("sessionId", session_id);
pduMsg.set("channelId", channel_id);
pduMsg.set("upward", upward);
... ... @@ -14297,7 +14318,7 @@ return /******/ (function(modules) { // webpackBootstrap
Object.defineProperty(exports, "__esModule", {
value: true
});
var _default = "\n//start\n// pdu_def.proto\n\n// syntax = \"proto3\";\n\noption optimize_for = LITE_RUNTIME;\nenum RCPduPriority_E {\n DP_TOP = 0;\n DP_HIGH = 1;\n DP_MEDIUM = 2;\n DP_LOW = 3;\n}\n\nenum RCPduSegment_E {\n SEG_BEGIN = 0;\n SEG_END = 1;\n SEG_ONCE = 2;\n}\n\nenum RCPduTokenStatus_E {\n TS_NOT_IN_USE = 0;\n TS_SELF_GRABBED = 1;\n TS_OTHER_GRABBED = 2;\n TS_SELF_INHIBITED = 3;\n TS_OTHER_INHIBITED = 4;\n TS_SELF_RECIPIENT = 5;\n TS_SELF_GIVING = 6;\n TS_OTHER_GIVING = 7;\n}\n\nenum RCPduType_E {\n// GCC PDU\n RCPDU_CONNECT_PROVIDER_REQUEST = 0;\n RCPDU_CONNECT_PROVIDER_RESPONSE = 1;\n RCPDU_CONFERENCE_JOIN_REQUEST = 2;\n RCPDU_CONFERENCE_JOIN_RESPONSE = 3;\n RCPDU_CONFERENCE_INVITE_REQUEST = 10;\n RCPDU_CONFERENCE_INVITE_RESPONSE = 11;\n RCPDU_CONFERENCE_LOCK_REQUEST = 20;\n RCPDU_CONFERENCE_LOCK_RESPONSE = 21;\n RCPDU_CONFERENCE_LOCK_INDICATION = 22;\n RCPDU_CONFERENCE_UNLOCK_REQUEST = 30;\n RCPDU_CONFERENCE_UNLOCK_RESPONSE = 31;\n RCPDU_CONFERENCE_UNLOCK_INDICATION = 32;\n RCPDU_CONFERENCE_LEAVE_REQUEST = 39;\n RCPDU_CONFERENCE_TERMINATE_REQUEST = 40;\n RCPDU_CONFERENCE_TERMINATE_RESPONSE = 41;\n RCPDU_CONFERENCE_TERMINATE_INDICATION = 42;\n RCPDU_CONFERENCE_EJECT_USER_REQUEST = 50;\n RCPDU_CONFERENCE_EJECT_USER_RESPONSE = 51;\n RCPDU_CONFERENCE_EJECT_USER_INDICATION = 52;\n RCPDU_ROSTER_UPDATE_INDICATION = 60;\n RCPDU_REGISTRY_UPDATE_REQUEST = 70; // INCLUDE ALL OBJS OPERATION\n RCPDU_REGISTRY_UPDATE_RESPONSE = 71;\n RCPDU_REGISTRY_UPDATE_INDICATION = 72;\n RCPDU_FUNCTION_NOT_SUPPORTED_RESPONSE = 80;\n\n // MCS PDU\n RCPDU_SESSION_JOIN_REQUEST = 90;\n RCPDU_SESSION_JOIN_RESPONSE = 91;\n RCPDU_CHANNEL_GRAB_REQUEST = 100;\n RCPDU_CHANNEL_GRAB_RESPONSE = 101;\n RCPDU_CHANNEL_GRAB_INDICATION = 102;\n RCPDU_CHANNEL_JOIN_REQUEST = 103;\n RCPDU_CHANNEL_JOIN_RESPONSE = 104;\n RCPDU_CHANNEL_LEAVE_REQUEST = 105;\n RCPDU_CHANNEL_RELEASE_REQUEST = 106;\n RCPDU_CHANNEL_RELEASE_INDICATION = 107;\n RCPDU_SEND_DATA_REQUEST = 120;\n RCPDU_SEND_DATA_INDICATION = 121;\n RCPDU_UNIFORM_SEND_DATA_REQUEST = 125;\n RCPDU_UNIFORM_SEND_DATA_INDICATION = 126;\n RCPDU_TOKEN_GRAB_REQUEST = 130;\n RCPDU_TOKEN_GRAB_CONFIRM = 131;\n RCPDU_TOKEN_INHIBIT_REQUEST = 132;\n RCPDU_TOKEN_INHIBIT_CONFIRM = 133;\n RCPDU_TOKEN_GIVE_REQUEST = 134;\n RCPDU_TOKEN_GIVE_INDICATION = 135;\n RCPDU_TOKEN_GIVE_RESPONSE = 136;\n RCPDU_TOKEN_GIVE_CONFIRM = 137;\n RCPDU_TOKEN_PLEASE_REQUEST = 138;\n RCPDU_TOKEN_PLEASE_INDICATION = 139;\n RCPDU_TOKEN_RELEASE_REQUEST = 140;\n RCPDU_TOKEN_RELEASE_CONFIRM = 141;\n RCPDU_TOKEN_TEST_REQUEST = 142;\n RCPDU_TOKEN_TEST_CONFIRM = 143;\n\n // Registry PDU\n RCPDU_REG_REGISTER_KEY = 200;\n RCPDU_REG_UNREGISTER_KEY = 201;\n RCPDU_REG_REGISTER_ROSTER = 202;\n RCPDU_REG_REGISTER_TOKEN = 203;\n RCPDU_REG_REGISTER_PARAMETER = 204;\n RCPDU_REG_REGISTER_COUNTER = 205;\n RCPDU_REG_REGISTER_TABLE = 206;\n RCPDU_REG_REGISTER_CACHE = 207;\n RCPDU_REG_REGISTER_OBJ = 208;\n RCPDU_REG_UNREGISTER_OBJ = 209;\n RCPDU_REG_UPDATE_OBJ = 210;\n RCPDU_REG_ADAPTER = 211;\n RCPDU_REG_CLEANUP_NODE = 212;\n RCPDU_REG_REGISTER_QUEUE = 213;\n\n // Registry Obj update PDU\n RCPDU_REG_TABLE_INSERT_PDU = 230;\n RCPDU_REG_TABLE_DELETE_PDU = 231;\n RCPDU_REG_TABLE_UPDATE_PDU = 232;\n RCPDU_REG_ROSTER_INSERT_PDU = 240;\n RCPDU_REG_ROSTER_DELETE_PDU = 241;\n RCPDU_REG_ROSTER_UPDATE_PDU = 242;\n RCPDU_REG_PARAMETER_UPDATE_PDU = 250;\n RCPDU_REG_QUEUE_INSERT_PDU = 255;\n RCPDU_REG_QUEUE_DELETE_PDU = 256;\n RCPDU_REG_QUEUE_UPDATE_PDU = 257;\n\n // data\n RCPDU_CONFERENCE_SEND_DATA_REQUEST = 259;\n RCPDU_VIDEO_SEND_DATA_REQUEST = 260;\n RCPDU_AUDIO_SEND_DATA_REQUEST = 261;\n RCPDU_GIFT_SEND_DATA_REQUEST = 262;\n RCPDU_CHAT_SEND_DATA_REQUEST = 263;\n RCPDU_VOTING_POLL_RECORD = 265;\n\n // Registry resource request or response PDU\n RCPDU_REG_REQUEST_OBJ = 290;\n RCPDU_REG_RESPONSE_OBJ = 291;\n RCPDU_REG_COUNTER_REQUEST_PDU = 292;\n RCPDU_REG_COUNTER_RESPONSE_PDU = 293;\n\n // Index exchange\n RCPDU_INDEX_ADAPTER = 300;\n RCPDU_INDEX_SERVER_USERS = 301;\n RCPDU_INDEX_CONFERENCE_USER_JOINED = 302;\n RCPDU_INDEX_CONFERENCE_USER_EXITED = 303;\n RCPDU_INDEX_CONFERENCE_USERS = 304;\n}\n\nenum RCPduNodeType_E {\n NT_TERMINAL = 0;\n NT_MULTIPORT_TERMINAL = 1;\n NT_MCU = 2;\n}\n\nenum RCPduReason_E {\n RSN_USERINITIATED = 0;\n RSN_DISCONNECTED = 1;\n RSN_SUPER_LEFT = 2;\n}\n\nenum RCPduResult_E {\n RET_SUCCESS = 0;\n RET_USER_REJECTED = 1;\n RET_INVALID_CONFERENCE = 2;\n RET_INVALID_PASSWORD = 3;\n RET_INVALID_CONVENER_PASSWORD = 4;\n RET_CHALLENGE_RESPONSE_REQUIRED = 5;\n RET_INVALID_CHALLENGE_RESPONSE = 6;\n RET_NO_CONNECTION = 7;\n RET_FULL_CAPACITY = 8;\n}\n\nenum RCPduNodeCategory_E {\n NC_CONVENTIONAL = 0;\n NC_COUNTED = 1;\n NC_ANONYMOUS = 2;\n}\n\nmessage RCConferenceDescriptorPdu {\n required uint32 id = 1;\n required bytes name = 2;\n optional bytes description = 3;\n //optional string net_address = 4;\n optional uint32 mode = 4;\n optional string password = 5;\n optional uint32 capacity = 6;\n optional bytes user_data = 7;\n}\n\nmessage RCNodeRecordPdu {\n required uint32 id = 1;\n optional uint32 superior_node = 2;\n required RCPduNodeType_E type = 3;\n required string name = 4;\n required uint32 capability = 5;\n optional string net_address = 6;\n optional RCPduNodeCategory_E category = 7;\n}\n\nmessage RCApplicationRecordPdu {\n required uint32 id = 1; // session id\n required string name = 2;\n required string tag = 3;\n repeated uint32 channel_ids = 4 [packed = true];\n optional uint32 capability = 5;\n}\n\n//reg.proto\n\noption optimize_for = LITE_RUNTIME;\nmessage RCRegistryRegisterKeyPdu {\n required RCPduType_E type = 1 [default = RCPDU_REG_REGISTER_KEY];\n required uint32 id = 2;\n required string name = 3;\n required string tag = 4;\n optional bytes user_data = 5;\n}\n\nmessage RCRegistryUnregisterKeyPdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_UNREGISTER_KEY];\n required uint32 key_id = 2;\n}\n\nmessage RCRegistryRegisterObjPdu {\n optional RCPduType_E type = 1;\n required uint32 obj_id = 2;\n required string name = 3;\n required string tag = 4;\n optional uint32 owner = 5;\n optional bytes user_data = 6;\n}\n\nmessage RCRegistryUnregisterObjPdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_UNREGISTER_OBJ];\n required uint32 obj_id = 2;\n}\n\nmessage RCRegistryUpdateObjPdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_UPDATE_OBJ];\n required RCPduType_E sub_type = 2;\n required uint32 obj_id = 3;\n required bytes user_data = 4;\n}\n\nmessage RCAdapterItemPdu {\n required RCPduType_E type = 1;\n required bytes item_data = 2;\n}\n\n// adapter pdu that used to package a list of pdu.\nmessage RCAdapterPdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_ADAPTER];\n repeated RCAdapterItemPdu item = 2;\n}\n\n// table operation pdu\nmessage RCRegistryTableItemPdu {\n required uint32 item_idx = 1;\n required uint32 owner = 2;\n required bytes item_data = 3;\n optional uint32 register_obj_id=4;\n}\n\nmessage RCRegistryTableInsertItemPdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_TABLE_INSERT_PDU];\n repeated RCRegistryTableItemPdu items = 2;\n}\n\nmessage RCRegistryTableDeleteItemPdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_TABLE_DELETE_PDU];\n repeated uint32 item_idx = 2;\n}\n\nmessage RCRegistryTableUpdateItemPdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_TABLE_UPDATE_PDU];\n repeated RCRegistryTableItemPdu items = 2;\n}\n\n// roster operation pdu\nmessage RCRegistryRosterItemPdu {\n required uint32 node_id = 1;\n required bytes node_data = 2;\n}\nmessage RCRegistryWBItemPdu {\n required uint32 node_id = 1;\n required bytes node_data = 2;\n}\nmessage RCRegistryRosterInsertItemPdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_ROSTER_INSERT_PDU];\n repeated RCRegistryRosterItemPdu items = 2;\n}\n\nmessage RCRegistryRosterDeleteItemPdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_ROSTER_DELETE_PDU];\n required uint32 node_id = 2;\n}\n\nmessage RCRegistryRosterUpdateItemPdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_ROSTER_UPDATE_PDU];\n repeated RCRegistryRosterItemPdu items = 2;\n}\n\n//message RCCleanupNodePdu\n//{\n// optional RCPduType_E type = 1 [default = RCPDU_REG_CLEANUP_NODE];\n// required uint32 node_id = 2;\n//}\n\n// parameter operation pdu\nmessage RCRegistryParameterUpdatePdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_PARAMETER_UPDATE_PDU];\n required uint32 value = 2 [default = 0];\n optional uint32 begin_bit = 3 [default = 31];\n optional uint32 end_bit = 4;\n}\n\n// queue operation pdu\nmessage RCRegistryQueueItemPdu {\n required uint32 owner = 1;\n required uint32 item_id = 2;\n optional bytes item_data = 3;\n optional uint32 item_idx = 4;\n}\n\nmessage RCRegstryQueueInsertItemPdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_QUEUE_INSERT_PDU];\n repeated RCRegistryQueueItemPdu items = 2;\n}\n\nmessage RCRegistryQueueDeleteItemPdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_QUEUE_DELETE_PDU];\n required uint32 item_id = 2;\n}\n\nmessage RCRegistryQueueUpdateItemPdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_QUEUE_UPDATE_PDU];\n repeated RCRegistryQueueItemPdu items = 2;\n}\n\nmessage RCRegistryRequestObjPdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_REQUEST_OBJ];\n required RCPduType_E sub_type = 2;\n required uint32 obj_id = 3;\n required bytes user_data = 4;\n}\n\nmessage RCRegistryResponseObjPdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_RESPONSE_OBJ];\n required RCPduType_E sub_type = 2;\n required uint32 obj_id = 3;\n required bytes user_data = 4;\n}\n\nmessage RCRegistryCounterRequestPdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_COUNTER_REQUEST_PDU];\n required uint32 count = 2;\n}\n\nmessage RCRegistryCounterResponsePdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_COUNTER_RESPONSE_PDU];\n required uint32 start = 2;\n required uint32 end = 3;\n}\n\n// mcs\noption optimize_for = LITE_RUNTIME;\n\n// Session management\nmessage RCSessionJoinRequestPdu {\n required RCPduType_E type = 1 [default = RCPDU_SESSION_JOIN_REQUEST];\n required uint32 id = 2;\n required string name = 3;\n required string tag = 4;\n optional bytes session_data = 5; //\u805A\u5408\u5728\u4E00\u8D77\u7684registry\u4FE1\u606F\n}\n\nmessage RCSessionJoinResponsePdu {\n optional RCPduType_E type = 1 [default = RCPDU_SESSION_JOIN_RESPONSE];\n required uint32 id = 2;\n optional bytes response_data = 3;\n}\n\n// Channel management\nmessage RCChannelGrabRequestPdu {\n optional RCPduType_E type = 1 [default = RCPDU_CHANNEL_GRAB_REQUEST];\n required uint32 initiator = 2;\n required uint32 channel_id = 3;\n}\n\nmessage RCChannelGrabResponsePdu {\n optional RCPduType_E type = 1 [default = RCPDU_CHANNEL_GRAB_RESPONSE];\n required uint32 initiator = 2;\n required uint32 requested_channel_id = 3;\n required RCPduResult_E result = 4;\n optional uint32 channel_id = 5;\n}\n\nmessage RCChannelGrabIndicationPdu {\n optional RCPduType_E type = 1 [default = RCPDU_CHANNEL_GRAB_INDICATION];\n required uint32 initiator = 2;\n optional uint32 channel_id = 3;\n}\n\nmessage RCChannelJoinRequestPdu {\n required RCPduType_E type = 1 [default = RCPDU_CHANNEL_JOIN_REQUEST];\n required uint32 initiator = 2;\n required uint32 channel_id = 3;\n}\n\nmessage RCChannelJoinResponsePdu {\n optional RCPduType_E type = 1 [default = RCPDU_CHANNEL_JOIN_RESPONSE];\n required uint32 initiator = 2;\n required uint32 requested_channel_id = 3;\n required RCPduResult_E result = 4;\n}\n\nmessage RCChannelLeaveRequestPdu {\n optional RCPduType_E type = 1 [default = RCPDU_CHANNEL_LEAVE_REQUEST];\n required uint32 initiator = 2;\n repeated uint32 channel_ids = 3 [packed = true];\n}\n\nmessage RCChannelReleaseRequestPdu {\n optional RCPduType_E type = 1 [default = RCPDU_CHANNEL_RELEASE_REQUEST];\n required uint32 initiator = 2;\n required uint32 channel_id = 3;\n}\n\nmessage RCChannelReleaseIndicationPdu {\n optional RCPduType_E type = 1\n [default = RCPDU_CHANNEL_RELEASE_INDICATION];\n required uint32 initiator = 2;\n required uint32 channel_id = 3;\n}\n\n// Data transfer\nmessage RCSendDataPdu {\n required RCPduType_E type = 1 [default = RCPDU_SEND_DATA_REQUEST];\n required RCPduType_E sub_type = 2;\n required uint32 initiator = 3;\n required uint32 conf_id = 4;\n required uint32 session_id = 5;\n required uint32 channel_id = 6;\n required bool upward = 7;\n required bool reliability = 8;\n required RCPduPriority_E priority = 9;\n required bytes data = 10;\n optional uint32 peer = 11;\n optional RCPduSegment_E seg = 12;\n optional uint32 total_size = 13;\n optional uint32 site_id = 14;\n optional string user_id = 15;\n optional string user_name = 16;\n optional string user_role = 17;\n optional string device_type = 18;\n optional string site = 19;\n}\n\n// Token management\nmessage RCTokenGrabRequestPdu {\n optional RCPduType_E type = 1 [default = RCPDU_TOKEN_GRAB_REQUEST];\n required uint32 initiator = 2;\n required uint32 token_id = 3;\n}\n\nmessage RCTokenGrabConfirmPdu {\n optional RCPduType_E type = 1 [default = RCPDU_TOKEN_GRAB_CONFIRM];\n required uint32 initiator = 2;\n required uint32 token_id = 3;\n required RCPduResult_E result = 4;\n required RCPduTokenStatus_E status = 5;\n}\n\nmessage RCTokenInhibitRequestPdu {\n optional RCPduType_E type = 1 [default = RCPDU_TOKEN_INHIBIT_REQUEST];\n required uint32 initiator = 2;\n required uint32 token_id = 3;\n}\n\nmessage RCTokenInhibitConfirmPdu {\n optional RCPduType_E type = 1 [default = RCPDU_TOKEN_INHIBIT_CONFIRM];\n required uint32 initiator = 2;\n required uint32 token_id = 3;\n required RCPduResult_E result = 4;\n required RCPduTokenStatus_E status = 5;\n}\n\nmessage RCTokenGiveRequestPdu {\n optional RCPduType_E type = 1 [default = RCPDU_TOKEN_GIVE_REQUEST];\n required uint32 initiator = 2;\n required uint32 token_id = 3;\n required uint64 recipient = 4;\n}\n\nmessage RCTokenGiveIndicationPdu {\n optional RCPduType_E type = 1 [default = RCPDU_TOKEN_GIVE_INDICATION];\n required uint32 initiator = 2;\n required uint32 token_id = 3;\n required uint64 recipient = 4;\n}\n\nmessage RCTokenGiveResponsePdu {\n optional RCPduType_E type = 1 [default = RCPDU_TOKEN_GIVE_RESPONSE];\n required uint32 token_id = 2;\n required uint64 recipient = 3;\n required RCPduResult_E result = 4;\n}\n\nmessage RCTokenGiveConfirmPdu {\n optional RCPduType_E type = 1 [default = RCPDU_TOKEN_GIVE_CONFIRM];\n required uint32 token_id = 2;\n required uint64 recipient = 3;\n required RCPduResult_E result = 4;\n required RCPduTokenStatus_E status = 5;\n}\n\nmessage RCTokenPleaseRequestPdu {\n optional RCPduType_E type = 1 [default = RCPDU_TOKEN_PLEASE_REQUEST];\n required uint32 initiator = 2;\n required uint32 token_id = 3;\n}\n\nmessage RCTokenPleaseIndicationPdu {\n optional RCPduType_E type = 1 [default = RCPDU_TOKEN_PLEASE_INDICATION];\n required uint32 initiator = 2;\n required uint32 token_id = 3;\n}\n\nmessage RCTokenReleaseRequestPdu {\n optional RCPduType_E type = 1 [default = RCPDU_TOKEN_RELEASE_REQUEST];\n required uint32 initiator = 2;\n required uint32 token_id = 3;\n}\n\nmessage RCTokenReleaseConfirmPdu {\n optional RCPduType_E type = 1 [default = RCPDU_TOKEN_TEST_REQUEST];\n required uint32 initiator = 2;\n required uint32 token_id = 3;\n required RCPduResult_E result = 4;\n required RCPduTokenStatus_E status = 5;\n}\n\nmessage RCTokenTestRequestPdu {\n optional RCPduType_E type = 1 [default = RCPDU_TOKEN_TEST_REQUEST];\n required uint32 initiator = 2;\n required uint32 token_id = 3;\n}\n\nmessage RCTokenTestConfirmPdu {\n optional RCPduType_E type = 1 [default = RCPDU_TOKEN_TEST_CONFIRM];\n required uint32 initiator = 2;\n required uint32 token_id = 3;\n required RCPduTokenStatus_E status = 4;\n}\n\n//gcc.proto\n\noption optimize_for = LITE_RUNTIME;\nmessage RCConferenceJoinRequestPdu {\n required RCPduType_E type = 1 [default = RCPDU_CONFERENCE_JOIN_REQUEST];\n required uint32 initiator = 2;\n required RCPduNodeType_E node_type = 3;\n required RCConferenceDescriptorPdu conf_desc = 4;\n}\n\nmessage RCConferenceJoinResponsePdu {\n optional RCPduType_E type = 1 [default = RCPDU_CONFERENCE_JOIN_RESPONSE];\n required uint32 conf_id = 2;\n required RCPduResult_E result = 3;\n optional RCConferenceDescriptorPdu conf_desc = 4;\n}\n\nmessage RCConferenceInviteRequestPdu {\n optional RCPduType_E type = 1 [default = RCPDU_CONFERENCE_INVITE_REQUEST];\n required uint32 initiator = 2;\n required RCConferenceDescriptorPdu conf_desc = 3;\n}\n\nmessage RCConferenceInviteResponsePdu {\n optional RCPduType_E type = 1\n [default = RCPDU_CONFERENCE_INVITE_RESPONSE];\n required RCPduResult_E result = 2;\n optional bytes user_data = 3;\n}\n\nmessage RCConferenceLockRequestPdu {\n optional RCPduType_E type = 1 [default = RCPDU_CONFERENCE_LOCK_REQUEST];\n}\n\nmessage RCConferenceLockResponsePdu {\n optional RCPduType_E type = 1 [default = RCPDU_CONFERENCE_LOCK_RESPONSE];\n required RCPduResult_E result = 2;\n}\n\nmessage RCConferenceLockIndicationPdu {\n optional RCPduType_E type = 1\n [default = RCPDU_CONFERENCE_LOCK_INDICATION];\n}\n\nmessage RCConferenceUnlockRequestPdu {\n optional RCPduType_E type = 1 [default = RCPDU_CONFERENCE_UNLOCK_REQUEST];\n}\n\nmessage RCConferenceUnlockResponsePdu {\n optional RCPduType_E type = 1\n [default = RCPDU_CONFERENCE_UNLOCK_RESPONSE];\n required RCPduResult_E result = 2;\n}\n\nmessage RCConferenceUnlockIndicationPdu {\n optional RCPduType_E type = 1\n [default = RCPDU_CONFERENCE_UNLOCK_INDICATION];\n}\n\nmessage RCConferenceLeaveRequestPdu {\n optional RCPduType_E type = 1 [default = RCPDU_CONFERENCE_LEAVE_REQUEST];\n required RCPduReason_E reason = 2;\n}\n\nmessage RCConferenceTerminateRequestPdu {\n optional RCPduType_E type = 1\n [default = RCPDU_CONFERENCE_TERMINATE_REQUEST];\n required RCPduReason_E reason = 2;\n}\n\nmessage RCConferenceTerminateResponsePdu {\n optional RCPduType_E type = 1\n [default = RCPDU_CONFERENCE_TERMINATE_RESPONSE];\n required RCPduResult_E result = 2;\n}\n\nmessage RCConferenceTerminateIndicationPdu { // MCS_Uniform_Send_Data on GCC_Broadcast_Channel\n optional RCPduType_E type = 1\n [default = RCPDU_CONFERENCE_TERMINATE_INDICATION];\n required RCPduReason_E reason = 2;\n}\n\nmessage RCConferenceEjectUserRequestPdu { // MCS_Send_Data on Node ID Channel of Top GCC\n optional RCPduType_E type = 1\n [default = RCPDU_CONFERENCE_EJECT_USER_REQUEST];\n required uint32 ejected_node_id = 2;\n required RCPduReason_E reason = 3;\n}\n\nmessage RCConferenceEjectUserResponsePdu { // MCS_Send_Data on Node ID Channel of requester\n optional RCPduType_E type = 1\n [default = RCPDU_CONFERENCE_EJECT_USER_RESPONSE];\n required uint32 ejected_node_id = 2;\n required RCPduResult_E result = 3;\n}\n\nmessage RCConferenceEjectUserIndicationPdu { // MCS_Uniform_Send_Data on GCC_Broadcast_Channel\n optional RCPduType_E type = 1\n [default = RCPDU_CONFERENCE_EJECT_USER_INDICATION];\n required uint32 ejected_node_id = 2;\n required RCPduReason_E reason = 3;\n}\n\nmessage RCRosterUpdateIndicationPdu { // MCS_Send_Data on Node ID Channel or\n// MCS_Uniform_Send_Data on GCC_Broadcast_Channel\n optional RCPduType_E type = 1 [default = RCPDU_ROSTER_UPDATE_INDICATION];\n required bool full_refresh = 2; // Conference Roster and all\n repeated RCNodeRecordPdu node_record = 3;\n repeated RCApplicationRecordPdu app_record = 4;\n}\n\nmessage RCRegistryUpdateRequestPdu { // MCS_Send_Data on Node ID Channel of Top GCC\n optional RCPduType_E type = 1 [default = RCPDU_REGISTRY_UPDATE_REQUEST];\n required uint32 key_id = 2;\n required uint32 obj_id = 3;\n required bytes user_data = 4;\n}\n\nmessage RCRegistryUpdateIndicationPdu { // MCS_Send_Data on Node ID Channel of Top GCC\n optional RCPduType_E type = 1 [default = RCPDU_REGISTRY_UPDATE_RESPONSE];\n required uint32 key_id = 2;\n required uint32 obj_id = 3;\n required bytes user_data = 4;\n}\n\nmessage RCRegistryUpdateResponsePdu { // MCS_Send_Data on Node ID Channel of requester\n optional RCPduType_E type = 1 [default = RCPDU_REGISTRY_UPDATE_INDICATION];\n required uint32 key_id = 2;\n required uint32 obj_id = 3;\n required RCPduResult_E result = 4;\n}\n\nmessage RCFunctionNotSupportedResponsePdu {\n optional RCPduType_E type = 1\n [default = RCPDU_FUNCTION_NOT_SUPPORTED_RESPONSE];\n required uint32 request_pdu_id = 2;\n}\n\n//ape.proto\n\noption optimize_for = LITE_RUNTIME;\nmessage RCConferenceSendDataRequestPdu {\n optional uint32 initiator = 1;\n optional uint32 peer = 2;\n required bool is_public = 3;\n required bytes user_data = 4;\n}\n\nmessage RCChatSendDataRequestPdu {\n optional uint32 initiator = 1;\n optional uint32 peer = 2;\n required bool is_public = 3;\n required bytes user_data = 4;\n required string from_role = 5;\n required bytes from_name = 6;\n}\n\nmessage RCDocSendDataRequestPdu {\n required uint32 id = 1;\n required string doc_type = 2;\n required string uri = 3;\n optional uint32 owner = 4;\n optional uint32 from = 5;\n optional string name = 6;\n optional uint32 cur_page_no = 7;\n optional uint32 cur_H = 8;\n optional uint32 cur_V = 9;\n optional uint32 scale = 10;\n optional uint32 page_num = 11;\n}\nmessage RCDocSendDataModelPdu {\n required uint32 item_idx=1;//\u552F\u4E00\u6807\u8BC6\n required uint32 owner=2;\n optional uint32 from=3;\n optional uint32 cur_page_no=4;\n optional uint32 page_num =5;\n optional string file_type=6;\n optional string creat_user_id=7;//\u521B\u5EFA\u6587\u6863userid\n optional string relative_url=8;//\u6587\u6863\u76F8\u5BF9\u5730\u5740\n optional string url =9;//\u6587\u6863\u5730\u5740\n optional uint32 cur_V=10;\n optional uint32 cur_H=11;\n optional uint32 scale=12;\n optional bool visible=13;\n optional uint32 action=14;//0\uFF0C\u65E0\u64CD\u4F5C\uFF0C 1\u7FFB\u9875\u30012.\u663E\u793A/\u9690\u85CF\n optional string doc_id=15;//\u6587\u6863\u5728\u670D\u52A1\u5668\u6570\u636E\u5E93\u4E2D\u7684\u552F\u4E00id\n optional string file_name=16;//\u6587\u6863\u7684\u540D\u5B57\n optional string dynamic_TS=17;//\"dynamicTransferStatic\": \"0\"\n optional string md5=18;//md5\n\n}\nmessage RCGiftSendDataRequestPdu {\n optional uint32 initiator = 1;\n required uint32 peer = 2;\n required uint32 index = 3;\n required uint32 num = 4;\n optional bytes user_data = 5;\n}\n\nmessage RCAudioSendDataRequestPdu {\n optional uint32 initiator = 1;\n required bytes user_data = 2;\n}\n\nmessage RCVideoSendDataRequestPdu {\n optional uint32 initiator = 1;\n required bool key_frame = 2;\n required uint32 sequence_id = 3;\n required uint32 slice_id = 4;\n required bytes user_data = 5;\n}\n\nmessage RCAudioChannelInfoRecordPdu {\n required uint32 status = 1;\n required uint32 device_id = 2;\n required uint32 framerate = 3;\n required uint32 bitrate = 4;\n required uint32 codec = 5;\n}\n\nmessage RCVideoChannelInfoRecordPdu {\n optional uint32 status = 1;\n optional uint32 device_id = 2;\n optional uint32 width = 3;\n optional uint32 height = 4;\n optional uint32 framerate = 5;\n optional uint32 bitrate = 6;\n optional uint32 codec = 7;\n optional string peer_id = 8;\n optional string url = 9;\n optional uint32 type = 10;\n optional string shamlive = 11;\n optional uint32 livetype = 12;\n optional uint32 releaseGrab = 13;\n optional string curTime = 14;\n}\n\nmessage RCAudioDeviceInfoRecordPdu {\n required uint32 device_id = 1;\n required string device_name = 2;\n}\n\nmessage RCVideoDeviceInfoRecordPdu {\n required uint32 device_id = 1;\n required string device_name = 2;\n}\n\nmessage RCNodeInfoRecordPdu {\n required uint32 node_id = 1;\n required string name = 2;\n required uint32 role = 3;\n required uint32 level = 4;\n repeated RCAudioDeviceInfoRecordPdu audio_records = 5;\n repeated RCVideoDeviceInfoRecordPdu video_records = 6;\n optional uint32 status = 7;\n optional bytes user_data = 8;\n optional string user_id = 9;\n optional uint32 handUpTime = 10;\n optional uint32 deviceType = 11;\n optional uint32 mobileDirection = 12;\n}\n\nmessage RCVotingPollSettingsPdu {\n required bool timer = 1;\n optional uint32 time_limit = 2;\n optional uint32 total_score = 3;\n}\n\nmessage RCVotingPollResultPdu {\n required string title = 1;\n required string content = 2;\n optional uint32 score = 3;\n}\n\nmessage RCVotingPollQuestionPdu {\n required uint32 index = 1;\n required uint32 type = 2;\n required string title = 3;\n repeated string options = 4;\n optional uint32 score = 5;\n optional uint32 time_limit = 6;\n optional string restrict_input = 7;\n optional uint32 char_limit = 8;\n optional string answer = 9;\n repeated uint32 selections = 10;\n repeated string responses = 11;\n}\n\nmessage RCVotingPollRecordPdu {\n required RCVotingPollSettingsPdu settings = 1;\n required string title = 2;\n repeated RCVotingPollResultPdu results = 3;\n repeated RCVotingPollQuestionPdu questions = 4;\n}\n\nmessage RCNodeInfoUserDataPdu {\n optional string qq = 1;\n optional string skype = 2;\n optional string mobile = 3;\n}\nmessage RCTabUpdateDataRequestPdu {\n optional uint32 id = 1;\n optional bytes action = 2;\n optional uint32 uncomprLen =3;\n}\n\nmessage RCWhiteBoardDataModel {\n required uint32 type= 1;//\u767D\u677F\u7C7B\u578B\n required uint32 itemIdx= 2;//itemIdx \u6BCF\u4E00\u6B21\u7ED8\u5236\u7684\u552F\u4E00\u6807\u8BC6\n required uint32 initiator=3; //\u7ED8\u5236\u6765\u81EA\u8C01\n required uint32 parentId=4; //\u7236\u7EA7\u7684id\n required uint32 curPage= 5;//\u9875\u7801\n optional string pointGroup=6; //\u5750\u6807\u70B9\u96C6\u6570\u7EC4\u7684JSON\u5B57\u7B26\u4E32\n optional string color=7 [default = \"#000000\"]; //\u989C\u8272\n optional uint32 thickness= 8 ;//\u7EBF\u6761\u7C97\u7EC6\n optional uint32 radius= 9;//\u56ED\u7684\u534A\u5F84\n optional uint32 fontSize= 10;//\u5B57\u4F53\u5927\u5C0F\n optional string fontName= 11;//\u5B57\u4F53\u540D\u79F0\n optional string text= 12;//\u6587\u672C\u5185\u5BB9\n optional bytes data = 13;//\u6682\u65F6\u9884\u7559\u7684\u53C2\u6570\n}\nmessage RCClassSendDataModelPdu {\n optional uint32 class_status= 1;//\u5F53\u524D\u8BFE\u5802\u72B6\u6001 //0:\u672A\u5F00\u59CB\uFF0C1\uFF0C\u5F00\u59CB\uFF0C2\uFF0C\u6682\u505C\n optional uint32 class_timestamp= 2;//\u76EE\u524D\u7528\u8FD9\u4E2A\u53D8\u91CF\u6765\u8BB0\u5F55\u65F6\u95F4 flash\u7528\u7684\u8FD9\u4E2A\n optional uint32 item_idx=3;\n optional uint32 from=4;\n}\n\n//end\n";
var _default = "\n//start\n// pdu_def.proto\n\n// syntax = \"proto3\";\n\noption optimize_for = LITE_RUNTIME;\nenum RCPduPriority_E {\n DP_TOP = 0;\n DP_HIGH = 1;\n DP_MEDIUM = 2;\n DP_LOW = 3;\n}\n\nenum RCPduSegment_E {\n SEG_BEGIN = 0;\n SEG_END = 1;\n SEG_ONCE = 2;\n}\n\nenum RCPduTokenStatus_E {\n TS_NOT_IN_USE = 0;\n TS_SELF_GRABBED = 1;\n TS_OTHER_GRABBED = 2;\n TS_SELF_INHIBITED = 3;\n TS_OTHER_INHIBITED = 4;\n TS_SELF_RECIPIENT = 5;\n TS_SELF_GIVING = 6;\n TS_OTHER_GIVING = 7;\n}\n\nenum RCPduType_E {\n// GCC PDU\n RCPDU_CONNECT_PROVIDER_REQUEST = 0;\n RCPDU_CONNECT_PROVIDER_RESPONSE = 1;\n RCPDU_CONFERENCE_JOIN_REQUEST = 2;\n RCPDU_CONFERENCE_JOIN_RESPONSE = 3;\n RCPDU_CONFERENCE_INVITE_REQUEST = 10;\n RCPDU_CONFERENCE_INVITE_RESPONSE = 11;\n RCPDU_CONFERENCE_LOCK_REQUEST = 20;\n RCPDU_CONFERENCE_LOCK_RESPONSE = 21;\n RCPDU_CONFERENCE_LOCK_INDICATION = 22;\n RCPDU_CONFERENCE_UNLOCK_REQUEST = 30;\n RCPDU_CONFERENCE_UNLOCK_RESPONSE = 31;\n RCPDU_CONFERENCE_UNLOCK_INDICATION = 32;\n RCPDU_CONFERENCE_LEAVE_REQUEST = 39;\n RCPDU_CONFERENCE_TERMINATE_REQUEST = 40;\n RCPDU_CONFERENCE_TERMINATE_RESPONSE = 41;\n RCPDU_CONFERENCE_TERMINATE_INDICATION = 42;\n RCPDU_CONFERENCE_EJECT_USER_REQUEST = 50;\n RCPDU_CONFERENCE_EJECT_USER_RESPONSE = 51;\n RCPDU_CONFERENCE_EJECT_USER_INDICATION = 52;\n RCPDU_ROSTER_UPDATE_INDICATION = 60;\n RCPDU_REGISTRY_UPDATE_REQUEST = 70; // INCLUDE ALL OBJS OPERATION\n RCPDU_REGISTRY_UPDATE_RESPONSE = 71;\n RCPDU_REGISTRY_UPDATE_INDICATION = 72;\n RCPDU_FUNCTION_NOT_SUPPORTED_RESPONSE = 80;\n\n // MCS PDU\n RCPDU_SESSION_JOIN_REQUEST = 90;\n RCPDU_SESSION_JOIN_RESPONSE = 91;\n RCPDU_CHANNEL_GRAB_REQUEST = 100;\n RCPDU_CHANNEL_GRAB_RESPONSE = 101;\n RCPDU_CHANNEL_GRAB_INDICATION = 102;\n RCPDU_CHANNEL_JOIN_REQUEST = 103;\n RCPDU_CHANNEL_JOIN_RESPONSE = 104;\n RCPDU_CHANNEL_LEAVE_REQUEST = 105;\n RCPDU_CHANNEL_RELEASE_REQUEST = 106;\n RCPDU_CHANNEL_RELEASE_INDICATION = 107;\n RCPDU_SEND_DATA_REQUEST = 120;\n RCPDU_SEND_DATA_INDICATION = 121;\n RCPDU_UNIFORM_SEND_DATA_REQUEST = 125;\n RCPDU_UNIFORM_SEND_DATA_INDICATION = 126;\n RCPDU_TOKEN_GRAB_REQUEST = 130;\n RCPDU_TOKEN_GRAB_CONFIRM = 131;\n RCPDU_TOKEN_INHIBIT_REQUEST = 132;\n RCPDU_TOKEN_INHIBIT_CONFIRM = 133;\n RCPDU_TOKEN_GIVE_REQUEST = 134;\n RCPDU_TOKEN_GIVE_INDICATION = 135;\n RCPDU_TOKEN_GIVE_RESPONSE = 136;\n RCPDU_TOKEN_GIVE_CONFIRM = 137;\n RCPDU_TOKEN_PLEASE_REQUEST = 138;\n RCPDU_TOKEN_PLEASE_INDICATION = 139;\n RCPDU_TOKEN_RELEASE_REQUEST = 140;\n RCPDU_TOKEN_RELEASE_CONFIRM = 141;\n RCPDU_TOKEN_TEST_REQUEST = 142;\n RCPDU_TOKEN_TEST_CONFIRM = 143;\n\n // Registry PDU\n RCPDU_REG_REGISTER_KEY = 200;\n RCPDU_REG_UNREGISTER_KEY = 201;\n RCPDU_REG_REGISTER_ROSTER = 202;\n RCPDU_REG_REGISTER_TOKEN = 203;\n RCPDU_REG_REGISTER_PARAMETER = 204;\n RCPDU_REG_REGISTER_COUNTER = 205;\n RCPDU_REG_REGISTER_TABLE = 206;\n RCPDU_REG_REGISTER_CACHE = 207;\n RCPDU_REG_REGISTER_OBJ = 208;\n RCPDU_REG_UNREGISTER_OBJ = 209;\n RCPDU_REG_UPDATE_OBJ = 210;\n RCPDU_REG_ADAPTER = 211;\n RCPDU_REG_CLEANUP_NODE = 212;\n RCPDU_REG_REGISTER_QUEUE = 213;\n\n // Registry Obj update PDU\n RCPDU_REG_TABLE_INSERT_PDU = 230;\n RCPDU_REG_TABLE_DELETE_PDU = 231;\n RCPDU_REG_TABLE_UPDATE_PDU = 232;\n RCPDU_REG_ROSTER_INSERT_PDU = 240;\n RCPDU_REG_ROSTER_DELETE_PDU = 241;\n RCPDU_REG_ROSTER_UPDATE_PDU = 242;\n RCPDU_REG_PARAMETER_UPDATE_PDU = 250;\n RCPDU_REG_QUEUE_INSERT_PDU = 255;\n RCPDU_REG_QUEUE_DELETE_PDU = 256;\n RCPDU_REG_QUEUE_UPDATE_PDU = 257;\n\n // data\n RCPDU_CONFERENCE_SEND_DATA_REQUEST = 259;\n RCPDU_VIDEO_SEND_DATA_REQUEST = 260;\n RCPDU_AUDIO_SEND_DATA_REQUEST = 261;\n RCPDU_GIFT_SEND_DATA_REQUEST = 262;\n RCPDU_CHAT_SEND_DATA_REQUEST = 263;\n RCPDU_VOTING_POLL_RECORD = 265;\n\n // Registry resource request or response PDU\n RCPDU_REG_REQUEST_OBJ = 290;\n RCPDU_REG_RESPONSE_OBJ = 291;\n RCPDU_REG_COUNTER_REQUEST_PDU = 292;\n RCPDU_REG_COUNTER_RESPONSE_PDU = 293;\n\n // Index exchange\n RCPDU_INDEX_ADAPTER = 300;\n RCPDU_INDEX_SERVER_USERS = 301;\n RCPDU_INDEX_CONFERENCE_USER_JOINED = 302;\n RCPDU_INDEX_CONFERENCE_USER_EXITED = 303;\n RCPDU_INDEX_CONFERENCE_USERS = 304;\n}\n\nenum RCPduNodeType_E {\n NT_TERMINAL = 0;\n NT_MULTIPORT_TERMINAL = 1;\n NT_MCU = 2;\n}\n\nenum RCPduReason_E {\n RSN_USERINITIATED = 0;\n RSN_DISCONNECTED = 1;\n RSN_SUPER_LEFT = 2;\n}\n\nenum RCPduResult_E {\n RET_SUCCESS = 0;\n RET_USER_REJECTED = 1;\n RET_INVALID_CONFERENCE = 2;\n RET_INVALID_PASSWORD = 3;\n RET_INVALID_CONVENER_PASSWORD = 4;\n RET_CHALLENGE_RESPONSE_REQUIRED = 5;\n RET_INVALID_CHALLENGE_RESPONSE = 6;\n RET_NO_CONNECTION = 7;\n RET_FULL_CAPACITY = 8;\n}\n\nenum RCPduNodeCategory_E {\n NC_CONVENTIONAL = 0;\n NC_COUNTED = 1;\n NC_ANONYMOUS = 2;\n}\n\nmessage RCConferenceDescriptorPdu {\n required uint32 id = 1;\n required string name = 2;\n optional bytes description = 3;\n optional uint32 mode = 4;\n optional string password = 5;\n optional uint32 capacity = 6;\n optional bytes user_data = 7;\n}\n\nmessage RCNodeRecordPdu {\n required uint32 id = 1;\n optional uint32 superior_node = 2;\n required RCPduNodeType_E type = 3;\n required string name = 4;\n required uint32 capability = 5;\n optional string net_address = 6;\n optional RCPduNodeCategory_E category = 7;\n}\n\nmessage RCApplicationRecordPdu {\n required uint32 id = 1; // session id\n required string name = 2;\n required string tag = 3;\n repeated uint32 channel_ids = 4 [packed = true];\n optional uint32 capability = 5;\n}\n\n//reg.proto\n\noption optimize_for = LITE_RUNTIME;\nmessage RCRegistryRegisterKeyPdu {\n required RCPduType_E type = 1 [default = RCPDU_REG_REGISTER_KEY];\n required uint32 id = 2;\n required string name = 3;\n required string tag = 4;\n optional bytes user_data = 5;\n}\n\nmessage RCRegistryUnregisterKeyPdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_UNREGISTER_KEY];\n required uint32 key_id = 2;\n}\n\nmessage RCRegistryRegisterObjPdu {\n optional RCPduType_E type = 1;\n required uint32 obj_id = 2;\n required string name = 3;\n required string tag = 4;\n optional uint32 owner = 5;\n optional bytes user_data = 6;\n}\n\nmessage RCRegistryUnregisterObjPdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_UNREGISTER_OBJ];\n required uint32 obj_id = 2;\n}\n\nmessage RCRegistryUpdateObjPdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_UPDATE_OBJ];\n required RCPduType_E sub_type = 2;\n required uint32 obj_id = 3;\n required bytes user_data = 4;\n}\n\nmessage RCAdapterItemPdu {\n required RCPduType_E type = 1;\n required bytes item_data = 2;\n}\n\n// adapter pdu that used to package a list of pdu.\nmessage RCAdapterPdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_ADAPTER];\n repeated RCAdapterItemPdu item = 2;\n}\n\n// table operation pdu\nmessage RCRegistryTableItemPdu {\n required uint32 item_idx = 1;\n required uint32 owner = 2;\n required bytes item_data = 3;\n optional uint32 register_obj_id=4;\n}\n\nmessage RCRegistryTableInsertItemPdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_TABLE_INSERT_PDU];\n repeated RCRegistryTableItemPdu items = 2;\n}\n\nmessage RCRegistryTableDeleteItemPdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_TABLE_DELETE_PDU];\n repeated uint32 item_idx = 2;\n}\n\nmessage RCRegistryTableUpdateItemPdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_TABLE_UPDATE_PDU];\n repeated RCRegistryTableItemPdu items = 2;\n}\n\n// roster operation pdu\nmessage RCRegistryRosterItemPdu {\n required uint32 node_id = 1;\n required bytes node_data = 2;\n}\nmessage RCRegistryWBItemPdu {\n required uint32 node_id = 1;\n required bytes node_data = 2;\n}\nmessage RCRegistryRosterInsertItemPdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_ROSTER_INSERT_PDU];\n repeated RCRegistryRosterItemPdu items = 2;\n}\n\nmessage RCRegistryRosterDeleteItemPdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_ROSTER_DELETE_PDU];\n required uint32 node_id = 2;\n}\n\nmessage RCRegistryRosterUpdateItemPdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_ROSTER_UPDATE_PDU];\n repeated RCRegistryRosterItemPdu items = 2;\n}\n\n//message RCCleanupNodePdu\n//{\n// optional RCPduType_E type = 1 [default = RCPDU_REG_CLEANUP_NODE];\n// required uint32 node_id = 2;\n//}\n\n// parameter operation pdu\nmessage RCRegistryParameterUpdatePdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_PARAMETER_UPDATE_PDU];\n required uint32 value = 2 [default = 0];\n optional uint32 begin_bit = 3 [default = 31];\n optional uint32 end_bit = 4;\n}\n\n// queue operation pdu\nmessage RCRegistryQueueItemPdu {\n required uint32 owner = 1;\n required uint32 item_id = 2;\n optional bytes item_data = 3;\n optional uint32 item_idx = 4;\n}\n\nmessage RCRegstryQueueInsertItemPdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_QUEUE_INSERT_PDU];\n repeated RCRegistryQueueItemPdu items = 2;\n}\n\nmessage RCRegistryQueueDeleteItemPdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_QUEUE_DELETE_PDU];\n required uint32 item_id = 2;\n}\n\nmessage RCRegistryQueueUpdateItemPdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_QUEUE_UPDATE_PDU];\n repeated RCRegistryQueueItemPdu items = 2;\n}\n\nmessage RCRegistryRequestObjPdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_REQUEST_OBJ];\n required RCPduType_E sub_type = 2;\n required uint32 obj_id = 3;\n required bytes user_data = 4;\n}\n\nmessage RCRegistryResponseObjPdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_RESPONSE_OBJ];\n required RCPduType_E sub_type = 2;\n required uint32 obj_id = 3;\n required bytes user_data = 4;\n}\n\nmessage RCRegistryCounterRequestPdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_COUNTER_REQUEST_PDU];\n required uint32 count = 2;\n}\n\nmessage RCRegistryCounterResponsePdu {\n optional RCPduType_E type = 1 [default = RCPDU_REG_COUNTER_RESPONSE_PDU];\n required uint32 start = 2;\n required uint32 end = 3;\n}\n\n// mcs\noption optimize_for = LITE_RUNTIME;\n\n// Session management\nmessage RCSessionJoinRequestPdu {\n required RCPduType_E type = 1 [default = RCPDU_SESSION_JOIN_REQUEST];\n required uint32 id = 2;\n required string name = 3;\n required string tag = 4;\n optional bytes session_data = 5; //\u805A\u5408\u5728\u4E00\u8D77\u7684registry\u4FE1\u606F\n}\n\nmessage RCSessionJoinResponsePdu {\n optional RCPduType_E type = 1 [default = RCPDU_SESSION_JOIN_RESPONSE];\n required uint32 id = 2;\n optional bytes response_data = 3;\n}\n\n// Channel management\nmessage RCChannelGrabRequestPdu {\n optional RCPduType_E type = 1 [default = RCPDU_CHANNEL_GRAB_REQUEST];\n required uint32 initiator = 2;\n required uint32 channel_id = 3;\n}\n\nmessage RCChannelGrabResponsePdu {\n optional RCPduType_E type = 1 [default = RCPDU_CHANNEL_GRAB_RESPONSE];\n required uint32 initiator = 2;\n required uint32 requested_channel_id = 3;\n required RCPduResult_E result = 4;\n optional uint32 channel_id = 5;\n}\n\nmessage RCChannelGrabIndicationPdu {\n optional RCPduType_E type = 1 [default = RCPDU_CHANNEL_GRAB_INDICATION];\n required uint32 initiator = 2;\n optional uint32 channel_id = 3;\n}\n\nmessage RCChannelJoinRequestPdu {\n required RCPduType_E type = 1 [default = RCPDU_CHANNEL_JOIN_REQUEST];\n required uint32 initiator = 2;\n required uint32 channel_id = 3;\n}\n\nmessage RCChannelJoinResponsePdu {\n optional RCPduType_E type = 1 [default = RCPDU_CHANNEL_JOIN_RESPONSE];\n required uint32 initiator = 2;\n required uint32 requested_channel_id = 3;\n required RCPduResult_E result = 4;\n}\n\nmessage RCChannelLeaveRequestPdu {\n optional RCPduType_E type = 1 [default = RCPDU_CHANNEL_LEAVE_REQUEST];\n required uint32 initiator = 2;\n repeated uint32 channel_ids = 3 [packed = true];\n}\n\nmessage RCChannelReleaseRequestPdu {\n optional RCPduType_E type = 1 [default = RCPDU_CHANNEL_RELEASE_REQUEST];\n required uint32 initiator = 2;\n required uint32 channel_id = 3;\n}\n\nmessage RCChannelReleaseIndicationPdu {\n optional RCPduType_E type = 1\n [default = RCPDU_CHANNEL_RELEASE_INDICATION];\n required uint32 initiator = 2;\n required uint32 channel_id = 3;\n}\n\n// Data transfer\nmessage RCSendDataPdu {\n required RCPduType_E type = 1 [default = RCPDU_SEND_DATA_REQUEST];\n required RCPduType_E sub_type = 2;\n required uint32 initiator = 3;\n required uint32 conf_id = 4;\n required uint32 session_id = 5;\n required uint32 channel_id = 6;\n required bool upward = 7;\n required bool reliability = 8;\n required RCPduPriority_E priority = 9;\n required bytes data = 10;\n optional uint32 peer = 11;\n optional RCPduSegment_E seg = 12;\n optional uint32 total_size = 13;\n optional uint32 site_id = 14;\n optional string user_id = 15;\n optional string user_name = 16;\n optional string user_role = 17;\n optional string device_type = 18;\n optional string site = 19;\n}\n\n// Token management\nmessage RCTokenGrabRequestPdu {\n optional RCPduType_E type = 1 [default = RCPDU_TOKEN_GRAB_REQUEST];\n required uint32 initiator = 2;\n required uint32 token_id = 3;\n}\n\nmessage RCTokenGrabConfirmPdu {\n optional RCPduType_E type = 1 [default = RCPDU_TOKEN_GRAB_CONFIRM];\n required uint32 initiator = 2;\n required uint32 token_id = 3;\n required RCPduResult_E result = 4;\n required RCPduTokenStatus_E status = 5;\n}\n\nmessage RCTokenInhibitRequestPdu {\n optional RCPduType_E type = 1 [default = RCPDU_TOKEN_INHIBIT_REQUEST];\n required uint32 initiator = 2;\n required uint32 token_id = 3;\n}\n\nmessage RCTokenInhibitConfirmPdu {\n optional RCPduType_E type = 1 [default = RCPDU_TOKEN_INHIBIT_CONFIRM];\n required uint32 initiator = 2;\n required uint32 token_id = 3;\n required RCPduResult_E result = 4;\n required RCPduTokenStatus_E status = 5;\n}\n\nmessage RCTokenGiveRequestPdu {\n optional RCPduType_E type = 1 [default = RCPDU_TOKEN_GIVE_REQUEST];\n required uint32 initiator = 2;\n required uint32 token_id = 3;\n required uint64 recipient = 4;\n}\n\nmessage RCTokenGiveIndicationPdu {\n optional RCPduType_E type = 1 [default = RCPDU_TOKEN_GIVE_INDICATION];\n required uint32 initiator = 2;\n required uint32 token_id = 3;\n required uint64 recipient = 4;\n}\n\nmessage RCTokenGiveResponsePdu {\n optional RCPduType_E type = 1 [default = RCPDU_TOKEN_GIVE_RESPONSE];\n required uint32 token_id = 2;\n required uint64 recipient = 3;\n required RCPduResult_E result = 4;\n}\n\nmessage RCTokenGiveConfirmPdu {\n optional RCPduType_E type = 1 [default = RCPDU_TOKEN_GIVE_CONFIRM];\n required uint32 token_id = 2;\n required uint64 recipient = 3;\n required RCPduResult_E result = 4;\n required RCPduTokenStatus_E status = 5;\n}\n\nmessage RCTokenPleaseRequestPdu {\n optional RCPduType_E type = 1 [default = RCPDU_TOKEN_PLEASE_REQUEST];\n required uint32 initiator = 2;\n required uint32 token_id = 3;\n}\n\nmessage RCTokenPleaseIndicationPdu {\n optional RCPduType_E type = 1 [default = RCPDU_TOKEN_PLEASE_INDICATION];\n required uint32 initiator = 2;\n required uint32 token_id = 3;\n}\n\nmessage RCTokenReleaseRequestPdu {\n optional RCPduType_E type = 1 [default = RCPDU_TOKEN_RELEASE_REQUEST];\n required uint32 initiator = 2;\n required uint32 token_id = 3;\n}\n\nmessage RCTokenReleaseConfirmPdu {\n optional RCPduType_E type = 1 [default = RCPDU_TOKEN_TEST_REQUEST];\n required uint32 initiator = 2;\n required uint32 token_id = 3;\n required RCPduResult_E result = 4;\n required RCPduTokenStatus_E status = 5;\n}\n\nmessage RCTokenTestRequestPdu {\n optional RCPduType_E type = 1 [default = RCPDU_TOKEN_TEST_REQUEST];\n required uint32 initiator = 2;\n required uint32 token_id = 3;\n}\n\nmessage RCTokenTestConfirmPdu {\n optional RCPduType_E type = 1 [default = RCPDU_TOKEN_TEST_CONFIRM];\n required uint32 initiator = 2;\n required uint32 token_id = 3;\n required RCPduTokenStatus_E status = 4;\n}\n\n//gcc.proto\n\noption optimize_for = LITE_RUNTIME;\nmessage RCConferenceJoinRequestPdu {\n required RCPduType_E type = 1 [default = RCPDU_CONFERENCE_JOIN_REQUEST];\n required uint32 initiator = 2;\n required RCPduNodeType_E node_type = 3;\n required RCConferenceDescriptorPdu class_description = 4;//conf_desc\n}\n\nmessage RCConferenceJoinResponsePdu {\n optional RCPduType_E type = 1 [default = RCPDU_CONFERENCE_JOIN_RESPONSE];\n required uint32 conf_id = 2;\n required RCPduResult_E result = 3;\n optional RCConferenceDescriptorPdu class_description = 4;\n}\n\nmessage RCConferenceInviteRequestPdu {\n optional RCPduType_E type = 1 [default = RCPDU_CONFERENCE_INVITE_REQUEST];\n required uint32 initiator = 2;\n required RCConferenceDescriptorPdu class_description = 3;\n}\n\nmessage RCConferenceInviteResponsePdu {\n optional RCPduType_E type = 1\n [default = RCPDU_CONFERENCE_INVITE_RESPONSE];\n required RCPduResult_E result = 2;\n optional bytes user_data = 3;\n}\n\nmessage RCConferenceLockRequestPdu {\n optional RCPduType_E type = 1 [default = RCPDU_CONFERENCE_LOCK_REQUEST];\n}\n\nmessage RCConferenceLockResponsePdu {\n optional RCPduType_E type = 1 [default = RCPDU_CONFERENCE_LOCK_RESPONSE];\n required RCPduResult_E result = 2;\n}\n\nmessage RCConferenceLockIndicationPdu {\n optional RCPduType_E type = 1\n [default = RCPDU_CONFERENCE_LOCK_INDICATION];\n}\n\nmessage RCConferenceUnlockRequestPdu {\n optional RCPduType_E type = 1 [default = RCPDU_CONFERENCE_UNLOCK_REQUEST];\n}\n\nmessage RCConferenceUnlockResponsePdu {\n optional RCPduType_E type = 1\n [default = RCPDU_CONFERENCE_UNLOCK_RESPONSE];\n required RCPduResult_E result = 2;\n}\n\nmessage RCConferenceUnlockIndicationPdu {\n optional RCPduType_E type = 1\n [default = RCPDU_CONFERENCE_UNLOCK_INDICATION];\n}\n\nmessage RCConferenceLeaveRequestPdu {\n optional RCPduType_E type = 1 [default = RCPDU_CONFERENCE_LEAVE_REQUEST];\n required RCPduReason_E reason = 2;\n}\n\nmessage RCConferenceTerminateRequestPdu {\n optional RCPduType_E type = 1\n [default = RCPDU_CONFERENCE_TERMINATE_REQUEST];\n required RCPduReason_E reason = 2;\n}\n\nmessage RCConferenceTerminateResponsePdu {\n optional RCPduType_E type = 1\n [default = RCPDU_CONFERENCE_TERMINATE_RESPONSE];\n required RCPduResult_E result = 2;\n}\n\nmessage RCConferenceTerminateIndicationPdu { // MCS_Uniform_Send_Data on GCC_Broadcast_Channel\n optional RCPduType_E type = 1\n [default = RCPDU_CONFERENCE_TERMINATE_INDICATION];\n required RCPduReason_E reason = 2;\n}\n\nmessage RCConferenceEjectUserRequestPdu { // MCS_Send_Data on Node ID Channel of Top GCC\n optional RCPduType_E type = 1\n [default = RCPDU_CONFERENCE_EJECT_USER_REQUEST];\n required uint32 ejected_node_id = 2;\n required RCPduReason_E reason = 3;\n}\n\nmessage RCConferenceEjectUserResponsePdu { // MCS_Send_Data on Node ID Channel of requester\n optional RCPduType_E type = 1\n [default = RCPDU_CONFERENCE_EJECT_USER_RESPONSE];\n required uint32 ejected_node_id = 2;\n required RCPduResult_E result = 3;\n}\n\nmessage RCConferenceEjectUserIndicationPdu { // MCS_Uniform_Send_Data on GCC_Broadcast_Channel\n optional RCPduType_E type = 1\n [default = RCPDU_CONFERENCE_EJECT_USER_INDICATION];\n required uint32 ejected_node_id = 2;\n required RCPduReason_E reason = 3;\n}\n\nmessage RCRosterUpdateIndicationPdu { // MCS_Send_Data on Node ID Channel or\n// MCS_Uniform_Send_Data on GCC_Broadcast_Channel\n optional RCPduType_E type = 1 [default = RCPDU_ROSTER_UPDATE_INDICATION];\n required bool full_refresh = 2; // Conference Roster and all\n repeated RCNodeRecordPdu node_record = 3;\n repeated RCApplicationRecordPdu app_record = 4;\n}\n\nmessage RCRegistryUpdateRequestPdu { // MCS_Send_Data on Node ID Channel of Top GCC\n optional RCPduType_E type = 1 [default = RCPDU_REGISTRY_UPDATE_REQUEST];\n required uint32 key_id = 2;\n required uint32 obj_id = 3;\n required bytes user_data = 4;\n}\n\nmessage RCRegistryUpdateIndicationPdu { // MCS_Send_Data on Node ID Channel of Top GCC\n optional RCPduType_E type = 1 [default = RCPDU_REGISTRY_UPDATE_RESPONSE];\n required uint32 key_id = 2;\n required uint32 obj_id = 3;\n required bytes user_data = 4;\n}\n\nmessage RCRegistryUpdateResponsePdu { // MCS_Send_Data on Node ID Channel of requester\n optional RCPduType_E type = 1 [default = RCPDU_REGISTRY_UPDATE_INDICATION];\n required uint32 key_id = 2;\n required uint32 obj_id = 3;\n required RCPduResult_E result = 4;\n}\n\nmessage RCFunctionNotSupportedResponsePdu {\n optional RCPduType_E type = 1\n [default = RCPDU_FUNCTION_NOT_SUPPORTED_RESPONSE];\n required uint32 request_pdu_id = 2;\n}\n\n//ape.proto\n\noption optimize_for = LITE_RUNTIME;\nmessage RCConferenceSendDataRequestPdu {\n optional uint32 initiator = 1;\n optional uint32 peer = 2;\n required bool is_public = 3;\n required bytes user_data = 4;\n}\n\nmessage RCChatSendDataRequestPdu {\n optional uint32 initiator = 1;\n optional uint32 peer = 2;\n required bool is_public = 3;\n required bytes user_data = 4;\n required string from_role = 5;\n required bytes from_name = 6;\n}\n\nmessage RCDocSendDataRequestPdu {\n required uint32 id = 1;\n required string doc_type = 2;\n required string uri = 3;\n optional uint32 owner = 4;\n optional uint32 from = 5;\n optional string name = 6;\n optional uint32 cur_page_no = 7;\n optional uint32 cur_H = 8;\n optional uint32 cur_V = 9;\n optional uint32 scale = 10;\n optional uint32 page_num = 11;\n}\nmessage RCDocSendDataModelPdu {\n required uint32 item_idx=1;//\u552F\u4E00\u6807\u8BC6\n required uint32 owner=2;\n optional uint32 from=3;\n optional uint32 cur_page_no=4;\n optional uint32 page_num =5;\n optional string file_type=6;\n optional string creat_user_id=7;//\u521B\u5EFA\u6587\u6863userid\n optional string relative_url=8;//\u6587\u6863\u76F8\u5BF9\u5730\u5740\n optional string url =9;//\u6587\u6863\u5730\u5740\n optional uint32 cur_V=10;\n optional uint32 cur_H=11;\n optional uint32 scale=12;\n optional bool visible=13;\n optional uint32 action=14;//0\uFF0C\u65E0\u64CD\u4F5C\uFF0C 1\u7FFB\u9875\u30012.\u663E\u793A/\u9690\u85CF\n optional string doc_id=15;//\u6587\u6863\u5728\u670D\u52A1\u5668\u6570\u636E\u5E93\u4E2D\u7684\u552F\u4E00id\n optional string file_name=16;//\u6587\u6863\u7684\u540D\u5B57\n optional string dynamic_TS=17;//\"dynamicTransferStatic\": \"0\"\n optional string md5=18;//md5\n\n}\nmessage RCGiftSendDataRequestPdu {\n optional uint32 initiator = 1;\n required uint32 peer = 2;\n required uint32 index = 3;\n required uint32 num = 4;\n optional bytes user_data = 5;\n}\n\nmessage RCAudioSendDataRequestPdu {\n optional uint32 initiator = 1;\n required bytes user_data = 2;\n}\n\nmessage RCVideoSendDataRequestPdu {\n optional uint32 initiator = 1;\n required bool key_frame = 2;\n required uint32 sequence_id = 3;\n required uint32 slice_id = 4;\n required bytes user_data = 5;\n}\n\nmessage RCAudioChannelInfoRecordPdu {\n required uint32 status = 1;\n required uint32 device_id = 2;\n required uint32 framerate = 3;\n required uint32 bitrate = 4;\n required uint32 codec = 5;\n}\n\nmessage RCVideoChannelInfoRecordPdu {\n optional uint32 status = 1;\n optional uint32 device_id = 2;\n optional uint32 width = 3;\n optional uint32 height = 4;\n optional uint32 framerate = 5;\n optional uint32 bitrate = 6;\n optional uint32 codec = 7;\n optional string peer_id = 8;\n optional string url = 9;\n optional uint32 type = 10;\n optional string shamlive = 11;\n optional uint32 livetype = 12;\n optional uint32 releaseGrab = 13;\n optional string curTime = 14;\n}\n\nmessage RCAudioDeviceInfoRecordPdu {\n required uint32 device_id = 1;\n required string device_name = 2;\n}\n\nmessage RCVideoDeviceInfoRecordPdu {\n required uint32 device_id = 1;\n required string device_name = 2;\n}\n\nmessage RCNodeInfoRecordPdu {\n required uint32 node_id = 1;\n required string name = 2;\n required uint32 role = 3;\n required uint32 level = 4;\n repeated RCAudioDeviceInfoRecordPdu audio_records = 5;\n repeated RCVideoDeviceInfoRecordPdu video_records = 6;\n optional uint32 status = 7;\n optional bytes user_data = 8;\n optional string user_id = 9;\n optional uint32 handUpTime = 10;\n optional uint32 deviceType = 11;\n optional uint32 mobileDirection = 12;\n}\n\nmessage RCVotingPollSettingsPdu {\n required bool timer = 1;\n optional uint32 time_limit = 2;\n optional uint32 total_score = 3;\n}\n\nmessage RCVotingPollResultPdu {\n required string title = 1;\n required string content = 2;\n optional uint32 score = 3;\n}\n\nmessage RCVotingPollQuestionPdu {\n required uint32 index = 1;\n required uint32 type = 2;\n required string title = 3;\n repeated string options = 4;\n optional uint32 score = 5;\n optional uint32 time_limit = 6;\n optional string restrict_input = 7;\n optional uint32 char_limit = 8;\n optional string answer = 9;\n repeated uint32 selections = 10;\n repeated string responses = 11;\n}\n\nmessage RCVotingPollRecordPdu {\n required RCVotingPollSettingsPdu settings = 1;\n required string title = 2;\n repeated RCVotingPollResultPdu results = 3;\n repeated RCVotingPollQuestionPdu questions = 4;\n}\n\nmessage RCNodeInfoUserDataPdu {\n optional string qq = 1;\n optional string skype = 2;\n optional string mobile = 3;\n}\nmessage RCTabUpdateDataRequestPdu {\n optional uint32 id = 1;\n optional bytes action = 2;\n optional uint32 uncomprLen =3;\n}\n\nmessage RCWhiteBoardDataModel {\n required uint32 type= 1;//\u767D\u677F\u7C7B\u578B\n required uint32 itemIdx= 2;//itemIdx \u6BCF\u4E00\u6B21\u7ED8\u5236\u7684\u552F\u4E00\u6807\u8BC6\n required uint32 initiator=3; //\u7ED8\u5236\u6765\u81EA\u8C01\n required uint32 parentId=4; //\u7236\u7EA7\u7684id\n required uint32 curPage= 5;//\u9875\u7801\n optional string pointGroup=6; //\u5750\u6807\u70B9\u96C6\u6570\u7EC4\u7684JSON\u5B57\u7B26\u4E32\n optional string color=7 [default = \"#000000\"]; //\u989C\u8272\n optional uint32 thickness= 8 ;//\u7EBF\u6761\u7C97\u7EC6\n optional uint32 radius= 9;//\u56ED\u7684\u534A\u5F84\n optional uint32 fontSize= 10;//\u5B57\u4F53\u5927\u5C0F\n optional string fontName= 11;//\u5B57\u4F53\u540D\u79F0\n optional string text= 12;//\u6587\u672C\u5185\u5BB9\n optional bytes data = 13;//\u6682\u65F6\u9884\u7559\u7684\u53C2\u6570\n}\nmessage RCClassSendDataModelPdu {\n optional uint32 class_status= 1;//\u5F53\u524D\u8BFE\u5802\u72B6\u6001 //0:\u672A\u5F00\u59CB\uFF0C1\uFF0C\u5F00\u59CB\uFF0C2\uFF0C\u6682\u505C\n optional uint32 class_timestamp= 2;//\u76EE\u524D\u7528\u8FD9\u4E2A\u53D8\u91CF\u6765\u8BB0\u5F55\u65F6\u95F4 flash\u7528\u7684\u8FD9\u4E2A\n optional uint32 item_idx=3;\n optional uint32 from=4;\n}\n\n//end\n";
exports.default = _default;
;
... ... @@ -14594,8 +14615,8 @@ return /******/ (function(modules) { // webpackBootstrap
_createClass(ConferApe, [{
key: '_joinSessionHandler',
value: function _joinSessionHandler(confInfo) {
var nodeInfoRecordPdu = this.mcu.mcuConfInfo.self;
value: function _joinSessionHandler(_data) {
var nodeInfoRecordPdu = this.mcu.mcuClassInfo.self;
loger.log("_joinSessionHandler nodeInfoRecordPdu=", nodeInfoRecordPdu);
var userDataPdu = new _pdus2.default['RCNodeInfoUserDataPdu']();
userDataPdu.qq = '';
... ... @@ -14603,7 +14624,7 @@ return /******/ (function(modules) { // webpackBootstrap
userDataPdu.mobile = '';
nodeInfoRecordPdu.userData = userDataPdu.toArrayBuffer();
nodeInfoRecordPdu.deviceType = 3;
nodeInfoRecordPdu.deviceType = 3; //设备类型
var item = new _pdus2.default['RCRegistryRosterItemPdu']();
item.nodeId = nodeInfoRecordPdu.nodeId;
... ... @@ -14635,7 +14656,7 @@ return /******/ (function(modules) { // webpackBootstrap
}, {
key: 'leaveClass',
value: function leaveClass() {
var nodeInfoRecordPdu = this.mcu.mcuConfInfo.self;
var nodeInfoRecordPdu = this.mcu.mcuClassInfo.self;
var userDataPdu = new _pdus2.default['RCNodeInfoUserDataPdu']();
userDataPdu.qq = '';
userDataPdu.skype = '';
... ... @@ -15020,7 +15041,7 @@ return /******/ (function(modules) { // webpackBootstrap
_this._session_tag = session_tag;
_this._session_channels = {};
_this._adapter_pdu = new _pdus2.default['RCAdapterPdu']();
_this._confInfo = null;
_this._classInfo = null;
_this._rCArrayBufferUtil = _ArrayBufferUtil2.default;
_this._apeDelayed = false;
_this._apeDelayedMsgs = [];
... ... @@ -15051,7 +15072,7 @@ return /******/ (function(modules) { // webpackBootstrap
value: function _pduMessageHandler(regBuffer) {
var _this2 = this;
console.log("RCPDU_REG_ADAPTER==========================================this._apeDelayed", this._apeDelayed, this._confInfo['mcuDelay']);
loger.log("RCPDU_REG_ADAPTER==============================");
if (this._apeDelayed) {
// this._apeDelayedMsgs.push(regBuffer);
// this._apeDelayedStart();
... ... @@ -15065,7 +15086,7 @@ return /******/ (function(modules) { // webpackBootstrap
// _apeDelayedStart() {
// if (this._apeDelayed && !this._apeDelayedTimer) {
// this._apeDelayedTimer = setInterval(this._delayedMsgHandler.bind(this), this._confInfo['mcuDelay'] || 10000);
// this._apeDelayedTimer = setInterval(this._delayedMsgHandler.bind(this), this._classInfo['mcuDelay'] || 10000);
// }
// }
... ... @@ -15253,11 +15274,12 @@ return /******/ (function(modules) { // webpackBootstrap
}, {
key: '_mcuConferenceJoinSuccessHandler',
value: function _mcuConferenceJoinSuccessHandler(confInfo) {
value: function _mcuConferenceJoinSuccessHandler(_data) {
loger.log('创建Ape->', 'SessionId', this._session_id, 'SessionName', this._session_name, 'SessionTag', this._session_tag);
// 会议依赖底层会议信息
this._confInfo = confInfo;
//this._classInfo = classInfo;
this._classInfo = _GlobalConfig2.default.getClassInfo();
var joinSessionPdu = new _pdus2.default['RCSessionJoinRequestPdu']();
joinSessionPdu.id = this._session_id;
... ... @@ -15267,7 +15289,7 @@ return /******/ (function(modules) { // webpackBootstrap
this.sendUniform(joinSessionPdu, true);
var joinChannelPdu = new _pdus2.default['RCChannelJoinRequestPdu']();
joinChannelPdu.initiator = this.mcu.confInfo.nodeId;
joinChannelPdu.initiator = this.mcu.classInfo.nodeId;
joinChannelPdu.channelId = this._session_id;
this.send(joinChannelPdu);
}
... ... @@ -15325,7 +15347,7 @@ return /******/ (function(modules) { // webpackBootstrap
this._emit(_MessageTypes2.default.MCU_ERROR, _MessageTypes2.default.ERR_APE_SEND_FAILED_NO_JOIN);
return;
}
var normalPdu = _pdus2.default.create_normal_pdu(appPdu.type, this._confInfo.nodeId, this._confInfo.confId, this._session_id, this._channel_id, true, true, _PduConsts2.default.DP_TOP, this._confInfo.topNodeID, _PduConsts2.default.SEG_ONCE);
var normalPdu = _pdus2.default.create_normal_pdu(appPdu.type, this._classInfo.nodeId, this._classInfo.classId, this._session_id, this._channel_id, true, true, _PduConsts2.default.DP_TOP, this._classInfo.topNodeID, _PduConsts2.default.SEG_ONCE);
normalPdu.data = appPdu.toArrayBuffer();
// Mcu发送
this.mcu.send(normalPdu);
... ... @@ -15343,7 +15365,7 @@ return /******/ (function(modules) { // webpackBootstrap
return;
}
var uniformPdu = _pdus2.default.create_uniform_pdu(appPdu.type, this._confInfo.nodeId, this._confInfo.confId, this._session_id, top ? _ApeConsts2.default.BROADCAST_CHANNEL_ID : this._channel_id, true, _PduConsts2.default.DP_TOP, top ? this._confInfo.topNodeID : appPdu.peer || 0, _PduConsts2.default.SEG_ONCE);
var uniformPdu = _pdus2.default.create_uniform_pdu(appPdu.type, this._classInfo.nodeId, this._classInfo.classId, this._session_id, top ? _ApeConsts2.default.BROADCAST_CHANNEL_ID : this._channel_id, true, _PduConsts2.default.DP_TOP, top ? this._classInfo.topNodeID : appPdu.peer || 0, _PduConsts2.default.SEG_ONCE);
uniformPdu.data = appPdu.toArrayBuffer();
// Mcu发送
this.mcu.send(uniformPdu);
... ... @@ -15358,7 +15380,7 @@ return /******/ (function(modules) { // webpackBootstrap
return;
}
var uniformPdu = _pdus2.default.create_uniform_pdu(appPdu.type, this._confInfo.nodeId, this._confInfo.confId, this._session_id, top ? _ApeConsts2.default.BROADCAST_CHANNEL_ID : this._channel_id, true, _PduConsts2.default.DP_TOP, 0, //flash中这个值设置为0
var uniformPdu = _pdus2.default.create_uniform_pdu(appPdu.type, this._classInfo.nodeId, this._classInfo.classId, this._session_id, top ? _ApeConsts2.default.BROADCAST_CHANNEL_ID : this._channel_id, true, _PduConsts2.default.DP_TOP, 0, //flash中这个值设置为0
_PduConsts2.default.SEG_ONCE);
uniformPdu.data = appPdu.toArrayBuffer();
// Mcu发送
... ... @@ -16124,7 +16146,7 @@ return /******/ (function(modules) { // webpackBootstrap
_createClass(ChatApe, [{
key: 'sendChatMsg',
value: function sendChatMsg(_messageInfo) {
if (this._confInfo === null || _EngineUtils2.default.isEmptyObject(this._confInfo)) {
if (this._classInfo === null || _EngineUtils2.default.isEmptyObject(this._classInfo)) {
loger.log('不能发送聊天消息.McuClient还未初始化数据!');
if (GlobalConfig.getCurrentStatus().code == 0 || GlobalConfig.getCurrentStatus().code == 1) {
this._emit(_MessageTypes2.default.MCU_ERROR, _MessageTypes2.default.ERR_APE_SEND_FAILED_NO_JOIN);
... ... @@ -16138,12 +16160,12 @@ return /******/ (function(modules) { // webpackBootstrap
var chatSendPdu = new _pdus2.default['RCChatSendDataRequestPdu']();
chatSendPdu.type = _pdus2.default.RCPDU_CHAT_SEND_DATA_REQUEST;
chatSendPdu.initiator = this._confInfo.nodeId; //发起人
chatSendPdu.initiator = this._classInfo.nodeId; //发起人
chatSendPdu.peer = parseInt(_messageInfo.to); //发送给谁,公聊的时候是0,私聊的时候是指定的用户id
chatSendPdu.userData = this._rCArrayBufferUtil.strToUint8Array("h5" + _messageInfo.message);
chatSendPdu.fromName = this._rCArrayBufferUtil.strToUint8Array("h5" + this._confInfo.userName);
chatSendPdu.fromRole = this._confInfo.userRole; // classRole已经废弃
chatSendPdu.fromName = this._rCArrayBufferUtil.strToUint8Array("h5" + this._classInfo.userName);
chatSendPdu.fromRole = this._classInfo.userRole; // classRole已经废弃
chatSendPdu.isPublic = true;
// if (!(chatSendPdu.isPublic || 0 === chatSendPdu.peer)) {
if (!chatSendPdu && 0 != chatSendPdu.peer) {
... ... @@ -16352,10 +16374,10 @@ return /******/ (function(modules) { // webpackBootstrap
case _ApeConsts2.default.CGS_OPENNED:
this.activeChannelId = videoChannelInfo.channelId;
// AMS
if (this._confInfo.msType === '1') {
this.activeURL = 'http://dazhi.3mang.com/live/' + this._confInfo.confId + '/' + this._confInfo.confId + '_' + videoChannelInfo.channelId + '_flash_cam_mic_aac/playlist.m3u8';
if (this._classInfo.msType === '1') {
this.activeURL = 'http://dazhi.3mang.com/live/' + this._classInfo.classId + '/' + this._classInfo.classId + '_' + videoChannelInfo.channelId + '_flash_cam_mic_aac/playlist.m3u8';
} else {
this.activeURL = 'http://hls.3mang.com/live/' + this._confInfo.confId + '_' + videoChannelInfo.channelId + '_flash_cam_mic_aac/playlist.m3u8';
this.activeURL = 'http://hls.3mang.com/live/' + this._classInfo.classId + '_' + videoChannelInfo.channelId + '_flash_cam_mic_aac/playlist.m3u8';
}
// 任何人都可以打开流
this.emitVideoChange();
... ... @@ -16492,7 +16514,7 @@ return /******/ (function(modules) { // webpackBootstrap
//判断文档是否已经存在,每个文档都有唯一的docId,如果已经同步的文档中存在相同的docId就不需要再同步
if (this.checkDocId(paramInfo.docId)) {
//文档已经存在相同的docId,不需要同步上传
loger.warn('documentUpload 已经存在相同的docId,不需要上传');
loger.warn('documentUpload 文档的docId不无效或已经存在相同的docId,不需要上传');
return;
}
... ... @@ -16962,7 +16984,7 @@ return /******/ (function(modules) { // webpackBootstrap
_createClass(WhiteBoardApe, [{
key: '_joinSessionHandler',
value: function _joinSessionHandler(confInfo) {
value: function _joinSessionHandler(_data) {
loger.log("RCPDU_SESSION_JOIN_RESPONSE");
}
... ...
... ... @@ -148,7 +148,7 @@ export default class MessageEntrance extends Emiter {
_init(_param,_onSuccess,_mcuErrorCallBack){
_initSuccessCallBackFun=_onSuccess;
_mcuErrorCallBackFun=_mcuErrorCallBack;
//{"meetingNumber":"1653304953","portal":"112.126.80.182:80","userRole":"normal","userId":0}
//{"classId":"1653304953","portal":"112.126.80.182:80","userRole":"normal","userId":0}
//判断传入的参数是否存在
if(_param==null||EngineUtils.isEmptyObject(_param)||_onSuccess==null||_mcuErrorCallBack==null){
loger.error('init初始化失败,参数错误');
... ... @@ -156,21 +156,21 @@ export default class MessageEntrance extends Emiter {
return ;
}
//判断必要的参数字段值
if(_param.meetingNumber==null||isNaN(_param.meetingNumber)||_param.portal==null||_param.portal==""){
if(_param.classId==null||isNaN(_param.classId)||_param.portal==null||_param.portal==""){
loger.error('init初始化失败',_param);
this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_CLASS_INIT_PAEAM);
return ;
}
loger.log('init',_param);
//保存参数
GlobalConfig.confId=_param.meetingNumber;
GlobalConfig.classId=_param.classId;
GlobalConfig.portal=_param.portal;
GlobalConfig.userRole=_param.userRole||ApeConsts.normal;
GlobalConfig.userId=_param.userId||"0";
//获取课堂校验信息
if(_sass){
_sass.getJoinParams(GlobalConfig.getConfInfo());
_sass.getJoinParams(GlobalConfig.getClassInfo());
}
}
... ... @@ -195,7 +195,7 @@ export default class MessageEntrance extends Emiter {
//开始校验
if(_sass){
_sass.passwordAndMd5Checking(GlobalConfig.getConfInfo());
_sass.passwordAndMd5Checking(GlobalConfig.getClassInfo());
}
}
// 离开会议
... ... @@ -209,7 +209,7 @@ export default class MessageEntrance extends Emiter {
}
}
// 用meetingNumber向SASS平台获取入会验证信息成功
// 用classId向SASS平台获取入会验证信息成功
_sassInitSuccessHandler(_data) {
//{"siteId":"h5test","passwordRequired":true,"md5":"de399d5540b3da2fbc1eb0a770d4fd66","code":0,"msType":1}
... ... @@ -237,7 +237,7 @@ export default class MessageEntrance extends Emiter {
//返回给客户端初始化成功的数据
let initSuccessCallBackData={};
initSuccessCallBackData.siteId=GlobalConfig.siteId;
initSuccessCallBackData.meetingNumber=GlobalConfig.confId;
initSuccessCallBackData.classId=GlobalConfig.classId;
initSuccessCallBackData.userRole=GlobalConfig.userRole;
initSuccessCallBackData.userId=GlobalConfig.userId;
initSuccessCallBackData.passwordRequired=GlobalConfig.passwordRequired;
... ... @@ -247,19 +247,9 @@ export default class MessageEntrance extends Emiter {
}
}
//// 用meetingNumber向SASS平台获取入会验证信息失败
//_sassInitFailedHandler(_data) {
// loger.log('向SASS平台获取入会验证信息失败.');
// //this._emit(MessageTypes.CLASS_INIT_FAILED);
// let callBackObj={"code":_data,"message":""};
// if(_initFailureCallBackFun){
// _initFailureCallBackFun(callBackObj);
// }
//}
//使用固定的假数据
_setDebugData(_data){
loger.log("setDebugData "+_data);
//loger.log("setDebugData "+_data);
//GlobalConfig.setDebugData(_data);
}
... ... @@ -291,7 +281,7 @@ export default class MessageEntrance extends Emiter {
loger.log('加入底层MCU会议.');
if(_mcu){
_mcu.joinMCU(GlobalConfig.getConfInfo());
_mcu.joinMCU(GlobalConfig.getClassInfo());
}
}
... ... @@ -320,13 +310,14 @@ export default class MessageEntrance extends Emiter {
"endcount": 1
}*/
GlobalConfig.setClassDetail=_data;
}
//获取会议所有参数 api/meeting/detail.do? flash中的接口文件是 getMeetingParam.do
_h5SassGetMeetingParaSuccessHandler(_data){
loger.log('获取api/meeting/detail.do完成.');
console.log(_data.docListPrepare);
console.log(_data.mcuList);
//console.log(_data.docListPrepare);
//console.log(_data.mcuList);
//包含整个会议最全的信息,储存数据
if(_data){
GlobalConfig.setDocListPrepare(_data.docListPrepare); //提前上传的文档列表
... ... @@ -355,13 +346,13 @@ export default class MessageEntrance extends Emiter {
GlobalConfig.MCUServerIP=_data.MCUServerIP;
GlobalConfig.MCUServerPort=_data.MCUServerPort;
//GlobalConfig.classRole=_data.classRole;
GlobalConfig.confId=_data.confId;
GlobalConfig.classId=_data.classId;
GlobalConfig.h5Module=_data.h5Module;
//GlobalConfig.isHost=_data.isHost;
GlobalConfig.maxAudioChannels=_data.maxAudioChannels;
GlobalConfig.maxVideoChannels=_data.maxVideoChannels;
GlobalConfig.maxMediaChannels=_data.maxMediaChannels;
GlobalConfig.mcuConfInfo=_data.mcuConfInfo;
GlobalConfig.mcuClassInfo=_data.mcuClassInfo;
GlobalConfig.mcuDelay=_data.mcuDelay;
GlobalConfig.md5=_data.md5;
GlobalConfig.msType=_data.msType;
... ... @@ -387,13 +378,13 @@ export default class MessageEntrance extends Emiter {
initSuccessCallBackData.doc=GlobalConfig.doc;//文档服务器地址
//initSuccessCallBackData.classRole=GlobalConfig.classRole;
initSuccessCallBackData.confId=GlobalConfig.confId;
initSuccessCallBackData.classId=GlobalConfig.classId;
initSuccessCallBackData.h5Module=GlobalConfig.h5Module;
initSuccessCallBackData.isHost=GlobalConfig.isHost;
initSuccessCallBackData.maxAudioChannels=GlobalConfig.maxAudioChannels;
initSuccessCallBackData.maxVideoChannels=GlobalConfig.maxVideoChannels;
initSuccessCallBackData.maxMediaChannels=GlobalConfig.maxMediaChannels;
// GlobalConfig.mcuConfInfo=_data.mcuConfInfo;
// GlobalConfig.mcuClassInfo=_data.mcuClassInfo;
initSuccessCallBackData.mcuDelay=GlobalConfig.mcuDelay;
//GlobalConfig.md5=_data.md5;
initSuccessCallBackData.msType=GlobalConfig.msType;
... ... @@ -411,7 +402,7 @@ export default class MessageEntrance extends Emiter {
initSuccessCallBackData.userType=GlobalConfig.userType;
initSuccessCallBackData.siteId=GlobalConfig.siteId;
initSuccessCallBackData.meetingNumber=GlobalConfig.confId;
initSuccessCallBackData.classId=GlobalConfig.classId;
initSuccessCallBackData.userRole=GlobalConfig.userRole;
initSuccessCallBackData.userId=GlobalConfig.userId;
initSuccessCallBackData.passwordRequired=GlobalConfig.passwordRequired;
... ...
... ... @@ -31,9 +31,32 @@ class GlobalConfig {
}
static setClassDetail(_data){
this.classDetail=_data;
this.className=_data.meetingName||"";
this.classBeginTime=_data.beginTime||"";
this.classEndTime=_data.endTime||"";
//
//"cycle": 0,
// "repeatmonthweekweek": 0,
// "status": 1,
// "repeatmonthday": 0,
// "repeatmode": 0,
// "beginTime": "2017-02-03 09:00:00",
// "frequency": 1,
// "endmode": 0,
// "meetingContent": "",
// "endTime": "2017-03-31 11:00:00",
// "repeatweek": "",
// "category": "",
// "finalenddate": "",
// "repeatday": 0,
// "meetingName": "mcu1",
// "errorCode": 0,
// "monthType": 0,
// "repeatmonthweekday": 0,
// "endcount": 1
}
static getConfInfo (){
static getClassInfo (){
if(this.isDebug){
//这几个属性是sass验证完成之后返回的,启动MCU的时候需要
... ... @@ -47,7 +70,8 @@ class GlobalConfig {
}else {
return{
"siteId": this.siteId,
"confId": this.confId,
"classId": this.classId,
"className": this.className,
"h5Module": this.h5Module,
"nodeId": this.nodeId,
"topNodeID":this.topNodeID,
... ... @@ -87,9 +111,11 @@ class GlobalConfig {
"classType":this.classType,//课堂类型
"classStatus":this.classStatus,//课堂的状态
"classStartTime":this.classStartTime,//课堂点击开始时间
"classEndTime":this.classEndTime,//最后一次的时间(点暂停或结束),每次发送数据都获取当前时间戳
"classStopTime":this.classStopTime,//最后一次停止的时间(点暂停或结束),每次发送数据都获取当前时间戳
"classTimestamp":this.recordTimestamp,//相对于点开始课堂的时间戳
"classBeginTime":this.classBeginTime,//课堂创建的时间
"classEndTime":this.classEndTime,//课堂结束的时间
"recordStatus":this.recordStatus,//当前录制状态
"recordTimestamp":this.recordTimestamp,//相对于开始录制的时间戳
... ... @@ -100,9 +126,7 @@ class GlobalConfig {
}
}
}
static set classStatusInfo(_param){
}
// 判断自己是否主持人角色
static get isHost(){
if(this.userRole ==ApeConsts.host){
... ... @@ -222,22 +246,6 @@ GlobalConfig.statusCode_2={"code":2,message:"已经加入会议"};
GlobalConfig.statusCode_3={"code":3,message:"已经离开会议"};
GlobalConfig.statusCode_4={"code":4,message:"未知状态"};
GlobalConfig.siteId="gust";
GlobalConfig.confId=0;//课堂号=classId=meetingNumber 之后统一修改为classId
GlobalConfig.nodeId=0;//随机生成
GlobalConfig.topNodeID=101;//现在固定值,还不知道是做什么用
GlobalConfig.userRole=ApeConsts.normal;
GlobalConfig.role=1;
//GlobalConfig.isHost=false;
//GlobalConfig.classRole=0;//废弃
GlobalConfig.userId=0;
GlobalConfig.userName="";
GlobalConfig.password="";
GlobalConfig.userType=8;
GlobalConfig.h5Module=0;
GlobalConfig.passwordRequired=false;
GlobalConfig.md5="";
GlobalConfig.msType=1;
GlobalConfig.mcuDelay=3000;//默认的延迟时间
... ... @@ -256,11 +264,30 @@ GlobalConfig.deBugData={};
GlobalConfig.deviceType=-1; //设备类型 0:电脑 1:安卓 2:ios -1未知
GlobalConfig.userIP="";//用户当前IP
GlobalConfig.userId=0;
GlobalConfig.userName="";
GlobalConfig.nodeId=0;//随机生成
GlobalConfig.passwordRequired=false;
GlobalConfig.password="";
GlobalConfig.userType=8;
GlobalConfig.userRole=ApeConsts.normal;//用户的身份,5种类型:
GlobalConfig.role=ApeConsts.NR_NORMAL;//课堂角色身份
GlobalConfig.h5Module=0;
GlobalConfig.siteId="gust";
GlobalConfig.topNodeID=101;//现在固定值,还不知道是做什么用
GlobalConfig.className= ""; // 课程名称
GlobalConfig.classId= ""; // 课程号
GlobalConfig.classId=0;//课堂号=classId=meetingNumber 之后统一修改为classId
GlobalConfig.classType=ApeConsts.CLASS_TYPE_INTERACT;//1:互动课堂,2:直播课堂
GlobalConfig.classStatus=ApeConsts.CLASS_STATUS_WAIT;// 0;//课堂还未开始 1;//直播中 2 //课间休息 3已经停止
GlobalConfig.classStartTime="";//课堂点击开始时间
GlobalConfig.classStopTime="";//最后一次停止的时间(点暂停或结束),每次发送数据都获取当前时间戳
GlobalConfig.classBeginTime="";//课堂创建的时间
GlobalConfig.classEndTime="";//课堂结束的时间
GlobalConfig.recordStartTime= "";
GlobalConfig.recordStartTimestam = "";
... ...
... ... @@ -14,15 +14,15 @@ class Sass extends Emiter {
//Sass 接口
//----1.校验之前的接口-----
//getJoinParams 获取课堂校验信息 let url = `http://${_initInfo.portal}/3m/api/meeting/joinParams.do?meetingNumber=${_initInfo.confId}&userID=${_initInfo.userId}`;
//getJoinParams 获取课堂校验信息 let url = `http://${_initInfo.portal}/3m/api/meeting/joinParams.do?meetingNumber=${_initInfo.classId}&userID=${_initInfo.userId}`;
//-----2.开始校验,如果有密码先校验密码,否则直接开始MD5验证-----
//sendPWDChecking入会密码校验 let url = `http://${confInfo.portal}/3m/getCheckMeetinig.do?siteId=${confInfo.siteId}&classId=${confInfo.confId}&password=${confInfo.password}`;
//sendMD5Checking MD5校验(发起入会) let url = `http://${confInfo.portal}/3m/meeting/md5CheckMeeting.do?siteId=${confInfo.siteId}&meetingNumber=${confInfo.confId}&userId=${confInfo.userId}&userName=${confInfo.userName}&userType=${confInfo.userType}&passwordRequired=${confInfo.passwordRequired}&md5=${confInfo.md5}`;
//sendPWDChecking入会密码校验 let url = `http://${classInfo.portal}/3m/getCheckMeetinig.do?siteId=${classInfo.siteId}&classId=${classInfo.classId}&password=${classInfo.password}`;
//sendMD5Checking MD5校验(发起入会) let url = `http://${classInfo.portal}/3m/meeting/md5CheckMeeting.do?siteId=${classInfo.siteId}&meetingNumber=${classInfo.classId}&userId=${classInfo.userId}&userName=${classInfo.userName}&userType=${classInfo.userType}&passwordRequired=${classInfo.passwordRequired}&md5=${classInfo.md5}`;
//----3.验证完成后获取------
//getClassDetail 获取会议详情 let url = `http://${confInfo.portal}/3m/meeting/getClassH5.do?classNumber=${confInfo.confId}`;
//getMeetingParam 获取会议最全参数集合 let url = `http://${confInfo.portal}/3m/api/meeting/detail.do?meetingNumber=${confInfo.confId}&timestamp=${timestamp}&authId=${authId}`;
//getClassDetail 获取会议详情 let url = `http://${classInfo.portal}/3m/meeting/getClassH5.do?classNumber=${classInfo.classId}`;
//getMeetingParam 获取会议最全参数集合 let url = `http://${classInfo.portal}/3m/api/meeting/detail.do?meetingNumber=${classInfo.classId}&timestamp=${timestamp}&authId=${authId}`;
//Sass获取课堂校验信息
... ... @@ -47,7 +47,7 @@ class Sass extends Emiter {
md5 String 用于后续加入课堂验证
msType int 媒体服务器类型
*/
let url = `http://${_initInfo.portal}/3m/api/meeting/joinParams.do?meetingNumber=${_initInfo.confId}&userID=${_initInfo.userId}`;
let url = `http://${_initInfo.portal}/3m/api/meeting/joinParams.do?meetingNumber=${_initInfo.classId}&userID=${_initInfo.userId}`;
loger.log('Sass获取课堂校验信息.', url);
fetch(url, {
timeout: 5000
... ... @@ -107,7 +107,7 @@ class Sass extends Emiter {
// 入会密码校验
sendPWDChecking() {
//let url = `http://${confInfo.portal}/3m/getCheckMeetinig.do?siteId=${confInfo.siteId}&classId=${confInfo.confId}&password=${confInfo.password}`;
//let url = `http://${classInfo.portal}/3m/getCheckMeetinig.do?siteId=${classInfo.siteId}&classId=${classInfo.classId}&password=${classInfo.password}`;
/*
/3m/api/meeting/signIn.do
... ... @@ -123,7 +123,7 @@ class Sass extends Emiter {
isTeacher=1
}
let url = `http://${confInfo.portal}/3m/api/meeting/signIn.do?siteId=${confInfo.siteId}&classId=${confInfo.confId}&isTeacher=${isTeacher}&password=${confInfo.password}`;
let url = `http://${confInfo.portal}/3m/api/meeting/signIn.do?siteId=${confInfo.siteId}&classId=${confInfo.classId}&isTeacher=${isTeacher}&password=${confInfo.password}`;
loger.log('会议密码校验', url);
fetch(url, {
timeout: 5000
... ... @@ -160,7 +160,7 @@ class Sass extends Emiter {
// 发起入会
sendMD5Checking() {
let url = `http://${confInfo.portal}/3m/meeting/md5CheckMeeting.do?siteId=${confInfo.siteId}&meetingNumber=${confInfo.confId}&userId=${confInfo.userId}&userName=${confInfo.userName}&userType=${confInfo.userType}&nopassword=${confInfo.passwordRequired}&md5=${confInfo.md5}`;
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}`;
loger.log('H5SassMD5校验', url);
fetch(url, {
timeout: 5000
... ... @@ -207,7 +207,7 @@ class Sass extends Emiter {
// 获取会议详情
getClassDetail() {
let url = `http://${confInfo.portal}/3m/meeting/getClassH5.do?classNumber=${confInfo.confId}`;
let url = `http://${confInfo.portal}/3m/meeting/getClassH5.do?classNumber=${confInfo.classId}`;
loger.log('Sass获取Class详情.', url);
fetch(url, {
timeout: 5000
... ... @@ -252,11 +252,11 @@ class Sass extends Emiter {
3 没有对应的站点
4 站点已过期
siteId String 站点号
meetingNumber String 课堂号
meetingNumber String 课堂号 对应的是classId
*/
var timestamp=new Date().getTime();
var authId=MD5(confInfo.confId+""+timestamp);//课堂号+时间戳 的字符串,转成MD5
let url = `http://${confInfo.portal}/3m/api/meeting/detail.do?meetingNumber=${confInfo.confId}&timestamp=${timestamp}&authId=${authId}`;
var authId=MD5(confInfo.classId+""+timestamp);//课堂号+时间戳 的字符串,转成MD5
let url = `http://${confInfo.portal}/3m/api/meeting/detail.do?meetingNumber=${confInfo.classId}&timestamp=${timestamp}&authId=${authId}`;
loger.log('H5Sass获取getMeetingParam ', url);
fetch(url, {
timeout: 5000
... ...
... ... @@ -39,7 +39,7 @@ export default class Ape extends Emiter {
this._session_tag = session_tag;
this._session_channels = {};
this._adapter_pdu = new pdu['RCAdapterPdu'];
this._confInfo = null;
this._classInfo = null;
this._rCArrayBufferUtil = ArrayBufferUtil;
this._apeDelayed = false;
this._apeDelayedMsgs = [];
... ... @@ -64,7 +64,7 @@ export default class Ape extends Emiter {
// 消息处理
_pduMessageHandler(regBuffer) {
console.log("RCPDU_REG_ADAPTER==========================================this._apeDelayed",this._apeDelayed,this._confInfo['mcuDelay']);
loger.log("RCPDU_REG_ADAPTER==============================");
if (this._apeDelayed) {
// this._apeDelayedMsgs.push(regBuffer);
// this._apeDelayedStart();
... ... @@ -78,7 +78,7 @@ export default class Ape extends Emiter {
// _apeDelayedStart() {
// if (this._apeDelayed && !this._apeDelayedTimer) {
// this._apeDelayedTimer = setInterval(this._delayedMsgHandler.bind(this), this._confInfo['mcuDelay'] || 10000);
// this._apeDelayedTimer = setInterval(this._delayedMsgHandler.bind(this), this._classInfo['mcuDelay'] || 10000);
// }
// }
... ... @@ -240,7 +240,7 @@ export default class Ape extends Emiter {
}
// 依赖的会议创建完毕 - 发起Ape加入
_mcuConferenceJoinSuccessHandler(confInfo) {
_mcuConferenceJoinSuccessHandler(_data) {
loger.log('创建Ape->',
'SessionId',
this._session_id,
... ... @@ -250,7 +250,8 @@ export default class Ape extends Emiter {
this._session_tag);
// 会议依赖底层会议信息
this._confInfo = confInfo;
//this._classInfo = classInfo;
this._classInfo = GlobalConfig.getClassInfo();
var joinSessionPdu = new pdu['RCSessionJoinRequestPdu'];
joinSessionPdu.id = this._session_id;
... ... @@ -260,7 +261,7 @@ export default class Ape extends Emiter {
this.sendUniform(joinSessionPdu, true);
var joinChannelPdu = new pdu['RCChannelJoinRequestPdu'];
joinChannelPdu.initiator = this.mcu.confInfo.nodeId;
joinChannelPdu.initiator = this.mcu.classInfo.nodeId;
joinChannelPdu.channelId = this._session_id;
this.send(joinChannelPdu);
}
... ... @@ -313,14 +314,14 @@ export default class Ape extends Emiter {
}
let normalPdu = pdu.create_normal_pdu(
appPdu.type,
this._confInfo.nodeId,
this._confInfo.confId,
this._classInfo.nodeId,
this._classInfo.classId,
this._session_id,
this._channel_id,
true,
true,
PduConsts.DP_TOP,
this._confInfo.topNodeID,
this._classInfo.topNodeID,
PduConsts.SEG_ONCE
);
normalPdu.data = appPdu.toArrayBuffer();
... ... @@ -339,13 +340,13 @@ export default class Ape extends Emiter {
let uniformPdu = pdu.create_uniform_pdu(
appPdu.type,
this._confInfo.nodeId,
this._confInfo.confId,
this._classInfo.nodeId,
this._classInfo.classId,
this._session_id,
top ? ApeConsts.BROADCAST_CHANNEL_ID : this._channel_id,
true,
PduConsts.DP_TOP,
top ? this._confInfo.topNodeID : (appPdu.peer || 0),
top ? this._classInfo.topNodeID : (appPdu.peer || 0),
PduConsts.SEG_ONCE
);
uniformPdu.data = appPdu.toArrayBuffer();
... ... @@ -363,8 +364,8 @@ export default class Ape extends Emiter {
let uniformPdu = pdu.create_uniform_pdu(
appPdu.type,
this._confInfo.nodeId,
this._confInfo.confId,
this._classInfo.nodeId,
this._classInfo.classId,
this._session_id,
top ? ApeConsts.BROADCAST_CHANNEL_ID : this._channel_id,
true,
... ...
... ... @@ -39,7 +39,7 @@ class ChatApe extends Ape {
}
sendChatMsg(_messageInfo) {
if(this._confInfo===null||EngineUtils.isEmptyObject(this._confInfo)){
if(this._classInfo===null||EngineUtils.isEmptyObject(this._classInfo)){
loger.log('不能发送聊天消息.McuClient还未初始化数据!');
if(GlobalConfig.getCurrentStatus().code==0||GlobalConfig.getCurrentStatus().code==1){
this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_APE_SEND_FAILED_NO_JOIN);
... ... @@ -53,12 +53,12 @@ class ChatApe extends Ape {
let chatSendPdu = new pdu['RCChatSendDataRequestPdu'];
chatSendPdu.type = pdu.RCPDU_CHAT_SEND_DATA_REQUEST;
chatSendPdu.initiator = this._confInfo.nodeId;//发起人
chatSendPdu.initiator = this._classInfo.nodeId;//发起人
chatSendPdu.peer = parseInt(_messageInfo.to);//发送给谁,公聊的时候是0,私聊的时候是指定的用户id
chatSendPdu.userData = this._rCArrayBufferUtil.strToUint8Array("h5" + _messageInfo.message);
chatSendPdu.fromName = this._rCArrayBufferUtil.strToUint8Array("h5" + this._confInfo.userName);
chatSendPdu.fromRole = this._confInfo.userRole;// classRole已经废弃
chatSendPdu.fromName = this._rCArrayBufferUtil.strToUint8Array("h5" + this._classInfo.userName);
chatSendPdu.fromRole = this._classInfo.userRole;// classRole已经废弃
chatSendPdu.isPublic = true;
// if (!(chatSendPdu.isPublic || 0 === chatSendPdu.peer)) {
if (!chatSendPdu && 0!=chatSendPdu.peer) {
... ...
... ... @@ -66,8 +66,8 @@ class ConferApe extends Ape {
}
_joinSessionHandler(confInfo) {
let nodeInfoRecordPdu = this.mcu.mcuConfInfo.self;
_joinSessionHandler(_data) {
let nodeInfoRecordPdu = this.mcu.mcuClassInfo.self;
loger.log("_joinSessionHandler nodeInfoRecordPdu=",nodeInfoRecordPdu);
let userDataPdu = new pdu['RCNodeInfoUserDataPdu'];
userDataPdu.qq = '';
... ... @@ -75,7 +75,7 @@ class ConferApe extends Ape {
userDataPdu.mobile = '';
nodeInfoRecordPdu.userData = userDataPdu.toArrayBuffer();
nodeInfoRecordPdu.deviceType = 3;
nodeInfoRecordPdu.deviceType = 3;//设备类型
let item = new pdu['RCRegistryRosterItemPdu'];
item.nodeId = nodeInfoRecordPdu.nodeId;
... ... @@ -105,7 +105,7 @@ class ConferApe extends Ape {
//主动离开会议,发送通知到服务器
leaveClass(){
let nodeInfoRecordPdu = this.mcu.mcuConfInfo.self;
let nodeInfoRecordPdu = this.mcu.mcuClassInfo.self;
let userDataPdu = new pdu['RCNodeInfoUserDataPdu'];
userDataPdu.qq = '';
userDataPdu.skype = '';
... ...
... ... @@ -52,7 +52,7 @@ class DocApe extends Ape {
//判断文档是否已经存在,每个文档都有唯一的docId,如果已经同步的文档中存在相同的docId就不需要再同步
if(this.checkDocId(paramInfo.docId)){
//文档已经存在相同的docId,不需要同步上传
loger.warn('documentUpload 已经存在相同的docId,不需要上传');
loger.warn('documentUpload 文档的docId不无效或已经存在相同的docId,不需要上传');
return;
}
... ...
... ... @@ -111,10 +111,10 @@ class VideoChat extends Ape {
case ApeConsts.CGS_OPENNED:
this.activeChannelId = videoChannelInfo.channelId;
// AMS
if (this._confInfo.msType === '1') {
this.activeURL = `http://dazhi.3mang.com/live/${this._confInfo.confId}/${this._confInfo.confId}_${videoChannelInfo.channelId}_flash_cam_mic_aac/playlist.m3u8`;
if (this._classInfo.msType === '1') {
this.activeURL = `http://dazhi.3mang.com/live/${this._classInfo.classId}/${this._classInfo.classId}_${videoChannelInfo.channelId}_flash_cam_mic_aac/playlist.m3u8`;
}else {
this.activeURL = `http://hls.3mang.com/live/${this._confInfo.confId}_${videoChannelInfo.channelId}_flash_cam_mic_aac/playlist.m3u8`;
this.activeURL = `http://hls.3mang.com/live/${this._classInfo.classId}_${videoChannelInfo.channelId}_flash_cam_mic_aac/playlist.m3u8`;
}
// 任何人都可以打开流
this.emitVideoChange();
... ...
... ... @@ -56,7 +56,7 @@ class WhiteBoardApe extends Ape {
//this._apeDelayed = true;
}
_joinSessionHandler(confInfo) {
_joinSessionHandler(_data) {
loger.log("RCPDU_SESSION_JOIN_RESPONSE");
}
... ...
... ... @@ -37,37 +37,37 @@ class MCU extends Emiter {
//MCU-发送加入会议请求
_sendJoinClassRequest(){
const confInfo = this.confInfo;
loger.log('MCU-发送加入会议请求.',confInfo);
var joinRequestPdu = new pdu['RCConferenceJoinRequestPdu'];
joinRequestPdu.type = 2;
joinRequestPdu.initiator = confInfo.nodeId;
joinRequestPdu.nodeType = PduConsts.NT_TERMINAL; //normal
//const classInfo = this.classInfo;
loger.log('MCU-发送加入会议请求.',this.classInfo);
var descriptorPdu = new pdu['RCConferenceDescriptorPdu'];
descriptorPdu.id = confInfo.confId;
descriptorPdu.name = new ArrayBuffer;
descriptorPdu.id = this.classInfo.classId;
descriptorPdu.name = this.classInfo.className||"";
descriptorPdu.mode = 0;
descriptorPdu.capacity = 1;
joinRequestPdu.confDesc = descriptorPdu;
var joinRequestPdu = new pdu['RCConferenceJoinRequestPdu'];
joinRequestPdu.type = 2;
joinRequestPdu.initiator = this.classInfo.nodeId;
joinRequestPdu.nodeType = PduConsts.NT_TERMINAL; //normal
joinRequestPdu.classDescription = descriptorPdu;// classDescription
let pduMsg = pdu.create_join_class_request_pdu(
joinRequestPdu.type,
confInfo.nodeId,
confInfo.confId,
this.classInfo.nodeId,
this.classInfo.classId,
0,
ApeConsts.BROADCAST_CHANNEL_ID,
true,
PduConsts.DP_TOP,
confInfo.topNodeID,
this.classInfo.topNodeID,
PduConsts.SEG_ONCE
);
pduMsg.set("site", confInfo.siteId);//课堂号对应的名称
pduMsg.set("userId", confInfo.userId);
pduMsg.set("userName", Base64.fromByteArray(ArrayBufferUtil.strToUint8Array(confInfo.userName)));
pduMsg.set("userRole", confInfo.userRole);
pduMsg.set("site", this.classInfo.siteId);//课堂号对应的名称
pduMsg.set("userId", this.classInfo.userId);
pduMsg.set("userName", Base64.fromByteArray(ArrayBufferUtil.strToUint8Array(this.classInfo.userName)));
pduMsg.set("userRole", this.classInfo.userRole);
pduMsg.set("deviceType", "");
pduMsg.set("data", joinRequestPdu.toArrayBuffer());
... ... @@ -85,13 +85,13 @@ class MCU extends Emiter {
case PduType.RCPDU_CONNECT_PROVIDER_RESPONSE:
//加入会议请求返回数据处理
let joinConfPdu = pdu['RCConferenceJoinResponsePdu'].decode(pduData);
let pduResultCode = joinConfPdu.get("result");
let pduResultCode = joinConfPdu.result;
loger.warn( 'RCPDU_CONNECT_PROVIDER_RESPONSE ->pduResultCode:'+pduResultCode);
switch (pduResultCode) {
case PduConsts.RET_SUCCESS:
//加入成功
this._updateMCUConfInfoDesc(joinConfPdu.get("confDesc"));
this._emit(MessageTypes.CLASS_JOIN_SUCCESS, this.confInfo);
this._updateMCUConfInfoDescription(joinConfPdu.classDescription);
this._emit(MessageTypes.CLASS_JOIN_SUCCESS, this.classInfo);
break;
case PduConsts.RET_FULL_CAPACITY:
this._emit(MessageTypes.MCU_ERROR,MessageTypes.ERR_CLASS_JOIN_FULL);
... ... @@ -121,11 +121,15 @@ class MCU extends Emiter {
}
}
_updateMCUConfInfoDesc(mcuConfDesc) {
let info = this.mcuConfInfo.info;
info._conference_name = ArrayBufferUtil.uint8ArrayToStr(mcuConfDesc.name, 0);
info._capacity = mcuConfDesc.capacity;
info._mode = mcuConfDesc.mode;
_updateMCUConfInfoDescription(_data) {
// let _mcuConfDesc=new pdu['RCConferenceDescriptorPdu'].decode(mcuConfDesc);
loger.log('_updateMCUConfInfoDescription. _mcuConfDesc', _data);
//let classDescription=new pdu['RCConferenceDescriptorPdu'].decode(_data);
console.log(_data);
//let info = this.mcuClassInfo.info;
//info._conference_name = ArrayBufferUtil.uint8ArrayToStr(mcuConfDesc.name, 0);
//info._capacity = mcuConfDesc.capacity;
//info._mode = mcuConfDesc.mode;
}
// MU服务是否连接
... ... @@ -157,34 +161,34 @@ class MCU extends Emiter {
}
// 主动建立MCU连接
joinMCU(_confInfo) {
loger.log('开始建立EverSocket通道.', _confInfo);
_confInfo.confId = parseInt(_confInfo.confId); // confId 必须整形
this.confInfo = _confInfo;
joinMCU(_classInfo) {
loger.log('开始建立EverSocket通道.', _classInfo);
_classInfo.classId = parseInt(_classInfo.classId); // classId 必须整形
this.classInfo = _classInfo;
// 创建刷新nodeId
this.confInfo.nodeId =EngineUtils.creatTimestamp();
GlobalConfig.nodeId=this.confInfo.nodeId;//这是标识自己身份的id
this.classInfo.nodeId =EngineUtils.creatTimestamp();
GlobalConfig.nodeId=this.classInfo.nodeId;//这是标识自己身份的id
let nodeInfoRecordPdu = new pdu['RCNodeInfoRecordPdu'];
nodeInfoRecordPdu.name = this.confInfo.userName;
nodeInfoRecordPdu.nodeId = this.confInfo.nodeId;
nodeInfoRecordPdu.userId = this.confInfo.userId;
nodeInfoRecordPdu.name = this.classInfo.userName;
nodeInfoRecordPdu.nodeId = this.classInfo.nodeId;
nodeInfoRecordPdu.userId = this.classInfo.userId;
nodeInfoRecordPdu.role = 1; //NR_NORMAL
nodeInfoRecordPdu.level = 0;
let conferenceRecord = {}; //RCConferenceRecord_T
conferenceRecord._conference_id = this.confInfo.confId;
conferenceRecord._top_node_id =this.confInfo.topNodeID;
conferenceRecord._conference_id = this.classInfo.classId;
conferenceRecord._top_node_id =this.classInfo.topNodeID;
this.mcuConfInfo = {}; //RCMeetingInfo_T
this.mcuConfInfo.self = nodeInfoRecordPdu;
this.mcuConfInfo.info = conferenceRecord;
this.mcuClassInfo = {}; //RCMeetingInfo_T
this.mcuClassInfo.self = nodeInfoRecordPdu;
this.mcuClassInfo.info = conferenceRecord;
// 内部mcuConfInfo
this.confInfo.mcuConfInfo = this.mcuConfInfo;
this.classInfo.mcuClassInfo = this.mcuClassInfo;
//开启EverSocket
this._everSocket.begin(this.confInfo.MCUServerIP,this.confInfo.MCUServerPort);
this._everSocket.begin(this.classInfo.MCUServerIP,this.classInfo.MCUServerPort);
}
}
... ...
... ... @@ -17,7 +17,7 @@ function create_pdu(type, sub_type,
pduMsg.set("type", type);
pduMsg.set("subType", sub_type);
pduMsg.set("initiator", initiator);
pduMsg.set("confId", conference_id);
pduMsg.set("confId", conference_id);//***confId mcu服务用的是这个字段,客户端在其他地方统一为classId
pduMsg.set("sessionId", session_id);
pduMsg.set("channelId", channel_id);
pduMsg.set("upward", upward);
... ...
... ... @@ -168,9 +168,8 @@ enum RCPduNodeCategory_E {
message RCConferenceDescriptorPdu {
required uint32 id = 1;
required bytes name = 2;
required string name = 2;
optional bytes description = 3;
//optional string net_address = 4;
optional uint32 mode = 4;
optional string password = 5;
optional uint32 capacity = 6;
... ... @@ -550,20 +549,20 @@ message RCConferenceJoinRequestPdu {
required RCPduType_E type = 1 [default = RCPDU_CONFERENCE_JOIN_REQUEST];
required uint32 initiator = 2;
required RCPduNodeType_E node_type = 3;
required RCConferenceDescriptorPdu conf_desc = 4;
required RCConferenceDescriptorPdu class_description = 4;//conf_desc
}
message RCConferenceJoinResponsePdu {
optional RCPduType_E type = 1 [default = RCPDU_CONFERENCE_JOIN_RESPONSE];
required uint32 conf_id = 2;
required RCPduResult_E result = 3;
optional RCConferenceDescriptorPdu conf_desc = 4;
optional RCConferenceDescriptorPdu class_description = 4;
}
message RCConferenceInviteRequestPdu {
optional RCPduType_E type = 1 [default = RCPDU_CONFERENCE_INVITE_REQUEST];
required uint32 initiator = 2;
required RCConferenceDescriptorPdu conf_desc = 3;
required RCConferenceDescriptorPdu class_description = 3;
}
message RCConferenceInviteResponsePdu {
... ...