正在显示
5 个修改的文件
包含
69 行增加
和
16 行删除
此 diff 太大无法显示。
| @@ -27,7 +27,7 @@ import Server from "config/Server"; | @@ -27,7 +27,7 @@ import Server from "config/Server"; | ||
| 27 | import UTF8 from 'utf-8'; | 27 | import UTF8 from 'utf-8'; |
| 28 | 28 | ||
| 29 | let loger = Loger.getLoger('McuClient'); | 29 | let loger = Loger.getLoger('McuClient'); |
| 30 | -let _sdkInfo = {"version": "v1.9.11.20170419", "author": "www.3mang.com"}; | 30 | +let _sdkInfo = {"version": "v1.9.12.20170419", "author": "www.3mang.com"}; |
| 31 | 31 | ||
| 32 | //APE | 32 | //APE |
| 33 | let _sass; | 33 | let _sass; |
| @@ -78,6 +78,7 @@ export default class MessageEntrance extends Emiter { | @@ -78,6 +78,7 @@ export default class MessageEntrance extends Emiter { | ||
| 78 | _mcu = Mcu; | 78 | _mcu = Mcu; |
| 79 | _mcu.on('*', (type, data) => this._emit(type, data)); | 79 | _mcu.on('*', (type, data) => this._emit(type, data)); |
| 80 | _mcu.on(MessageTypes.CLASS_JOIN_MCU_SUCCESS, this._mcuJoinMCUClassSuccessHandler.bind(this));//加入MCU课堂完成 | 80 | _mcu.on(MessageTypes.CLASS_JOIN_MCU_SUCCESS, this._mcuJoinMCUClassSuccessHandler.bind(this));//加入MCU课堂完成 |
| 81 | + _mcu.on(MessageTypes.CHANGE_MCU_IP, this._changeMcuIpHandler.bind(this));//切换MCU,重新选点 | ||
| 81 | 82 | ||
| 82 | //录制回放 | 83 | //录制回放 |
| 83 | _recordPlayback = RecordPlayBackParse; | 84 | _recordPlayback = RecordPlayBackParse; |
| @@ -198,8 +199,8 @@ export default class MessageEntrance extends Emiter { | @@ -198,8 +199,8 @@ export default class MessageEntrance extends Emiter { | ||
| 198 | _mcuErrorHandler(_data, _option) { | 199 | _mcuErrorHandler(_data, _option) { |
| 199 | let option = _option || ""; | 200 | let option = _option || ""; |
| 200 | let errorMessage = {"code": _data, "reson": MessageTypes.ErrorReson[_data] + " " + option}; | 201 | let errorMessage = {"code": _data, "reson": MessageTypes.ErrorReson[_data] + " " + option}; |
| 201 | - loger.error("MCU_ERROR", errorMessage); | ||
| 202 | this._emit(MessageTypes.ERROR_EVENT, errorMessage); | 202 | this._emit(MessageTypes.ERROR_EVENT, errorMessage); |
| 203 | + loger.error("MCU_ERROR", errorMessage); | ||
| 203 | } | 204 | } |
| 204 | 205 | ||
| 205 | //获取当前的状态 | 206 | //获取当前的状态 |
| @@ -734,6 +735,31 @@ export default class MessageEntrance extends Emiter { | @@ -734,6 +735,31 @@ export default class MessageEntrance extends Emiter { | ||
| 734 | this._emit(MessageTypes.CLASS_JOIN_SUCCESS, joinClassSuccessCallBackData); | 735 | this._emit(MessageTypes.CLASS_JOIN_SUCCESS, joinClassSuccessCallBackData); |
| 735 | } | 736 | } |
| 736 | 737 | ||
| 738 | + //切换MCU | ||
| 739 | + _changeMcuIpHandler(){ | ||
| 740 | + if(GlobalConfig.isRecordPlayBack){ | ||
| 741 | + //录制回放不做操作 | ||
| 742 | + return; | ||
| 743 | + } | ||
| 744 | + loger.log('MCU->动态选点'); | ||
| 745 | + let _this=this; | ||
| 746 | + this._getFastestMcuServer(function (_data) { | ||
| 747 | + loger.log("MCU选点结束->", _data); | ||
| 748 | + if (_data && _data.ip) { | ||
| 749 | + GlobalConfig.MCUServerIP = _data.ip; | ||
| 750 | + GlobalConfig.MCUServerPort = _data.port; | ||
| 751 | + }else { | ||
| 752 | + //随机选择一个 | ||
| 753 | + if (GlobalConfig.mcuList &&GlobalConfig.mcuList.length > 0) { | ||
| 754 | + let index = parseInt(Math.random() * GlobalConfig.mcuList.length); | ||
| 755 | + GlobalConfig.DOCServerIP = GlobalConfig.mcuList[index].ip || ""; | ||
| 756 | + GlobalConfig.DOCServerPort = GlobalConfig.mcuList[index].port || ""; | ||
| 757 | + } | ||
| 758 | + } | ||
| 759 | + loger.log('MCU->切换->', GlobalConfig.DOCServerIP, GlobalConfig.DOCServerPort ); | ||
| 760 | + }); | ||
| 761 | + } | ||
| 762 | + | ||
| 737 | //Sass删除文档数据 | 763 | //Sass删除文档数据 |
| 738 | _sassDeleteDocument(_param) { | 764 | _sassDeleteDocument(_param) { |
| 739 | if (!_mcu.connected) { | 765 | if (!_mcu.connected) { |
| @@ -15,13 +15,15 @@ | @@ -15,13 +15,15 @@ | ||
| 15 | import Emiter from 'Emiter'; | 15 | import Emiter from 'Emiter'; |
| 16 | import Loger from 'Loger'; | 16 | import Loger from 'Loger'; |
| 17 | let loger = Loger.getLoger('EverSocket'); | 17 | let loger = Loger.getLoger('EverSocket'); |
| 18 | - | 18 | +const MCU_MAX_RECONNECTION = 5;//最多重连次数 |
| 19 | class EverSocket extends Emiter { | 19 | class EverSocket extends Emiter { |
| 20 | constructor() { | 20 | constructor() { |
| 21 | super(); | 21 | super(); |
| 22 | this._connected = false; | 22 | this._connected = false; |
| 23 | this._lastActiveTime = 0;//最后一次收到消息的时间 | 23 | this._lastActiveTime = 0;//最后一次收到消息的时间 |
| 24 | this._enableEverSocket = false; | 24 | this._enableEverSocket = false; |
| 25 | + this.reConnectionCounter = 0;//重连次数 | ||
| 26 | + | ||
| 25 | } | 27 | } |
| 26 | 28 | ||
| 27 | begin(ip, port) { | 29 | begin(ip, port) { |
| @@ -42,9 +44,9 @@ class EverSocket extends Emiter { | @@ -42,9 +44,9 @@ class EverSocket extends Emiter { | ||
| 42 | 44 | ||
| 43 | send(data) { | 45 | send(data) { |
| 44 | if (this._connected) { | 46 | if (this._connected) { |
| 45 | - if(data){ | ||
| 46 | - loger.log('SEND MESSAGE,byteLength---->',data.byteLength); | ||
| 47 | - }else { | 47 | + if (data) { |
| 48 | + loger.log('SEND MESSAGE,byteLength---->', data.byteLength); | ||
| 49 | + } else { | ||
| 48 | loger.log('SEND MESSAGE---->'); | 50 | loger.log('SEND MESSAGE---->'); |
| 49 | } | 51 | } |
| 50 | this.websocket.send(data); | 52 | this.websocket.send(data); |
| @@ -73,6 +75,14 @@ class EverSocket extends Emiter { | @@ -73,6 +75,14 @@ class EverSocket extends Emiter { | ||
| 73 | 75 | ||
| 74 | _reConnection() { | 76 | _reConnection() { |
| 75 | this._clear(); | 77 | this._clear(); |
| 78 | + window.clearTimeout(this.reConnectionTimeout); | ||
| 79 | + this.reConnectionCounter++; | ||
| 80 | + if (this.reConnectionCounter > MCU_MAX_RECONNECTION) { | ||
| 81 | + loger.warn('已经达到最大重连次数!'); | ||
| 82 | + this._emit(EverSocket.ERROR, EverSocket.ERR_SOCKET_RECONNECT_FAILED); | ||
| 83 | + this.reConnectionCounter=0; | ||
| 84 | + } | ||
| 85 | + | ||
| 76 | this.reConnectionTimeout = window.setTimeout(() => { | 86 | this.reConnectionTimeout = window.setTimeout(() => { |
| 77 | loger.log('WebSocket重新建立.'); | 87 | loger.log('WebSocket重新建立.'); |
| 78 | window.clearTimeout(this.reConnectionTimeout); | 88 | window.clearTimeout(this.reConnectionTimeout); |
| @@ -88,7 +98,7 @@ class EverSocket extends Emiter { | @@ -88,7 +98,7 @@ class EverSocket extends Emiter { | ||
| 88 | window.clearInterval(this.reConnectionTimeout); | 98 | window.clearInterval(this.reConnectionTimeout); |
| 89 | this._setConnected(false);//先设置状态 | 99 | this._setConnected(false);//先设置状态 |
| 90 | this._enableEverSocket = false; | 100 | this._enableEverSocket = false; |
| 91 | - if(this.websocket==null){ | 101 | + if (this.websocket == null) { |
| 92 | loger.log('WebSocket,Timers已经销毁'); | 102 | loger.log('WebSocket,Timers已经销毁'); |
| 93 | return; | 103 | return; |
| 94 | } | 104 | } |
| @@ -107,6 +117,7 @@ class EverSocket extends Emiter { | @@ -107,6 +117,7 @@ class EverSocket extends Emiter { | ||
| 107 | 117 | ||
| 108 | _onOpen() { | 118 | _onOpen() { |
| 109 | loger.log('WebSocket建立成功', this.wsURL); | 119 | loger.log('WebSocket建立成功', this.wsURL); |
| 120 | + this.reConnectionCounter = 0; | ||
| 110 | 121 | ||
| 111 | //启动心跳,检查socket链接状态 | 122 | //启动心跳,检查socket链接状态 |
| 112 | this.pingTimer = window.setInterval(this._sendPingHandler.bind(this), EverSocket.PING_INTERVAL); | 123 | this.pingTimer = window.setInterval(this._sendPingHandler.bind(this), EverSocket.PING_INTERVAL); |
| @@ -159,9 +170,9 @@ class EverSocket extends Emiter { | @@ -159,9 +170,9 @@ class EverSocket extends Emiter { | ||
| 159 | 170 | ||
| 160 | 171 | ||
| 161 | /*//修改之前的 | 172 | /*//修改之前的 |
| 162 | -EverSocket.prototype.PONG_INTERVAL = EverSocket.PONG_INTERVAL = 5000; | ||
| 163 | -EverSocket.prototype.PING_INTERVAL = EverSocket.PING_INTERVAL = 3000; | ||
| 164 | -EverSocket.prototype.RECONN_INTERVAL = EverSocket.RECONN_INTERVAL = 2000;*/ | 173 | + EverSocket.prototype.PONG_INTERVAL = EverSocket.PONG_INTERVAL = 5000; |
| 174 | + EverSocket.prototype.PING_INTERVAL = EverSocket.PING_INTERVAL = 3000; | ||
| 175 | + EverSocket.prototype.RECONN_INTERVAL = EverSocket.RECONN_INTERVAL = 2000;*/ | ||
| 165 | 176 | ||
| 166 | 177 | ||
| 167 | //20170223-mcu服务端修改了心跳的逻辑,如果客户端30秒没有请求,就会按离开的处理 | 178 | //20170223-mcu服务端修改了心跳的逻辑,如果客户端30秒没有请求,就会按离开的处理 |
| @@ -170,11 +181,14 @@ EverSocket.prototype.PONG_INTERVAL = EverSocket.PONG_INTERVAL = 21000;// | @@ -170,11 +181,14 @@ EverSocket.prototype.PONG_INTERVAL = EverSocket.PONG_INTERVAL = 21000;// | ||
| 170 | EverSocket.prototype.PING_INTERVAL = EverSocket.PING_INTERVAL = 10000;//心跳间隔 | 181 | EverSocket.prototype.PING_INTERVAL = EverSocket.PING_INTERVAL = 10000;//心跳间隔 |
| 171 | EverSocket.prototype.RECONN_INTERVAL = EverSocket.RECONN_INTERVAL = 3000;//重连的间隔 | 182 | EverSocket.prototype.RECONN_INTERVAL = EverSocket.RECONN_INTERVAL = 3000;//重连的间隔 |
| 172 | 183 | ||
| 184 | + | ||
| 185 | +EverSocket.prototype.ERR_SOCKET_RECONNECT_FAILED =EverSocket.ERR_SOCKET_RECONNECT_FAILED=20001;//MCU自动重连失败,已经达到最大重连次数 | ||
| 186 | + | ||
| 173 | EverSocket.prototype.CONNECTING = EverSocket.CONNECTING = 0; | 187 | EverSocket.prototype.CONNECTING = EverSocket.CONNECTING = 0; |
| 174 | EverSocket.prototype.OPEN = EverSocket.OPEN = 1; | 188 | EverSocket.prototype.OPEN = EverSocket.OPEN = 1; |
| 175 | EverSocket.prototype.CLOSING = EverSocket.CLOSING = 2; | 189 | EverSocket.prototype.CLOSING = EverSocket.CLOSING = 2; |
| 176 | EverSocket.prototype.CLOSED = EverSocket.CLOSED = 3; | 190 | EverSocket.prototype.CLOSED = EverSocket.CLOSED = 3; |
| 177 | EverSocket.prototype.MESSAGE = EverSocket.MESSAGE = 4; | 191 | EverSocket.prototype.MESSAGE = EverSocket.MESSAGE = 4; |
| 178 | - | 192 | +EverSocket.prototype.ERROR = EverSocket.ERROR = 5; |
| 179 | export default new EverSocket(); | 193 | export default new EverSocket(); |
| 180 | 194 |
| @@ -42,8 +42,6 @@ MessageTypes.VIDEO_BROADCAST= "video_broadcast";//'视频控制广播消息; | @@ -42,8 +42,6 @@ MessageTypes.VIDEO_BROADCAST= "video_broadcast";//'视频控制广播消息; | ||
| 42 | MessageTypes.VIDEO_GET_PUBLISH_PATH= "video_get_publish_path";//获取视频推流地址 | 42 | MessageTypes.VIDEO_GET_PUBLISH_PATH= "video_get_publish_path";//获取视频推流地址 |
| 43 | MessageTypes.VIDEO_PUBLISH_RESULT= "video_publish_result";//获取视频推流结果 | 43 | MessageTypes.VIDEO_PUBLISH_RESULT= "video_publish_result";//获取视频推流结果 |
| 44 | 44 | ||
| 45 | - | ||
| 46 | - | ||
| 47 | //音频模块事件定义 | 45 | //音频模块事件定义 |
| 48 | MessageTypes.AUDIO_PLAY ="audio_play";// 'audio.play';//播放 | 46 | MessageTypes.AUDIO_PLAY ="audio_play";// 'audio.play';//播放 |
| 49 | MessageTypes.AUDIO_STOP = "audio_stop";//'audio.stop';//停止 | 47 | MessageTypes.AUDIO_STOP = "audio_stop";//'audio.stop';//停止 |
| @@ -52,6 +50,9 @@ MessageTypes.AUDIO_BROADCAST= "audio_broadcast";//'audio.broadcast'; | @@ -52,6 +50,9 @@ MessageTypes.AUDIO_BROADCAST= "audio_broadcast";//'audio.broadcast'; | ||
| 52 | MessageTypes.AUDIO_GET_PUBLISH_PATH= "audio_get_publish_path";//获取音频推流地址 | 50 | MessageTypes.AUDIO_GET_PUBLISH_PATH= "audio_get_publish_path";//获取音频推流地址 |
| 53 | MessageTypes.AUDIO_PUBLISH_RESULT= "audio_publish_result";//获取音频推流结果 | 51 | MessageTypes.AUDIO_PUBLISH_RESULT= "audio_publish_result";//获取音频推流结果 |
| 54 | 52 | ||
| 53 | +MessageTypes.CHANGE_MS_IP ="change_ms_ip";//切换ms 重新选点 | ||
| 54 | + | ||
| 55 | + | ||
| 55 | //文档模块事件定义 | 56 | //文档模块事件定义 |
| 56 | MessageTypes.DOC_DELETE="document_delete";//'document.delete';//删除文档 | 57 | MessageTypes.DOC_DELETE="document_delete";//'document.delete';//删除文档 |
| 57 | MessageTypes.DOC_UPDATE ="document_update";// 'document.update';//更新文档(添加、变更) | 58 | MessageTypes.DOC_UPDATE ="document_update";// 'document.update';//更新文档(添加、变更) |
| @@ -71,6 +72,10 @@ MessageTypes.WHITEBOARD_ANNOTATION_UPDATE ="whiteboard_annotation_update";// 'wh | @@ -71,6 +72,10 @@ MessageTypes.WHITEBOARD_ANNOTATION_UPDATE ="whiteboard_annotation_update";// 'wh | ||
| 71 | //MessageTypes.WHITEBOARD_ANNOTATION_CLEAR = 'whiteboard.annotation.clear'; | 72 | //MessageTypes.WHITEBOARD_ANNOTATION_CLEAR = 'whiteboard.annotation.clear'; |
| 72 | 73 | ||
| 73 | 74 | ||
| 75 | +//MCU | ||
| 76 | +MessageTypes.CHANGE_MCU_IP ="change_mcu_ip";//切换mcu 重新选点 | ||
| 77 | + | ||
| 78 | + | ||
| 74 | //录制回放 | 79 | //录制回放 |
| 75 | MessageTypes.RECORD_PLAYBACK_UPDATE ="record_playback_update";//录制回放更新信息 | 80 | MessageTypes.RECORD_PLAYBACK_UPDATE ="record_playback_update";//录制回放更新信息 |
| 76 | 81 | ||
| @@ -127,6 +132,7 @@ MessageTypes.ERR_NETWORK=10000;//网络错误 | @@ -127,6 +132,7 @@ MessageTypes.ERR_NETWORK=10000;//网络错误 | ||
| 127 | MessageTypes.ERR_UNKNOWN=10001;//未知错误 | 132 | MessageTypes.ERR_UNKNOWN=10001;//未知错误 |
| 128 | 133 | ||
| 129 | MessageTypes.ERR_SOCKET_DISCONNECT=20000;//MCU断开连接,已经离开课堂 | 134 | MessageTypes.ERR_SOCKET_DISCONNECT=20000;//MCU断开连接,已经离开课堂 |
| 135 | +MessageTypes.ERR_SOCKET_RECONNECT_FAILED=20001;//MCU自动重连失败,已经达到最大重连次数 | ||
| 130 | 136 | ||
| 131 | //---------------错误消息 Error Reson 定义------------------------------------------------- | 137 | //---------------错误消息 Error Reson 定义------------------------------------------------- |
| 132 | MessageTypes.ErrorReson={}; | 138 | MessageTypes.ErrorReson={}; |
| @@ -178,8 +184,7 @@ MessageTypes.ErrorReson[MessageTypes.ERR_NETWORK]="网络错误"; | @@ -178,8 +184,7 @@ MessageTypes.ErrorReson[MessageTypes.ERR_NETWORK]="网络错误"; | ||
| 178 | MessageTypes.ErrorReson[MessageTypes.ERR_UNKNOWN]="未知错误"; | 184 | MessageTypes.ErrorReson[MessageTypes.ERR_UNKNOWN]="未知错误"; |
| 179 | 185 | ||
| 180 | MessageTypes.ErrorReson[MessageTypes.ERR_SOCKET_DISCONNECT]="MCU断开连接,已经离开课堂"; | 186 | MessageTypes.ErrorReson[MessageTypes.ERR_SOCKET_DISCONNECT]="MCU断开连接,已经离开课堂"; |
| 181 | - | ||
| 182 | - | 187 | +MessageTypes.ErrorReson[MessageTypes.ERR_SOCKET_RECONNECT_FAILED]="MCU自动重连失败,已经达到最大重连次数"; |
| 183 | 188 | ||
| 184 | export default MessageTypes; | 189 | export default MessageTypes; |
| 185 | 190 |
| @@ -24,6 +24,7 @@ class MCU extends Emiter { | @@ -24,6 +24,7 @@ class MCU extends Emiter { | ||
| 24 | this._everSocket.on(everSocket.OPEN, this._everSocketOpenHandler.bind(this)); | 24 | this._everSocket.on(everSocket.OPEN, this._everSocketOpenHandler.bind(this)); |
| 25 | this._everSocket.on(everSocket.MESSAGE, this._everSocketMsgReceivedHandler.bind(this)); | 25 | this._everSocket.on(everSocket.MESSAGE, this._everSocketMsgReceivedHandler.bind(this)); |
| 26 | this._everSocket.on(everSocket.CLOSED, this._everSocketCloseHandler.bind(this)); | 26 | this._everSocket.on(everSocket.CLOSED, this._everSocketCloseHandler.bind(this)); |
| 27 | + this._everSocket.on(everSocket.ERROR,this._everSocketErrorHandler.bind(this)); | ||
| 27 | } | 28 | } |
| 28 | 29 | ||
| 29 | // 注册Ape | 30 | // 注册Ape |
| @@ -41,7 +42,14 @@ class MCU extends Emiter { | @@ -41,7 +42,14 @@ class MCU extends Emiter { | ||
| 41 | GlobalConfig.setCurrentStatus(GlobalConfig.statusCode_3); | 42 | GlobalConfig.setCurrentStatus(GlobalConfig.statusCode_3); |
| 42 | this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_SOCKET_DISCONNECT); | 43 | this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_SOCKET_DISCONNECT); |
| 43 | } | 44 | } |
| 44 | - | 45 | + //EverSocket错误异常 |
| 46 | + _everSocketErrorHandler(_errorCode){ | ||
| 47 | + this._emit(MessageTypes.MCU_ERROR,_errorCode); | ||
| 48 | + //如果自动重连次数已经达到最大值,重新选点 | ||
| 49 | + if(_errorCode==everSocket.ERR_SOCKET_RECONNECT_FAILED){ | ||
| 50 | + this._emit(MessageTypes.CHANGE_MCU_IP); | ||
| 51 | + } | ||
| 52 | + } | ||
| 45 | 53 | ||
| 46 | //MCU-发送加入课堂请求 | 54 | //MCU-发送加入课堂请求 |
| 47 | _sendJoinClassRequest() { | 55 | _sendJoinClassRequest() { |
-
请 注册 或 登录 后发表评论