正在显示
7 个修改的文件
包含
350 行增加
和
229 行删除
此 diff 太大无法显示。
| @@ -22,6 +22,8 @@ import CursorApe from 'apes/CursorApe'; | @@ -22,6 +22,8 @@ import CursorApe from 'apes/CursorApe'; | ||
| 22 | 22 | ||
| 23 | import EngineUtils from "EngineUtils"; | 23 | import EngineUtils from "EngineUtils"; |
| 24 | import GlobalConfig from 'GlobalConfig'; | 24 | import GlobalConfig from 'GlobalConfig'; |
| 25 | +import SystemConfig from 'SystemConfig'; | ||
| 26 | + | ||
| 25 | import ApeConsts from 'apes/ApeConsts'; | 27 | import ApeConsts from 'apes/ApeConsts'; |
| 26 | import Base64 from 'base64-js'; | 28 | import Base64 from 'base64-js'; |
| 27 | import ArrayBufferUtil from 'libs/ArrayBufferUtil'; | 29 | import ArrayBufferUtil from 'libs/ArrayBufferUtil'; |
| @@ -30,11 +32,10 @@ import MediaModule from 'apes/MediaModule'; | @@ -30,11 +32,10 @@ import MediaModule from 'apes/MediaModule'; | ||
| 30 | import MediaSharedApe from 'apes/MediaSharedApe'; | 32 | import MediaSharedApe from 'apes/MediaSharedApe'; |
| 31 | import MusicSharedApe from 'apes/MusicSharedApe'; | 33 | import MusicSharedApe from 'apes/MusicSharedApe'; |
| 32 | import QuestionApe from 'apes/QuestionApe'; | 34 | import QuestionApe from 'apes/QuestionApe'; |
| 33 | -import mdetect from "mdetect"; | ||
| 34 | import UTF8 from 'utf-8'; | 35 | import UTF8 from 'utf-8'; |
| 35 | 36 | ||
| 36 | let loger = Loger.getLoger('McuClient'); | 37 | let loger = Loger.getLoger('McuClient'); |
| 37 | -let _sdkInfo = { "version": "v1.43.1.20170711", "author": "www.3mang.com" }; | 38 | +let _sdkInfo = { "version": "v1.45.1.20170717", "author": "www.3mang.com" }; |
| 38 | 39 | ||
| 39 | //APE | 40 | //APE |
| 40 | let _sass; | 41 | let _sass; |
| @@ -59,13 +60,8 @@ export default class MessageEntrance extends Emiter { | @@ -59,13 +60,8 @@ export default class MessageEntrance extends Emiter { | ||
| 59 | //sdk 信息 | 60 | //sdk 信息 |
| 60 | this.sdkInfo = _sdkInfo; | 61 | this.sdkInfo = _sdkInfo; |
| 61 | loger.warn(this.sdkInfo); | 62 | loger.warn(this.sdkInfo); |
| 62 | - //检查是否是移动端 | ||
| 63 | - GlobalConfig.isMobile = mdetect.isMobileUA(); | ||
| 64 | - if (GlobalConfig.isMobile) { | ||
| 65 | - loger.warn("当前设备是移动设备"); | ||
| 66 | - } else { | ||
| 67 | - loger.warn("当前设备是PC"); | ||
| 68 | - } | 63 | + //获取设备和系统信息 |
| 64 | + SystemConfig.getSystemInfo(); | ||
| 69 | 65 | ||
| 70 | this.classRecordStatusUpdateTimer=0;//课堂录制状态发生改变后同步当前所有模块数据的计时器 | 66 | this.classRecordStatusUpdateTimer=0;//课堂录制状态发生改变后同步当前所有模块数据的计时器 |
| 71 | //初始化状态 | 67 | //初始化状态 |
| @@ -254,6 +250,7 @@ export default class MessageEntrance extends Emiter { | @@ -254,6 +250,7 @@ export default class MessageEntrance extends Emiter { | ||
| 254 | this.switchMediaServer = this._switchMediaServer.bind(this); //手动切换ms服务器 | 250 | this.switchMediaServer = this._switchMediaServer.bind(this); //手动切换ms服务器 |
| 255 | this.setDebugInfo = this._setDebugInfo.bind(this); //设置debug信息 | 251 | this.setDebugInfo = this._setDebugInfo.bind(this); //设置debug信息 |
| 256 | } | 252 | } |
| 253 | + | ||
| 257 | _setDebugInfo(_data) { | 254 | _setDebugInfo(_data) { |
| 258 | loger.log("设置debug信息-->", _data); | 255 | loger.log("设置debug信息-->", _data); |
| 259 | if (_data) { | 256 | if (_data) { |
| @@ -264,14 +261,6 @@ export default class MessageEntrance extends Emiter { | @@ -264,14 +261,6 @@ export default class MessageEntrance extends Emiter { | ||
| 264 | _setDeviceInfo(_data) { | 261 | _setDeviceInfo(_data) { |
| 265 | loger.log("设置设备信息-->", _data); | 262 | loger.log("设置设备信息-->", _data); |
| 266 | if (_data) { | 263 | if (_data) { |
| 267 | - /* GlobalConfig.videoQuality=_data.videoQuality||2;//画面质量 0-低;1-中;2-高; | ||
| 268 | - GlobalConfig.cameras=_data.cameras||[];//摄像头列表 | ||
| 269 | - GlobalConfig.microphones=_data.microphones||[];//麦克风列表 | ||
| 270 | - GlobalConfig.curCamera=_data.curCamera||'';//当前选择的摄像头 | ||
| 271 | - GlobalConfig.curMicrophone=_data.curMicrophone||'';//当前选择的麦克风 | ||
| 272 | - GlobalConfig.curVideoQuality=_data.curVideoQuality||2;//当前选择的分辨率 | ||
| 273 | - GlobalConfig.micGain=_data.micGain||50;//音量(0-80)*/ | ||
| 274 | - | ||
| 275 | GlobalConfig.cameras = _data.cameras || []; | 264 | GlobalConfig.cameras = _data.cameras || []; |
| 276 | GlobalConfig.microphones = _data.microphones || []; | 265 | GlobalConfig.microphones = _data.microphones || []; |
| 277 | GlobalConfig.videoQuality = parseInt(_data.videoQuality); | 266 | GlobalConfig.videoQuality = parseInt(_data.videoQuality); |
| @@ -810,6 +799,13 @@ export default class MessageEntrance extends Emiter { | @@ -810,6 +799,13 @@ export default class MessageEntrance extends Emiter { | ||
| 810 | joinClassSuccessCallBackData.ssTunnelAppURL = GlobalConfig.ssTunnelAppURL; | 799 | joinClassSuccessCallBackData.ssTunnelAppURL = GlobalConfig.ssTunnelAppURL; |
| 811 | joinClassSuccessCallBackData.currentSceneTableId = GlobalConfig.currentSceneTableId; //文档区域的模块显示 | 800 | joinClassSuccessCallBackData.currentSceneTableId = GlobalConfig.currentSceneTableId; //文档区域的模块显示 |
| 812 | joinClassSuccessCallBackData.serverAndLoacTimeDistanc = GlobalConfig.serverAndLoacTimeDistanc; | 801 | joinClassSuccessCallBackData.serverAndLoacTimeDistanc = GlobalConfig.serverAndLoacTimeDistanc; |
| 802 | + | ||
| 803 | + joinClassSuccessCallBackData.deviceType = GlobalConfig.deviceType; | ||
| 804 | + joinClassSuccessCallBackData.language = GlobalConfig.language; | ||
| 805 | + joinClassSuccessCallBackData.explorer = GlobalConfig.explorer; | ||
| 806 | + joinClassSuccessCallBackData.explorerVersion = GlobalConfig.explorerVersion; | ||
| 807 | + joinClassSuccessCallBackData.os = GlobalConfig.os; | ||
| 808 | + | ||
| 813 | loger.log('加入课堂成功->'); | 809 | loger.log('加入课堂成功->'); |
| 814 | loger.log(joinClassSuccessCallBackData); | 810 | loger.log(joinClassSuccessCallBackData); |
| 815 | 811 | ||
| @@ -2014,6 +2010,13 @@ export default class MessageEntrance extends Emiter { | @@ -2014,6 +2010,13 @@ export default class MessageEntrance extends Emiter { | ||
| 2014 | joinClassSuccessCallBackData.ssTunnelAppURL = GlobalConfig.ssTunnelAppURL; | 2010 | joinClassSuccessCallBackData.ssTunnelAppURL = GlobalConfig.ssTunnelAppURL; |
| 2015 | joinClassSuccessCallBackData.currentSceneTableId = GlobalConfig.currentSceneTableId; //文档区域的模块显示 | 2011 | joinClassSuccessCallBackData.currentSceneTableId = GlobalConfig.currentSceneTableId; //文档区域的模块显示 |
| 2016 | joinClassSuccessCallBackData.serverAndLoacTimeDistanc = GlobalConfig.serverAndLoacTimeDistanc; | 2012 | joinClassSuccessCallBackData.serverAndLoacTimeDistanc = GlobalConfig.serverAndLoacTimeDistanc; |
| 2013 | + | ||
| 2014 | + joinClassSuccessCallBackData.deviceType = GlobalConfig.deviceType; | ||
| 2015 | + joinClassSuccessCallBackData.language = GlobalConfig.language; | ||
| 2016 | + joinClassSuccessCallBackData.explorer = GlobalConfig.explorer; | ||
| 2017 | + joinClassSuccessCallBackData.explorerVersion = GlobalConfig.explorerVersion; | ||
| 2018 | + joinClassSuccessCallBackData.os = GlobalConfig.os; | ||
| 2019 | + | ||
| 2017 | loger.log(joinClassSuccessCallBackData); | 2020 | loger.log(joinClassSuccessCallBackData); |
| 2018 | //和加入课堂成功使用同样的消息处理 | 2021 | //和加入课堂成功使用同样的消息处理 |
| 2019 | this._emit(MessageTypes.CLASS_JOIN_SUCCESS, joinClassSuccessCallBackData); | 2022 | this._emit(MessageTypes.CLASS_JOIN_SUCCESS, joinClassSuccessCallBackData); |
| @@ -368,7 +368,7 @@ GlobalConfig.maxMediaChannels = 0; //最大音视频路数,以音视频路数 | @@ -368,7 +368,7 @@ GlobalConfig.maxMediaChannels = 0; //最大音视频路数,以音视频路数 | ||
| 368 | GlobalConfig.hasCamera = false; //摄像头是否可用 | 368 | GlobalConfig.hasCamera = false; //摄像头是否可用 |
| 369 | GlobalConfig.hasMicrophone = false; //麦克风是否可用 | 369 | GlobalConfig.hasMicrophone = false; //麦克风是否可用 |
| 370 | 370 | ||
| 371 | -GlobalConfig.deviceType = 0; //设备类型 0:电脑 1:安卓 2:ios | 371 | +GlobalConfig.deviceType = 0; //设备类型 0:电脑 1:ios 2:安卓 |
| 372 | GlobalConfig.userIp = ""; //用户当前IP | 372 | GlobalConfig.userIp = ""; //用户当前IP |
| 373 | GlobalConfig.userId = 0; | 373 | GlobalConfig.userId = 0; |
| 374 | GlobalConfig.userName = ""; | 374 | GlobalConfig.userName = ""; |
| @@ -379,8 +379,8 @@ GlobalConfig.openMicrophones = 0; | @@ -379,8 +379,8 @@ GlobalConfig.openMicrophones = 0; | ||
| 379 | //视频质量相关设置 | 379 | //视频质量相关设置 |
| 380 | GlobalConfig.fps = 15; //帧频 | 380 | GlobalConfig.fps = 15; //帧频 |
| 381 | GlobalConfig.gop = 3; //关键帧间隔(秒) | 381 | GlobalConfig.gop = 3; //关键帧间隔(秒) |
| 382 | -GlobalConfig.videoQuality = 2; //画面质量 0-低;1-中;2-高; | ||
| 383 | -GlobalConfig.curVideoQuality = 2; //当前分辨率 | 382 | +GlobalConfig.videoQuality = 1; //画面质量 0-低;1-中;2-高; |
| 383 | +GlobalConfig.curVideoQuality = 1; //当前分辨率 | ||
| 384 | GlobalConfig.cameras = []; //摄像头列表 | 384 | GlobalConfig.cameras = []; //摄像头列表 |
| 385 | GlobalConfig.microphones = []; //麦克风列表 | 385 | GlobalConfig.microphones = []; //麦克风列表 |
| 386 | 386 | ||
| @@ -480,7 +480,13 @@ GlobalConfig.ssTunnelAppURL = ''; //屏幕共享插件的地址 | @@ -480,7 +480,13 @@ GlobalConfig.ssTunnelAppURL = ''; //屏幕共享插件的地址 | ||
| 480 | GlobalConfig.serverTime = 0; //服务器当前时间戳 | 480 | GlobalConfig.serverTime = 0; //服务器当前时间戳 |
| 481 | GlobalConfig.serverAndLoacTimeDistanc = 0; //本地时间和服务器时间错的差值; | 481 | GlobalConfig.serverAndLoacTimeDistanc = 0; //本地时间和服务器时间错的差值; |
| 482 | 482 | ||
| 483 | -GlobalConfig.isMobile = false; //是否是移动端 | ||
| 484 | GlobalConfig.rosterNumber=0;//当前总人数 | 483 | GlobalConfig.rosterNumber=0;//当前总人数 |
| 484 | + | ||
| 485 | +GlobalConfig.isMobile = false; //是否是移动端 | ||
| 486 | +GlobalConfig.language="";//浏览器语言 | ||
| 487 | +GlobalConfig.platform="pc";//平台 IOS/ANDROID/PC | ||
| 488 | +GlobalConfig.explorer="未知";//浏览器 | ||
| 489 | +GlobalConfig.explorerVersion="未知";//浏览器版本 | ||
| 490 | +GlobalConfig.os="未知";//系统 | ||
| 485 | export default GlobalConfig; | 491 | export default GlobalConfig; |
| 486 | 492 |
src/SystemConfig.js
0 → 100644
| 1 | +/* | ||
| 2 | + * 全局数据管理 | ||
| 3 | + * */ | ||
| 4 | +import Loger from 'Loger'; | ||
| 5 | +import mdetect from "mdetect"; | ||
| 6 | +import GlobalConfig from 'GlobalConfig'; | ||
| 7 | + | ||
| 8 | +let loger = Loger.getLoger('SystemConfig'); | ||
| 9 | +class SystemConfig { | ||
| 10 | + constructor() { | ||
| 11 | + | ||
| 12 | + } | ||
| 13 | + //获取系统信息 | ||
| 14 | + static getSystemInfo(){ | ||
| 15 | + //检查是否是移动端 | ||
| 16 | + GlobalConfig.isMobile = mdetect.isMobileUA(); | ||
| 17 | + if (GlobalConfig.isMobile) { | ||
| 18 | + loger.warn("当前设备是移动设备"); | ||
| 19 | + } else { | ||
| 20 | + loger.warn("当前设备是PC"); | ||
| 21 | + } | ||
| 22 | + if(mdetect.isIOS()){ | ||
| 23 | + GlobalConfig.deviceType=1;//"ios"; | ||
| 24 | + } if(mdetect.isAndroid()){ | ||
| 25 | + GlobalConfig.platform=2;//"android"; | ||
| 26 | + }else { | ||
| 27 | + GlobalConfig.platform=0;//"pc"; | ||
| 28 | + } | ||
| 29 | + | ||
| 30 | + //语言 | ||
| 31 | + GlobalConfig.language ="unknown"; | ||
| 32 | + if(navigator){ | ||
| 33 | + let language=navigator.language || navigator.browserLanguage; | ||
| 34 | + GlobalConfig.language = language.toLocaleLowerCase(); | ||
| 35 | + } | ||
| 36 | + let browserInfo=this.getBrowserInfo(); | ||
| 37 | + GlobalConfig.explorer=browserInfo.explorer||"未知"; | ||
| 38 | + GlobalConfig.explorerVersion=browserInfo.explorerVersion||"未知"; | ||
| 39 | + | ||
| 40 | + GlobalConfig.os=this.detectOS(); | ||
| 41 | + loger.log("deviceType:"+GlobalConfig.deviceType); | ||
| 42 | + loger.log("language:"+GlobalConfig.language); | ||
| 43 | + loger.log("explorer:"+GlobalConfig.explorer); | ||
| 44 | + loger.log("explorerVersion:"+GlobalConfig.explorerVersion); | ||
| 45 | + loger.log("os:"+GlobalConfig.os); | ||
| 46 | + } | ||
| 47 | + //获取浏览器和信息 | ||
| 48 | + static getBrowserInfo(){ | ||
| 49 | + var Sys = {}; | ||
| 50 | + var ua = navigator.userAgent.toLowerCase(); | ||
| 51 | + var re =/(trident|msie|firefox|chrome|opera|version).*?([\d.]+)/; | ||
| 52 | + var m = ua.match(re); | ||
| 53 | + Sys.explorer = m[1].replace(/version/, "'safari"); | ||
| 54 | + | ||
| 55 | + //判断是否是IE11 | ||
| 56 | + if(Sys.explorer=="trident"){ | ||
| 57 | + Sys.explorer="IE11" | ||
| 58 | + Sys.explorerVersion = "11.0"; | ||
| 59 | + }else if(Sys.explorer=="msie"){ | ||
| 60 | + //IE | ||
| 61 | + Sys.explorer="IE" | ||
| 62 | + Sys.explorerVersion = m[2]; | ||
| 63 | + }else { | ||
| 64 | + //非IE | ||
| 65 | + Sys.explorerVersion = m[2]; | ||
| 66 | + } | ||
| 67 | + return Sys; | ||
| 68 | + } | ||
| 69 | + //系统信息 | ||
| 70 | + static detectOS() { | ||
| 71 | + var sUserAgent = navigator.userAgent; | ||
| 72 | + var isWin = (navigator.platform == "Win32") || (navigator.platform == "Windows"); | ||
| 73 | + var isMac = (navigator.platform == "Mac68K") || (navigator.platform == "MacPPC") || (navigator.platform == "Macintosh") || (navigator.platform == "MacIntel"); | ||
| 74 | + if (isMac) return "Mac"; | ||
| 75 | + var isUnix = (navigator.platform == "X11") && !isWin && !isMac; | ||
| 76 | + if (isUnix) return "Unix"; | ||
| 77 | + var isLinux = (String(navigator.platform).indexOf("Linux") > -1); | ||
| 78 | + if (isLinux) return "Linux"; | ||
| 79 | + if (isWin) { | ||
| 80 | + var isWin2K = sUserAgent.indexOf("Windows NT 5.0") > -1 || sUserAgent.indexOf("Windows 2000") > -1; | ||
| 81 | + if (isWin2K) return "Win2000"; | ||
| 82 | + var isWinXP = sUserAgent.indexOf("Windows NT 5.1") > -1 || sUserAgent.indexOf("Windows XP") > -1; | ||
| 83 | + if (isWinXP) return "WinXP"; | ||
| 84 | + var isWin2003 = sUserAgent.indexOf("Windows NT 5.2") > -1 || sUserAgent.indexOf("Windows 2003") > -1; | ||
| 85 | + if (isWin2003) return "Win2003"; | ||
| 86 | + var isWinVista= sUserAgent.indexOf("Windows NT 6.0") > -1 || sUserAgent.indexOf("Windows Vista") > -1; | ||
| 87 | + if (isWinVista) return "WinVista"; | ||
| 88 | + var isWin7 = sUserAgent.indexOf("Windows NT 6.1") > -1 || sUserAgent.indexOf("Windows 7") > -1; | ||
| 89 | + if (isWin7) return "Win7"; | ||
| 90 | + } | ||
| 91 | + return "other"; | ||
| 92 | + } | ||
| 93 | +} | ||
| 94 | +export default SystemConfig; | ||
| 95 | + |
| @@ -143,6 +143,12 @@ class ConferApe extends Ape { | @@ -143,6 +143,12 @@ class ConferApe extends Ape { | ||
| 143 | //用户当前选择的MS | 143 | //用户当前选择的MS |
| 144 | nodeInfoRecordPdu.msIpPort = GlobalConfig.MS_PUBLISH_IP + ":" + GlobalConfig.MS_PUBLISH_PORT; | 144 | nodeInfoRecordPdu.msIpPort = GlobalConfig.MS_PUBLISH_IP + ":" + GlobalConfig.MS_PUBLISH_PORT; |
| 145 | 145 | ||
| 146 | + nodeInfoRecordPdu.deviceType = GlobalConfig.deviceType; | ||
| 147 | + nodeInfoRecordPdu.language = GlobalConfig.language; | ||
| 148 | + nodeInfoRecordPdu.explorer = GlobalConfig.explorer; | ||
| 149 | + nodeInfoRecordPdu.explorerVersion = GlobalConfig.explorerVersion; | ||
| 150 | + nodeInfoRecordPdu.os = GlobalConfig.os; | ||
| 151 | + | ||
| 146 | return nodeInfoRecordPdu; | 152 | return nodeInfoRecordPdu; |
| 147 | } | 153 | } |
| 148 | 154 |
| @@ -17,233 +17,240 @@ import EngineUtils from 'EngineUtils'; | @@ -17,233 +17,240 @@ import EngineUtils from 'EngineUtils'; | ||
| 17 | let loger = Loger.getLoger('MCU'); | 17 | let loger = Loger.getLoger('MCU'); |
| 18 | 18 | ||
| 19 | class MCU extends Emiter { | 19 | class MCU extends Emiter { |
| 20 | - constructor() { | ||
| 21 | - super(); | ||
| 22 | - this._apes = {}; | ||
| 23 | - this._everSocket = everSocket; | ||
| 24 | - this._everSocket.on(everSocket.OPEN, this._everSocketOpenHandler.bind(this)); | ||
| 25 | - this._everSocket.on(everSocket.MESSAGE, this._everSocketMsgReceivedHandler.bind(this)); | ||
| 26 | - this._everSocket.on(everSocket.CLOSED, this._everSocketCloseHandler.bind(this)); | ||
| 27 | - this._everSocket.on(everSocket.ERROR, this._everSocketErrorHandler.bind(this)); | ||
| 28 | - } | 20 | + constructor() { |
| 21 | + super(); | ||
| 22 | + this._apes = {}; | ||
| 23 | + this._everSocket = everSocket; | ||
| 24 | + this._everSocket.on(everSocket.OPEN, this._everSocketOpenHandler.bind(this)); | ||
| 25 | + this._everSocket.on(everSocket.MESSAGE, this._everSocketMsgReceivedHandler.bind(this)); | ||
| 26 | + this._everSocket.on(everSocket.CLOSED, this._everSocketCloseHandler.bind(this)); | ||
| 27 | + this._everSocket.on(everSocket.ERROR, this._everSocketErrorHandler.bind(this)); | ||
| 28 | + } | ||
| 29 | 29 | ||
| 30 | - // 注册Ape | ||
| 31 | - registerApe(ape) { | ||
| 32 | - this._apes[ape._session_id] = ape; | ||
| 33 | - } | 30 | + // 注册Ape |
| 31 | + registerApe(ape) { | ||
| 32 | + this._apes[ape._session_id] = ape; | ||
| 33 | + } | ||
| 34 | 34 | ||
| 35 | - // EverSocket建立通道完毕 | ||
| 36 | - _everSocketOpenHandler() { | ||
| 37 | - this._sendJoinClassRequest(); | ||
| 38 | - } | 35 | + // EverSocket建立通道完毕 |
| 36 | + _everSocketOpenHandler() { | ||
| 37 | + this._sendJoinClassRequest(); | ||
| 38 | + } | ||
| 39 | 39 | ||
| 40 | - // EverSocket连接断开 | ||
| 41 | - _everSocketCloseHandler() { | ||
| 42 | - //如果已经是断开状态,不需要多次发送异常消息 | ||
| 43 | - if (GlobalConfig.getCurrentStatus().code == GlobalConfig.statusCode_3.code) { | ||
| 44 | - loger.warn('已经断开连接->'); | ||
| 45 | - return; | ||
| 46 | - } | ||
| 47 | - GlobalConfig.setCurrentStatus(GlobalConfig.statusCode_3); | ||
| 48 | - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_SOCKET_DISCONNECT); | 40 | + // EverSocket连接断开 |
| 41 | + _everSocketCloseHandler() { | ||
| 42 | + //如果已经是断开状态,不需要多次发送异常消息 | ||
| 43 | + if (GlobalConfig.getCurrentStatus().code == GlobalConfig.statusCode_3.code) { | ||
| 44 | + loger.warn('已经断开连接->'); | ||
| 45 | + return; | ||
| 49 | } | 46 | } |
| 47 | + GlobalConfig.setCurrentStatus(GlobalConfig.statusCode_3); | ||
| 48 | + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_SOCKET_DISCONNECT); | ||
| 49 | + } | ||
| 50 | 50 | ||
| 51 | - //EverSocket错误异常 | ||
| 52 | - _everSocketErrorHandler(_errorCode) { | ||
| 53 | - //this._emit(MessageTypes.MCU_ERROR, _errorCode); | ||
| 54 | - //如果自动重连次数已经达到最大值,重新选点 | ||
| 55 | - if (_errorCode == everSocket.ERR_SOCKET_RECONNECT_FAILED) { | ||
| 56 | - this._emit(MessageTypes.SWITCH_MCU_IP); | ||
| 57 | - } | 51 | + //EverSocket错误异常 |
| 52 | + _everSocketErrorHandler(_errorCode) { | ||
| 53 | + //this._emit(MessageTypes.MCU_ERROR, _errorCode); | ||
| 54 | + //如果自动重连次数已经达到最大值,重新选点 | ||
| 55 | + if (_errorCode == everSocket.ERR_SOCKET_RECONNECT_FAILED) { | ||
| 56 | + this._emit(MessageTypes.SWITCH_MCU_IP); | ||
| 58 | } | 57 | } |
| 58 | + } | ||
| 59 | 59 | ||
| 60 | - //MCU-发送加入课堂请求 | ||
| 61 | - _sendJoinClassRequest() { | ||
| 62 | - //const classInfo = this.classInfo; | ||
| 63 | - loger.log('MCU-发送加入课堂请求.'); | ||
| 64 | - loger.log(this.classInfo); | ||
| 65 | - var descriptorPdu = new pdu['RCConferenceDescriptorPdu']; | ||
| 66 | - descriptorPdu.id = this.classInfo.classId; | ||
| 67 | - descriptorPdu.name = this.classInfo.className || ""; | ||
| 68 | - descriptorPdu.mode = 0; | ||
| 69 | - descriptorPdu.capacity = 1; | ||
| 70 | - | ||
| 71 | - var joinRequestPdu = new pdu['RCConferenceJoinRequestPdu']; | ||
| 72 | - joinRequestPdu.type = 2; | ||
| 73 | - joinRequestPdu.initiator = this.classInfo.nodeId; | ||
| 74 | - joinRequestPdu.nodeType = PduConsts.NT_TERMINAL; //normal | ||
| 75 | - joinRequestPdu.classDescription = descriptorPdu;// classDescription | ||
| 76 | - | ||
| 77 | - let pduMsg = pdu.create_join_class_request_pdu( | ||
| 78 | - joinRequestPdu.type, | ||
| 79 | - this.classInfo.nodeId, | ||
| 80 | - this.classInfo.classId, | ||
| 81 | - 0, | ||
| 82 | - ApeConsts.BROADCAST_CHANNEL_ID, | ||
| 83 | - true, | ||
| 84 | - PduConsts.DP_TOP, | ||
| 85 | - this.classInfo.topNodeID, | ||
| 86 | - PduConsts.SEG_ONCE | ||
| 87 | - ); | ||
| 88 | - | ||
| 89 | - pduMsg.set("site", this.classInfo.siteId);//课堂号对应的名称 | ||
| 90 | - pduMsg.set("userId", this.classInfo.userId); | ||
| 91 | - pduMsg.set("userName", Base64.fromByteArray(ArrayBufferUtil.strToUint8Array(this.classInfo.userName))); | ||
| 92 | - pduMsg.set("userRole", this.classInfo.userRole); | ||
| 93 | - pduMsg.set("deviceType", "" + GlobalConfig.deviceType); | ||
| 94 | - pduMsg.set("data", joinRequestPdu.toArrayBuffer()); | ||
| 95 | - | ||
| 96 | - this._everSocket.send(pduMsg.toArrayBuffer()); | ||
| 97 | - } | 60 | + //MCU-发送加入课堂请求 |
| 61 | + _sendJoinClassRequest() { | ||
| 62 | + //const classInfo = this.classInfo; | ||
| 63 | + loger.log('MCU-发送加入课堂请求.'); | ||
| 64 | + loger.log(this.classInfo); | ||
| 65 | + var descriptorPdu = new pdu['RCConferenceDescriptorPdu']; | ||
| 66 | + descriptorPdu.id = this.classInfo.classId; | ||
| 67 | + descriptorPdu.name = this.classInfo.className || ""; | ||
| 68 | + descriptorPdu.mode = 0; | ||
| 69 | + descriptorPdu.capacity = 1; | ||
| 98 | 70 | ||
| 99 | - // EverSocket底层消息处理 | ||
| 100 | - _everSocketMsgReceivedHandler(data) { | ||
| 101 | - let pduMsg = pdu.decode_pdu(data); | ||
| 102 | - let pduType = pduMsg.get("type"); | ||
| 103 | - let pduData = pduMsg.get("data"); | ||
| 104 | - //loger.data('MCU-FirstLayer封装消息', 'type', pdu.id2type(pduMsg.type), pduMsg.type, 'sessionId', ApeConsts(pduMsg.sessionId), pduMsg.sessionId); | ||
| 105 | - //loger.log('MCU-FirstLayer封装消息', 'type', pdu.id2type(pduMsg.type), pduMsg.type, 'sessionId', ApeConsts(pduMsg.sessionId), pduMsg.sessionId); | ||
| 106 | - switch (pduType) { | ||
| 107 | - case PduType.RCPDU_CONNECT_PROVIDER_RESPONSE: | ||
| 108 | - //加入课堂请求返回数据处理 | ||
| 109 | - let joinConfPdu = pdu['RCConferenceJoinResponsePdu'].decode(pduData); | ||
| 110 | - let pduResultCode = joinConfPdu.result; | ||
| 111 | - loger.warn('RCPDU_CONNECT_PROVIDER_RESPONSE ->pduResultCode:' + pduResultCode); | ||
| 112 | - switch (pduResultCode) { | ||
| 113 | - case PduConsts.RET_SUCCESS: | ||
| 114 | - //加入成功 | ||
| 115 | - this._updateMCUConfInfoDescription(joinConfPdu.classDescription); | ||
| 116 | - this._emit(MessageTypes.CLASS_JOIN_MCU_SUCCESS, this.classInfo); | ||
| 117 | - break; | ||
| 118 | - case PduConsts.RET_FULL_CAPACITY: | ||
| 119 | - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_JOIN_FULL); | ||
| 120 | - //this._emit(MessageTypes.CLASS_JOIN_FAILED,MessageTypes.ERR_CLASS_JOIN_FULL); | ||
| 121 | - //this._emit(MessageTypes.CLASS_JOIN_FULL); | ||
| 122 | - break; | ||
| 123 | - default: | ||
| 124 | - loger.arn('JoinConfPdu-未知类型-等待处理.', pduResultCode); | ||
| 125 | - break | ||
| 126 | - } | ||
| 127 | - break; | ||
| 128 | - case PduType.RCPDU_SEND_DATA_REQUEST: | ||
| 129 | - //先判断当前消息属于哪个APE 根据 sessionId来判断 | ||
| 130 | - let ape = this._apes[pduMsg.sessionId]; | ||
| 131 | - let sessionLabel = ApeConsts(pduMsg.sessionId); | ||
| 132 | - if (ape) { | ||
| 133 | - let subTypeLabel = pdu.id2type(pduMsg.subType); | ||
| 134 | - //loger.log('MCU-SecondLayer封装消息', 'sessionId', sessionLabel, pduMsg.sessionId, 'subtype', subTypeLabel, pduMsg.subType); | ||
| 135 | - | ||
| 136 | - loger.warn('接收服务端消息----------------->subType->', pduMsg.subType, GlobalConfig.mcuDelay, GlobalConfig.messageDelay); | ||
| 137 | - //延迟处理消息(3个条件--->ape允许延迟&&客户端设置需要延迟&&Sass设置的延迟时间大于0) | ||
| 138 | - if (ape._apeDelayed && GlobalConfig.messageDelay && GlobalConfig.mcuDelay > 0) { | ||
| 139 | - loger.warn('延迟处理消息->', GlobalConfig.mcuDelay); | ||
| 140 | - setTimeout(() => { | ||
| 141 | - //this._pduRegAdapterHandler(regBuffer, seekTime); | ||
| 142 | - ape._emit(pduMsg.subType, pduMsg.data); | ||
| 143 | - }, GlobalConfig.mcuDelay * 1000);//mcuDelay单位是秒, | ||
| 144 | - // 这里需要换算为毫秒 | ||
| 145 | - return; | ||
| 146 | - } | ||
| 147 | - ape._emit(pduMsg.subType, pduMsg.data); | ||
| 148 | - } else { | ||
| 149 | - loger.warn(sessionLabel + '尚未注册'); | ||
| 150 | - } | ||
| 151 | - break; | ||
| 152 | - default: | ||
| 153 | - loger.warn('PDU-未知类型-等待处理.', pduType); | ||
| 154 | - } | ||
| 155 | - } | 71 | + var joinRequestPdu = new pdu['RCConferenceJoinRequestPdu']; |
| 72 | + joinRequestPdu.type = 2; | ||
| 73 | + joinRequestPdu.initiator = this.classInfo.nodeId; | ||
| 74 | + joinRequestPdu.nodeType = PduConsts.NT_TERMINAL; //normal | ||
| 75 | + joinRequestPdu.classDescription = descriptorPdu;// classDescription | ||
| 156 | 76 | ||
| 157 | - _updateMCUConfInfoDescription(_data) { | ||
| 158 | - // let _mcuConfDesc=new pdu['RCConferenceDescriptorPdu'].decode(mcuConfDesc); | ||
| 159 | - loger.log('_updateMCUConfInfoDescription.'); | ||
| 160 | - //let classDescription=new pdu['RCConferenceDescriptorPdu'].decode(_data); | ||
| 161 | - loger.log(_data); | ||
| 162 | - //let info = this.mcuClassInfo.info; | ||
| 163 | - //info._conference_name = ArrayBufferUtil.uint8ArrayToStr(mcuConfDesc.name, 0); | ||
| 164 | - //info._capacity = mcuConfDesc.capacity; | ||
| 165 | - //info._mode = mcuConfDesc.mode; | ||
| 166 | - } | 77 | + let pduMsg = pdu.create_join_class_request_pdu( |
| 78 | + joinRequestPdu.type, | ||
| 79 | + this.classInfo.nodeId, | ||
| 80 | + this.classInfo.classId, | ||
| 81 | + 0, | ||
| 82 | + ApeConsts.BROADCAST_CHANNEL_ID, | ||
| 83 | + true, | ||
| 84 | + PduConsts.DP_TOP, | ||
| 85 | + this.classInfo.topNodeID, | ||
| 86 | + PduConsts.SEG_ONCE | ||
| 87 | + ); | ||
| 167 | 88 | ||
| 168 | - // MU服务是否连接 | ||
| 169 | - get connected() { | ||
| 170 | - if (this._everSocket && this._everSocket.connected) | ||
| 171 | - return true; | ||
| 172 | - return false; | ||
| 173 | - } | 89 | + pduMsg.set("site", this.classInfo.siteId);//课堂号对应的名称 |
| 90 | + pduMsg.set("userId", this.classInfo.userId); | ||
| 91 | + pduMsg.set("userName", Base64.fromByteArray(ArrayBufferUtil.strToUint8Array(this.classInfo.userName))); | ||
| 92 | + pduMsg.set("userRole", this.classInfo.userRole); | ||
| 93 | + pduMsg.set("deviceType", "" + GlobalConfig.deviceType); | ||
| 94 | + pduMsg.set("data", joinRequestPdu.toArrayBuffer()); | ||
| 95 | + | ||
| 96 | + this._everSocket.send(pduMsg.toArrayBuffer()); | ||
| 97 | + } | ||
| 98 | + | ||
| 99 | + // EverSocket底层消息处理 | ||
| 100 | + _everSocketMsgReceivedHandler(data) { | ||
| 101 | + let pduMsg = pdu.decode_pdu(data); | ||
| 102 | + let pduType = pduMsg.get("type"); | ||
| 103 | + let pduData = pduMsg.get("data"); | ||
| 104 | + //loger.data('MCU-FirstLayer封装消息', 'type', pdu.id2type(pduMsg.type), pduMsg.type, 'sessionId', ApeConsts(pduMsg.sessionId), pduMsg.sessionId); | ||
| 105 | + //loger.log('MCU-FirstLayer封装消息', 'type', pdu.id2type(pduMsg.type), pduMsg.type, 'sessionId', ApeConsts(pduMsg.sessionId), pduMsg.sessionId); | ||
| 106 | + switch (pduType) { | ||
| 107 | + case PduType.RCPDU_CONNECT_PROVIDER_RESPONSE: | ||
| 108 | + //加入课堂请求返回数据处理 | ||
| 109 | + let joinConfPdu = pdu['RCConferenceJoinResponsePdu'].decode(pduData); | ||
| 110 | + let pduResultCode = joinConfPdu.result; | ||
| 111 | + loger.warn('RCPDU_CONNECT_PROVIDER_RESPONSE ->pduResultCode:' + pduResultCode); | ||
| 112 | + switch (pduResultCode) { | ||
| 113 | + case PduConsts.RET_SUCCESS: | ||
| 114 | + //加入成功 | ||
| 115 | + this._updateMCUConfInfoDescription(joinConfPdu.classDescription); | ||
| 116 | + this._emit(MessageTypes.CLASS_JOIN_MCU_SUCCESS, this.classInfo); | ||
| 117 | + break; | ||
| 118 | + case PduConsts.RET_FULL_CAPACITY: | ||
| 119 | + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_CLASS_JOIN_FULL); | ||
| 120 | + //this._emit(MessageTypes.CLASS_JOIN_FAILED,MessageTypes.ERR_CLASS_JOIN_FULL); | ||
| 121 | + //this._emit(MessageTypes.CLASS_JOIN_FULL); | ||
| 122 | + break; | ||
| 123 | + default: | ||
| 124 | + loger.arn('JoinConfPdu-未知类型-等待处理.', pduResultCode); | ||
| 125 | + break | ||
| 126 | + } | ||
| 127 | + break; | ||
| 128 | + case PduType.RCPDU_SEND_DATA_REQUEST: | ||
| 129 | + //先判断当前消息属于哪个APE 根据 sessionId来判断 | ||
| 130 | + let ape = this._apes[pduMsg.sessionId]; | ||
| 131 | + let sessionLabel = ApeConsts(pduMsg.sessionId); | ||
| 132 | + if (ape) { | ||
| 133 | + let subTypeLabel = pdu.id2type(pduMsg.subType); | ||
| 134 | + //loger.log('MCU-SecondLayer封装消息', 'sessionId', sessionLabel, pduMsg.sessionId, 'subtype', subTypeLabel, pduMsg.subType); | ||
| 174 | 135 | ||
| 175 | - // 课堂发送消息 -- 消息同意序列号 | ||
| 176 | - send(msg) { | ||
| 177 | - if (this.connected) { | ||
| 178 | - loger.log('发送数据到服务端-------------------->'); | ||
| 179 | - this._everSocket.send(msg.toArrayBuffer()); | 136 | + loger.warn('接收服务端消息----------------->subType->', pduMsg.subType, GlobalConfig.mcuDelay, GlobalConfig.messageDelay); |
| 137 | + //延迟处理消息(3个条件--->ape允许延迟&&客户端设置需要延迟&&Sass设置的延迟时间大于0) | ||
| 138 | + if (ape._apeDelayed && GlobalConfig.messageDelay && GlobalConfig.mcuDelay > 0) { | ||
| 139 | + loger.warn('延迟处理消息->', GlobalConfig.mcuDelay); | ||
| 140 | + setTimeout(() => { | ||
| 141 | + //this._pduRegAdapterHandler(regBuffer, seekTime); | ||
| 142 | + ape._emit(pduMsg.subType, pduMsg.data); | ||
| 143 | + }, GlobalConfig.mcuDelay * 1000);//mcuDelay单位是秒, | ||
| 144 | + // 这里需要换算为毫秒 | ||
| 145 | + return; | ||
| 146 | + } | ||
| 147 | + ape._emit(pduMsg.subType, pduMsg.data); | ||
| 180 | } else { | 148 | } else { |
| 181 | - loger.log('发送数据到服务端-------------------->失败->未连接到服务端'); | ||
| 182 | - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_SOCKET_DISCONNECT); | 149 | + loger.warn(sessionLabel + '尚未注册'); |
| 183 | } | 150 | } |
| 151 | + break; | ||
| 152 | + default: | ||
| 153 | + loger.warn('PDU-未知类型-等待处理.', pduType); | ||
| 184 | } | 154 | } |
| 155 | + } | ||
| 185 | 156 | ||
| 186 | - // 主动断开MCU连接 | ||
| 187 | - leaveMCU() { | ||
| 188 | - for (let ape in this._apes) { | ||
| 189 | - this._apes[ape].stopApe(); | ||
| 190 | - } | ||
| 191 | - loger.log('leaveMCU'); | ||
| 192 | - GlobalConfig.setCurrentStatus(GlobalConfig.statusCode_3); | ||
| 193 | - GlobalConfig.classJoinSuccess=false; | ||
| 194 | - this._everSocket.end(); | 157 | + _updateMCUConfInfoDescription(_data) { |
| 158 | + // let _mcuConfDesc=new pdu['RCConferenceDescriptorPdu'].decode(mcuConfDesc); | ||
| 159 | + loger.log('_updateMCUConfInfoDescription.'); | ||
| 160 | + //let classDescription=new pdu['RCConferenceDescriptorPdu'].decode(_data); | ||
| 161 | + loger.log(_data); | ||
| 162 | + //let info = this.mcuClassInfo.info; | ||
| 163 | + //info._conference_name = ArrayBufferUtil.uint8ArrayToStr(mcuConfDesc.name, 0); | ||
| 164 | + //info._capacity = mcuConfDesc.capacity; | ||
| 165 | + //info._mode = mcuConfDesc.mode; | ||
| 166 | + } | ||
| 167 | + | ||
| 168 | + // MU服务是否连接 | ||
| 169 | + get connected() { | ||
| 170 | + if (this._everSocket && this._everSocket.connected) | ||
| 171 | + return true; | ||
| 172 | + return false; | ||
| 173 | + } | ||
| 174 | + | ||
| 175 | + // 课堂发送消息 -- 消息同意序列号 | ||
| 176 | + send(msg) { | ||
| 177 | + if (this.connected) { | ||
| 178 | + loger.log('发送数据到服务端-------------------->'); | ||
| 179 | + this._everSocket.send(msg.toArrayBuffer()); | ||
| 180 | + } else { | ||
| 181 | + loger.log('发送数据到服务端-------------------->失败->未连接到服务端'); | ||
| 182 | + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_SOCKET_DISCONNECT); | ||
| 195 | } | 183 | } |
| 184 | + } | ||
| 196 | 185 | ||
| 197 | - // 主动建立MCU连接 | ||
| 198 | - joinMCU(_classInfo) { | ||
| 199 | - loger.log('开始建立EverSocket通道.'); | ||
| 200 | - GlobalConfig.classJoinSuccess=false; | ||
| 201 | - loger.log(_classInfo); | ||
| 202 | - _classInfo.classId = parseInt(_classInfo.classId); // classId 必须整形 | ||
| 203 | - this.classInfo = _classInfo; | ||
| 204 | - // 创建刷新nodeId | ||
| 205 | - this.classInfo.nodeId = EngineUtils.creatSoleNumberFromTimestamp(); | ||
| 206 | - GlobalConfig.nodeId = this.classInfo.nodeId;//这是标识自己身份的id | ||
| 207 | - | ||
| 208 | - let nodeInfoRecordPdu = new pdu['RCNodeInfoRecordPdu']; | ||
| 209 | - nodeInfoRecordPdu.name = this.classInfo.userName; | ||
| 210 | - nodeInfoRecordPdu.nodeId = this.classInfo.nodeId; | ||
| 211 | - nodeInfoRecordPdu.userId = this.classInfo.userId; | ||
| 212 | - nodeInfoRecordPdu.role = ApeConsts.userTypesToId[this.classInfo.userRole] || 1; //NR_NORMAL用户的身份,根据用户登录时的身份设置 | ||
| 213 | - nodeInfoRecordPdu.level = 0; | ||
| 214 | - nodeInfoRecordPdu.handUpTime=0; | ||
| 215 | - nodeInfoRecordPdu.openCamera=0; | ||
| 216 | - nodeInfoRecordPdu.openMicrophones=0; | ||
| 217 | - nodeInfoRecordPdu.microphones=GlobalConfig.microphones; | ||
| 218 | - nodeInfoRecordPdu.cameras=GlobalConfig.cameras; | ||
| 219 | - nodeInfoRecordPdu.videoQuality=GlobalConfig.videoQuality;//设置分辨率的 | ||
| 220 | - nodeInfoRecordPdu.userIp=GlobalConfig.userIp; | ||
| 221 | - | ||
| 222 | - let conferenceRecord = {}; //RCConferenceRecord_T | ||
| 223 | - conferenceRecord._conference_id = this.classInfo.classId; | ||
| 224 | - conferenceRecord._top_node_id = this.classInfo.topNodeID; | ||
| 225 | - | ||
| 226 | - this.mcuClassInfo = {}; //RCMeetingInfo_T | ||
| 227 | - this.mcuClassInfo.self = nodeInfoRecordPdu; | ||
| 228 | - this.mcuClassInfo.info = conferenceRecord; | ||
| 229 | - | ||
| 230 | - // 内部mcuConfInfo | ||
| 231 | - this.classInfo.mcuClassInfo = this.mcuClassInfo; | ||
| 232 | - | ||
| 233 | - //开启EverSocket | ||
| 234 | - this._everSocket.begin(this.classInfo.MCUServerIP, this.classInfo.MCUServerPort); | 186 | + // 主动断开MCU连接 |
| 187 | + leaveMCU() { | ||
| 188 | + for (let ape in this._apes) { | ||
| 189 | + this._apes[ape].stopApe(); | ||
| 235 | } | 190 | } |
| 191 | + loger.log('leaveMCU'); | ||
| 192 | + GlobalConfig.setCurrentStatus(GlobalConfig.statusCode_3); | ||
| 193 | + GlobalConfig.classJoinSuccess = false; | ||
| 194 | + this._everSocket.end(); | ||
| 195 | + } | ||
| 236 | 196 | ||
| 237 | - //切换MCU的ip | ||
| 238 | - switchMCUIp(_classInfo) { | ||
| 239 | - if (_classInfo && _classInfo.MCUServerIP) { | ||
| 240 | - this.classInfo.MCUServerIP = _classInfo.MCUServerIP; | ||
| 241 | - this.classInfo.MCUServerPort = _classInfo.MCUServerPort; | ||
| 242 | - if (this._everSocket) { | ||
| 243 | - this._everSocket.switchSocketIp(this.classInfo.MCUServerIP, this.classInfo.MCUServerPort); | ||
| 244 | - } | ||
| 245 | - } | 197 | + // 主动建立MCU连接 |
| 198 | + joinMCU(_classInfo) { | ||
| 199 | + loger.log('开始建立EverSocket通道.'); | ||
| 200 | + GlobalConfig.classJoinSuccess = false; | ||
| 201 | + loger.log(_classInfo); | ||
| 202 | + _classInfo.classId = parseInt(_classInfo.classId); // classId 必须整形 | ||
| 203 | + this.classInfo = _classInfo; | ||
| 204 | + // 创建刷新nodeId | ||
| 205 | + this.classInfo.nodeId = EngineUtils.creatSoleNumberFromTimestamp(); | ||
| 206 | + GlobalConfig.nodeId = this.classInfo.nodeId;//这是标识自己身份的id | ||
| 207 | + | ||
| 208 | + let nodeInfoRecordPdu = new pdu['RCNodeInfoRecordPdu']; | ||
| 209 | + nodeInfoRecordPdu.name = this.classInfo.userName; | ||
| 210 | + nodeInfoRecordPdu.nodeId = this.classInfo.nodeId; | ||
| 211 | + nodeInfoRecordPdu.userId = this.classInfo.userId; | ||
| 212 | + nodeInfoRecordPdu.role = ApeConsts.userTypesToId[this.classInfo.userRole] || 1; //NR_NORMAL用户的身份,根据用户登录时的身份设置 | ||
| 213 | + nodeInfoRecordPdu.level = 0; | ||
| 214 | + nodeInfoRecordPdu.handUpTime = 0; | ||
| 215 | + nodeInfoRecordPdu.openCamera = 0; | ||
| 216 | + nodeInfoRecordPdu.openMicrophones = 0; | ||
| 217 | + nodeInfoRecordPdu.microphones = GlobalConfig.microphones; | ||
| 218 | + nodeInfoRecordPdu.cameras = GlobalConfig.cameras; | ||
| 219 | + nodeInfoRecordPdu.videoQuality = GlobalConfig.videoQuality;//设置分辨率的 | ||
| 220 | + nodeInfoRecordPdu.userIp = GlobalConfig.userIp; | ||
| 221 | + | ||
| 222 | + nodeInfoRecordPdu.deviceType = GlobalConfig.deviceType; | ||
| 223 | + nodeInfoRecordPdu.language = GlobalConfig.language; | ||
| 224 | + nodeInfoRecordPdu.explorer = GlobalConfig.explorer; | ||
| 225 | + nodeInfoRecordPdu.explorerVersion = GlobalConfig.explorerVersion; | ||
| 226 | + nodeInfoRecordPdu.os = GlobalConfig.os; | ||
| 227 | + | ||
| 228 | + | ||
| 229 | + let conferenceRecord = {}; //RCConferenceRecord_T | ||
| 230 | + conferenceRecord._conference_id = this.classInfo.classId; | ||
| 231 | + conferenceRecord._top_node_id = this.classInfo.topNodeID; | ||
| 232 | + | ||
| 233 | + this.mcuClassInfo = {}; //RCMeetingInfo_T | ||
| 234 | + this.mcuClassInfo.self = nodeInfoRecordPdu; | ||
| 235 | + this.mcuClassInfo.info = conferenceRecord; | ||
| 236 | + | ||
| 237 | + // 内部mcuConfInfo | ||
| 238 | + this.classInfo.mcuClassInfo = this.mcuClassInfo; | ||
| 239 | + | ||
| 240 | + //开启EverSocket | ||
| 241 | + this._everSocket.begin(this.classInfo.MCUServerIP, this.classInfo.MCUServerPort); | ||
| 242 | + } | ||
| 243 | + | ||
| 244 | + //切换MCU的ip | ||
| 245 | + switchMCUIp(_classInfo) { | ||
| 246 | + if (_classInfo && _classInfo.MCUServerIP) { | ||
| 247 | + this.classInfo.MCUServerIP = _classInfo.MCUServerIP; | ||
| 248 | + this.classInfo.MCUServerPort = _classInfo.MCUServerPort; | ||
| 249 | + if (this._everSocket) { | ||
| 250 | + this._everSocket.switchSocketIp(this.classInfo.MCUServerIP, this.classInfo.MCUServerPort); | ||
| 251 | + } | ||
| 246 | } | 252 | } |
| 253 | + } | ||
| 247 | } | 254 | } |
| 248 | 255 | ||
| 249 | export default new MCU; | 256 | export default new MCU; |
| @@ -891,7 +891,7 @@ message RCNodeInfoRecordPdu { | @@ -891,7 +891,7 @@ message RCNodeInfoRecordPdu { | ||
| 891 | optional bytes user_data = 8; | 891 | optional bytes user_data = 8; |
| 892 | optional string user_id = 9; | 892 | optional string user_id = 9; |
| 893 | optional uint32 handUpTime = 10; | 893 | optional uint32 handUpTime = 10; |
| 894 | - optional uint32 deviceType = 11; | 894 | + optional uint32 deviceType = 11;//设备类型,0:pc 1:ios 2:安卓 |
| 895 | optional uint32 mobileDirection = 12; | 895 | optional uint32 mobileDirection = 12; |
| 896 | repeated string microphones = 13; | 896 | repeated string microphones = 13; |
| 897 | repeated string cameras = 14; | 897 | repeated string cameras = 14; |
| @@ -912,6 +912,10 @@ message RCNodeInfoRecordPdu { | @@ -912,6 +912,10 @@ message RCNodeInfoRecordPdu { | ||
| 912 | repeated MsListItemPdu msList = 29; | 912 | repeated MsListItemPdu msList = 29; |
| 913 | optional string selfSilence = 30; | 913 | optional string selfSilence = 30; |
| 914 | optional string msIpPort = 31; | 914 | optional string msIpPort = 31; |
| 915 | + optional string language = 32;//系统语言 | ||
| 916 | + optional string explorer = 33;//浏览器 | ||
| 917 | + optional string explorerVersion = 34;//浏览器版本 | ||
| 918 | + optional string os = 35;//系统版本 | ||
| 915 | } | 919 | } |
| 916 | 920 | ||
| 917 | message RCVotingPollSettingsPdu { | 921 | message RCVotingPollSettingsPdu { |
-
请 注册 或 登录 后发表评论