正在显示
7 个修改的文件
包含
454 行增加
和
406 行删除
@@ -63,7 +63,7 @@ export default class MessageEntrance extends Emiter { | @@ -63,7 +63,7 @@ export default class MessageEntrance extends Emiter { | ||
63 | super(); | 63 | super(); |
64 | this.lastClassActiveTime=0;//最后一次课堂激活的时间戳 | 64 | this.lastClassActiveTime=0;//最后一次课堂激活的时间戳 |
65 | //sdk 信息 | 65 | //sdk 信息 |
66 | - GlobalConfig.sdkVersion = "v2.31.1.20171120"; | 66 | + GlobalConfig.sdkVersion = "v2.31.10.20171122"; |
67 | loger.warn("sdkVersion:" + GlobalConfig.sdkVersion); | 67 | loger.warn("sdkVersion:" + GlobalConfig.sdkVersion); |
68 | console.log("sdkVersion:" + GlobalConfig.sdkVersion); | 68 | console.log("sdkVersion:" + GlobalConfig.sdkVersion); |
69 | //设置 | 69 | //设置 |
@@ -644,7 +644,7 @@ export default class MessageEntrance extends Emiter { | @@ -644,7 +644,7 @@ export default class MessageEntrance extends Emiter { | ||
644 | 644 | ||
645 | 645 | ||
646 | //如果没有名字的时候需要随机生成 | 646 | //如果没有名字的时候需要随机生成 |
647 | - let randUserId =parseInt(Math.random()*1000)+""+parseInt(Math.random()*1000)+""+parseInt(Math.random()*1000); | 647 | + let randUserId =parseInt(Math.random()*1000)+"_"+parseInt(Math.random()*1000)+"_"+parseInt(Math.random()*1000); |
648 | if (GlobalConfig.userRole == ApeConsts.host) { | 648 | if (GlobalConfig.userRole == ApeConsts.host) { |
649 | randUserId = "T" + randUserId; | 649 | randUserId = "T" + randUserId; |
650 | } else if (GlobalConfig.userRole == ApeConsts.assistant) { | 650 | } else if (GlobalConfig.userRole == ApeConsts.assistant) { |
@@ -1051,6 +1051,13 @@ export default class MessageEntrance extends Emiter { | @@ -1051,6 +1051,13 @@ export default class MessageEntrance extends Emiter { | ||
1051 | 1051 | ||
1052 | //开始MCU选点操作 | 1052 | //开始MCU选点操作 |
1053 | _getFastestMcuServer(_callback) { | 1053 | _getFastestMcuServer(_callback) { |
1054 | + //不再做MCU http测速 | ||
1055 | + if (_callback) { | ||
1056 | + _callback(null); | ||
1057 | + } | ||
1058 | + return; | ||
1059 | + | ||
1060 | + //正常的测试流程 | ||
1054 | if (_ipManager) { | 1061 | if (_ipManager) { |
1055 | _ipManager.getFastestMcuServer(GlobalConfig.mcuListFinal, _callback); | 1062 | _ipManager.getFastestMcuServer(GlobalConfig.mcuListFinal, _callback); |
1056 | } else { | 1063 | } else { |
@@ -1184,7 +1191,7 @@ export default class MessageEntrance extends Emiter { | @@ -1184,7 +1191,7 @@ export default class MessageEntrance extends Emiter { | ||
1184 | 1191 | ||
1185 | //判断是否需要获取加入音视频通话频道的channelKey | 1192 | //判断是否需要获取加入音视频通话频道的channelKey |
1186 | if (GlobalConfig.appCertificate) { | 1193 | if (GlobalConfig.appCertificate) { |
1187 | - loger.log("加入视频通话模块->需要先获取channelKey") | 1194 | + //loger.log("加入视频通话模块->需要先获取channelKey") |
1188 | //获取channelKey | 1195 | //获取channelKey |
1189 | _sass.getChannelKeyToken((_data)=> { | 1196 | _sass.getChannelKeyToken((_data)=> { |
1190 | //{"code":200,"channelKey":"005AQAoAEQzQUQxNzFDOEQwOEU3OTVGMjlCMzZDRUZENTNGOTU0RDY4N0ZGMUEQANylukzO70ocgrNX9hlkNNWvpLBZ9buDAy/fuVkAAA==","uid":"751373669"} | 1197 | //{"code":200,"channelKey":"005AQAoAEQzQUQxNzFDOEQwOEU3OTVGMjlCMzZDRUZENTNGOTU0RDY4N0ZGMUEQANylukzO70ocgrNX9hlkNNWvpLBZ9buDAy/fuVkAAA==","uid":"751373669"} |
@@ -1194,7 +1201,7 @@ export default class MessageEntrance extends Emiter { | @@ -1194,7 +1201,7 @@ export default class MessageEntrance extends Emiter { | ||
1194 | this._joinClassSuccessSeting(); | 1201 | this._joinClassSuccessSeting(); |
1195 | }) | 1202 | }) |
1196 | } else { | 1203 | } else { |
1197 | - loger.log("加入视频通话模块->不需要获取channelKey") | 1204 | + //loger.log("加入视频通话模块->不需要获取channelKey") |
1198 | this._joinClassSuccessSeting(); | 1205 | this._joinClassSuccessSeting(); |
1199 | } | 1206 | } |
1200 | } | 1207 | } |
@@ -1283,7 +1290,7 @@ export default class MessageEntrance extends Emiter { | @@ -1283,7 +1290,7 @@ export default class MessageEntrance extends Emiter { | ||
1283 | this._emit(MessageTypes.CLASS_JOIN_SUCCESS, joinClassSuccessCallBackData); | 1290 | this._emit(MessageTypes.CLASS_JOIN_SUCCESS, joinClassSuccessCallBackData); |
1284 | 1291 | ||
1285 | //主讲人和老师可以设置旁录 | 1292 | //主讲人和老师可以设置旁录 |
1286 | - if (GlobalConfig.appId && !GlobalConfig.openFlash) { | 1293 | + if (GlobalConfig.appId && !GlobalConfig.openFlash&&GlobalConfig.deviceType!=GlobalConfig.deviceH5) { |
1287 | //加入之前先设置旁录地址,老师和主讲人开启旁路 | 1294 | //加入之前先设置旁录地址,老师和主讲人开启旁路 |
1288 | if (_webRtc && GlobalConfig.isTeachOrAssistant) { | 1295 | if (_webRtc && GlobalConfig.isTeachOrAssistant) { |
1289 | let curTimestamp = new Date().getTime(); | 1296 | let curTimestamp = new Date().getTime(); |
@@ -2568,7 +2575,7 @@ export default class MessageEntrance extends Emiter { | @@ -2568,7 +2575,7 @@ export default class MessageEntrance extends Emiter { | ||
2568 | docJoinChannelSuccess() { | 2575 | docJoinChannelSuccess() { |
2569 | let interval=new Date().getTime()-parseInt(this.lastClassActiveTime); | 2576 | let interval=new Date().getTime()-parseInt(this.lastClassActiveTime); |
2570 | interval=interval/1000; | 2577 | interval=interval/1000; |
2571 | - loger.log("最后一次记录的时间->"+this.lastClassActiveTime,"当前时间:"+new Date().getTime(),"间隔:"+interval+"秒"); | 2578 | + //loger.log("最后一次记录的时间->"+this.lastClassActiveTime,"当前时间:"+new Date().getTime(),"间隔:"+interval+"秒"); |
2572 | loger.log("文档加入频道成功->isHost=", GlobalConfig.isHost, "当前总人数:", GlobalConfig.rosterNumber, "sassDoclength=", GlobalConfig.docListPrepare.length); | 2579 | loger.log("文档加入频道成功->isHost=", GlobalConfig.isHost, "当前总人数:", GlobalConfig.rosterNumber, "sassDoclength=", GlobalConfig.docListPrepare.length); |
2573 | 2580 | ||
2574 | 2581 |
@@ -83,12 +83,7 @@ class EverSocket extends Emiter { | @@ -83,12 +83,7 @@ class EverSocket extends Emiter { | ||
83 | loger.warn('发送到MCU的数据文件超过10k-->byteLength->'+len,"type:"+type); | 83 | loger.warn('发送到MCU的数据文件超过10k-->byteLength->'+len,"type:"+type); |
84 | return; | 84 | return; |
85 | } | 85 | } |
86 | - | ||
87 | - this.sendToMcuList.push("c2s_"+EngineUtils.creatTimestampStr()+"_"+len+"_"+type); | ||
88 | - if(this.sendToMcuList.length>80){ | ||
89 | - loger.log("发送到MCU数据统计->",this.sendToMcuList); | ||
90 | - this.sendToMcuList=[]; | ||
91 | - } | 86 | + this.send2mcu(len,type); |
92 | } | 87 | } |
93 | this.websocket.send(data); | 88 | this.websocket.send(data); |
94 | } else { | 89 | } else { |
@@ -96,6 +91,32 @@ class EverSocket extends Emiter { | @@ -96,6 +91,32 @@ class EverSocket extends Emiter { | ||
96 | } | 91 | } |
97 | } | 92 | } |
98 | 93 | ||
94 | + //统计发送到MCU的数据 | ||
95 | + /* | ||
96 | + * len 长度 | ||
97 | + * type 类型 | ||
98 | + * */ | ||
99 | + send2mcu(len,type){ | ||
100 | + this.sendToMcuList.push(""+len+":"+type); | ||
101 | + if(this.sendToMcuList.length>=50){ | ||
102 | + loger.log("发送到MCU数据统计->",this.sendToMcuList); | ||
103 | + this.sendToMcuList=[]; | ||
104 | + } | ||
105 | + } | ||
106 | + | ||
107 | + //统计收到MCU的数据 | ||
108 | + /* | ||
109 | + * len 长度 | ||
110 | + * type 类型 | ||
111 | + * */ | ||
112 | + mcu2client(len,type){ | ||
113 | + this.receiveFromMcuList.push(""+len+":"+type); | ||
114 | + if(this.receiveFromMcuList.length>50){ | ||
115 | + loger.log("收到MCU数据统计->",this.receiveFromMcuList); | ||
116 | + this.receiveFromMcuList=[]; | ||
117 | + } | ||
118 | + } | ||
119 | + | ||
99 | _setConnected(isConn = true) { | 120 | _setConnected(isConn = true) { |
100 | this._connected = isConn; | 121 | this._connected = isConn; |
101 | if (this._connected) { | 122 | if (this._connected) { |
@@ -218,18 +239,17 @@ class EverSocket extends Emiter { | @@ -218,18 +239,17 @@ class EverSocket extends Emiter { | ||
218 | const bufferData = messageEvent.data; | 239 | const bufferData = messageEvent.data; |
219 | //loger.log('RECEIVE-->byteLength->',bufferData.byteLength); | 240 | //loger.log('RECEIVE-->byteLength->',bufferData.byteLength); |
220 | let len=bufferData.byteLength; | 241 | let len=bufferData.byteLength; |
221 | - this.receiveFromMcuList.push("s2c_"+EngineUtils.creatTimestampStr()+"_"+len); | ||
222 | - if(this.receiveFromMcuList.length>80){ | ||
223 | - loger.log("收到MCU数据统计->",this.receiveFromMcuList); | ||
224 | - this.receiveFromMcuList=[]; | ||
225 | - } | ||
226 | if (len> 0) { | 242 | if (len> 0) { |
227 | this._emit(EverSocket.MESSAGE, bufferData); | 243 | this._emit(EverSocket.MESSAGE, bufferData); |
244 | + this.mcu2client(len,"消息"); | ||
245 | + }else { | ||
246 | + this.mcu2client(0,"回应"); | ||
228 | } | 247 | } |
229 | } | 248 | } |
230 | 249 | ||
231 | _sendPingHandler() { | 250 | _sendPingHandler() { |
232 | if (this._connected) { | 251 | if (this._connected) { |
252 | + this.send2mcu(0,"心跳"); | ||
233 | this.websocket.send(new ArrayBuffer); | 253 | this.websocket.send(new ArrayBuffer); |
234 | } else { | 254 | } else { |
235 | this._reConnection(); | 255 | this._reConnection(); |
@@ -1240,7 +1240,10 @@ class RecordPlayBackParse extends Emiter { | @@ -1240,7 +1240,10 @@ class RecordPlayBackParse extends Emiter { | ||
1240 | } | 1240 | } |
1241 | 1241 | ||
1242 | } | 1242 | } |
1243 | - this.videoPublishMessages.push(videoChannelInfo); | 1243 | + //****1310721是屏幕共享和外部流 不需要匹配***** |
1244 | + if(parseInt(videoChannelInfo.channelId)<1310721){ | ||
1245 | + this.videoPublishMessages.push(videoChannelInfo); | ||
1246 | + } | ||
1244 | } | 1247 | } |
1245 | this.mediaChannleList[videoChannelInfo.channelId][timestamp] = { | 1248 | this.mediaChannleList[videoChannelInfo.channelId][timestamp] = { |
1246 | parseData: videoChannelInfo, | 1249 | parseData: videoChannelInfo, |
@@ -28,393 +28,385 @@ import RecordPlayBackParse from 'RecordPlayBackParse'; | @@ -28,393 +28,385 @@ import RecordPlayBackParse from 'RecordPlayBackParse'; | ||
28 | const loger = Loger.getLoger('Ape'); | 28 | const loger = Loger.getLoger('Ape'); |
29 | 29 | ||
30 | export default class Ape extends Emiter { | 30 | export default class Ape extends Emiter { |
31 | - constructor(session_id, | ||
32 | - session_name, | ||
33 | - session_tag) { | ||
34 | - super(); | ||
35 | - this._session_id = session_id; | ||
36 | - this._channel_id = session_id; // session_id === channel_id | ||
37 | - this._session_name = session_name; | ||
38 | - this._session_tag = session_tag; | ||
39 | - this._session_channels = {}; | ||
40 | - this._adapter_pdu = new pdu['RCAdapterPdu']; | ||
41 | - this._classInfo = null; | ||
42 | - this._rCArrayBufferUtil = ArrayBufferUtil; | ||
43 | - this._apeDelayed = true; | ||
44 | - this._apeDelayedMsgs = []; | ||
45 | - this._apeDelayedTimer = 0; | ||
46 | - | ||
47 | - //Ape 通用消息处理 | ||
48 | - this.on(pdu.RCPDU_SESSION_JOIN_RESPONSE, this._joinSessionHandler.bind(this)); | ||
49 | - this.on(pdu.RCPDU_CHANNEL_JOIN_RESPONSE, this._joinChannelHandler.bind(this)); | ||
50 | - this.on(pdu.RCPDU_REG_ADAPTER, this._pduMessageHandler.bind(this)); | ||
51 | - | ||
52 | - //先收到onJoinSessionHandlerSuccess 后收到 onJoinChannelHandlerSuccess | ||
53 | - | ||
54 | - // 监听底层MCU课堂 | ||
55 | - this.mcu = McuObj; | ||
56 | - this.mcu.on(MessageTypes.CLASS_JOIN_MCU_SUCCESS, this._mcuConferenceJoinSuccessHandler.bind(this)); | ||
57 | - this.mcu.registerApe(this); | ||
58 | - | ||
59 | - //录制回放 | ||
60 | - this.recordPlayBackParse = RecordPlayBackParse; | ||
61 | - this.recordPlayBackParse.on(RecordPlayBackParse.CLASS_JOIN_RECORD_PLAYBACK_SUCCESS, this._joinRecordPlaybackSuccessHandler.bind(this)); | ||
62 | - this.recordPlayBackParse.registerApe(this); | 31 | + constructor(session_id, |
32 | + session_name, | ||
33 | + session_tag) { | ||
34 | + super(); | ||
35 | + this._session_id = session_id; | ||
36 | + this._channel_id = session_id; // session_id === channel_id | ||
37 | + this._session_name = session_name; | ||
38 | + this._session_tag = session_tag; | ||
39 | + this._session_channels = {}; | ||
40 | + this._adapter_pdu = new pdu['RCAdapterPdu']; | ||
41 | + this._classInfo = null; | ||
42 | + this._rCArrayBufferUtil = ArrayBufferUtil; | ||
43 | + this._apeDelayed = true; | ||
44 | + this._apeDelayedMsgs = []; | ||
45 | + this._apeDelayedTimer = 0; | ||
46 | + | ||
47 | + //Ape 通用消息处理 | ||
48 | + this.on(pdu.RCPDU_SESSION_JOIN_RESPONSE, this._joinSessionHandler.bind(this)); | ||
49 | + this.on(pdu.RCPDU_CHANNEL_JOIN_RESPONSE, this._joinChannelHandler.bind(this)); | ||
50 | + this.on(pdu.RCPDU_REG_ADAPTER, this._pduMessageHandler.bind(this)); | ||
51 | + | ||
52 | + //先收到onJoinSessionHandlerSuccess 后收到 onJoinChannelHandlerSuccess | ||
53 | + | ||
54 | + // 监听底层MCU课堂 | ||
55 | + this.mcu = McuObj; | ||
56 | + this.mcu.on(MessageTypes.CLASS_JOIN_MCU_SUCCESS, this._mcuConferenceJoinSuccessHandler.bind(this)); | ||
57 | + this.mcu.registerApe(this); | ||
58 | + | ||
59 | + //录制回放 | ||
60 | + this.recordPlayBackParse = RecordPlayBackParse; | ||
61 | + this.recordPlayBackParse.on(RecordPlayBackParse.CLASS_JOIN_RECORD_PLAYBACK_SUCCESS, this._joinRecordPlaybackSuccessHandler.bind(this)); | ||
62 | + this.recordPlayBackParse.registerApe(this); | ||
63 | + | ||
64 | + } | ||
65 | + | ||
66 | + regResponsePduHandler() { | ||
67 | + | ||
68 | + } | ||
69 | + | ||
70 | + //停止APE一切操作 | ||
71 | + stopApe() { | ||
72 | + // loger.log("stopApe=============================="); | ||
73 | + } | ||
74 | + | ||
75 | + // 消息处理 | ||
76 | + _pduMessageHandler(regBuffer, _seekTime) { | ||
77 | + let seekTime = _seekTime || 0;//这个只有在录制回放的时候才有 | ||
78 | + this._pduRegAdapterHandler(regBuffer, seekTime); | ||
79 | + } | ||
80 | + | ||
81 | + // 数据同步处理 | ||
82 | + _pduRegAdapterHandler(regBuffer, seekTime) { | ||
83 | + let regPdu = pdu['RCAdapterPdu'].decode(regBuffer); | ||
84 | + let regItems = regPdu.item; | ||
85 | + let regItemSize = regItems.length; | ||
86 | + //console.log("RCAdapterPdu数据同步处理",regPdu); | ||
87 | + //loger.log(this._session_name + '数据同步消息'); | ||
88 | + //loger.log(this._session_name + '数据同步消息.同步条数', regItemSize,"seekTime->",seekTime); | ||
89 | + for (var i = 0; i < regItemSize; ++i) { | ||
90 | + let regItem = regItems[i]; | ||
91 | + let regItemType = regItem.type; | ||
92 | + let regItemData = regItem.itemData; | ||
93 | + | ||
94 | + //根据数据包中的type处理数据是否同步 | ||
95 | + if (pdu.RCPDU_REG_UPDATE_OBJ !== regItemType) { | ||
96 | + if (pdu.RCPDU_REG_RESPONSE_OBJ == regItemType) { | ||
97 | + let regResponsePdu = pdu['RCRegistryResponseObjPdu'].decode(regItemData); | ||
98 | + this.regResponsePduHandler(regResponsePdu); | ||
99 | + } | ||
100 | + // 只处理两种类型 | ||
101 | + continue; | ||
102 | + } | ||
63 | 103 | ||
104 | + //具体的数据包 | ||
105 | + let regUpdatedItem = pdu['RCRegistryUpdateObjPdu'].decode(regItemData); | ||
106 | + let sub_type = regUpdatedItem.subType; | ||
107 | + let object_id = regUpdatedItem.objId; | ||
108 | + let user_data = regUpdatedItem.userData; | ||
109 | + | ||
110 | + //loger.log('REG OBJECT EVENT ->', pdu.id2type(sub_type)); | ||
111 | + switch (sub_type) { | ||
112 | + case pdu.RCPDU_REG_ROSTER_INSERT_PDU: | ||
113 | + //let rosterInsertData = pdu['RCRegstryRosterInsertItemPdu'].decode(user_data); | ||
114 | + //loger.log('RCPDU_REG_ROSTER_INSERT_PDU---->'); | ||
115 | + try{ | ||
116 | + let rosterInsertData = pdu['RCRegistryRosterInsertItemPdu'].decode(user_data); | ||
117 | + let rosterInsertItems = rosterInsertData.items; | ||
118 | + let rosterInsertItemsLen = rosterInsertItems.length; | ||
119 | + for (let i = 0; i < rosterInsertItemsLen; ++i) { | ||
120 | + let record = rosterInsertItems[i]; | ||
121 | + let recordId = record.item_id; | ||
122 | + let recordData = pdu['RCNodeInfoRecordPdu'].decode(record.item_data); | ||
123 | + this.rosterInsertHandler(recordId, recordData); | ||
124 | + } | ||
125 | + }catch (err){ | ||
126 | + console.log("RCPDU_REG_ROSTER_INSERT_PDU err",err) | ||
127 | + } | ||
128 | + break; | ||
129 | + case pdu.RCPDU_REG_ROSTER_DELETE_PDU: | ||
130 | + let rosterDelData = pdu['RCRegistryRosterDeleteItemPdu'].decode(user_data); | ||
131 | + this.rosterDelHandler(rosterDelData.nodeId); | ||
132 | + break; | ||
133 | + case pdu.RCPDU_REG_ROSTER_UPDATE_PDU: | ||
134 | + let rosterUpdateData = pdu['RCRegistryRosterUpdateItemPdu'].decode(user_data); | ||
135 | + let rosterUpdateItems = rosterUpdateData.items; | ||
136 | + let rosterUpdateItemsLen = rosterUpdateItems.length; | ||
137 | + for (let i = 0; i < rosterUpdateItemsLen; ++i) { | ||
138 | + let node = rosterUpdateItems[i]; | ||
139 | + let nodeId = node.nodeId; | ||
140 | + let nodeData = pdu['RCNodeInfoRecordPdu'].decode(node.nodeData); | ||
141 | + this.rosterUpdateHandler(nodeId, nodeData); | ||
142 | + } | ||
143 | + break; | ||
144 | + case pdu.RCPDU_REG_TABLE_INSERT_PDU: | ||
145 | + let tableInsertData = pdu['RCRegistryTableInsertItemPdu'].decode(user_data); | ||
146 | + let tableInsertItems = tableInsertData.items; | ||
147 | + let tableInsertItemsLen = tableInsertItems.length; | ||
148 | + for (let i = 0; i < tableInsertItemsLen; ++i) { | ||
149 | + let insertItem = tableInsertItems[i]; | ||
150 | + //loger.log("insertItem",insertItem); | ||
151 | + this.tableInsertHandler(insertItem.owner, insertItem.itemIdx, insertItem.itemData); | ||
152 | + } | ||
153 | + | ||
154 | + //文档数据数组内部自己处理数组 | ||
155 | + this.tableInsertApeHandler(tableInsertItems, seekTime); | ||
156 | + break; | ||
157 | + case pdu.RCPDU_REG_TABLE_DELETE_PDU: | ||
158 | + let tableDeleteData = pdu['RCRegistryTableDeleteItemPdu'].decode(user_data); | ||
159 | + //console.log("tableDeleteData",object_id,tableDeleteData); | ||
160 | + this.tableDeleteHandler(object_id, tableDeleteData); | ||
161 | + break; | ||
162 | + case pdu.RCPDU_REG_TABLE_UPDATE_PDU: | ||
163 | + let tableUpdateData = pdu['RCRegistryTableUpdateItemPdu'].decode(user_data); | ||
164 | + let tableUpdateItems = tableUpdateData.items; | ||
165 | + let tableUpdateItemsLen = tableUpdateItems.length; | ||
166 | + //loger.log("RCRegistryTableUpdateItemPdu " + tableUpdateItemsLen); | ||
167 | + //loger.log(tableUpdateData); | ||
168 | + | ||
169 | + | ||
170 | + for (let i = 0; i < tableUpdateItemsLen; ++i) { | ||
171 | + let tableItem = tableUpdateItems[i]; | ||
172 | + this.tableUpdateHandler(tableItem.owner, tableItem.itemIdx, tableItem.itemData, seekTime); | ||
173 | + } | ||
174 | + | ||
175 | + //白板,文档数据数组内部自己处理数组 | ||
176 | + this.tableUpdateApeHandler(tableUpdateItems, seekTime); | ||
177 | + break; | ||
178 | + case pdu.RCPDU_REG_QUEUE_UPDATE_PDU: | ||
179 | + case pdu.RCPDU_REG_QUEUE_DELETE_PDU: | ||
180 | + case pdu.RCPDU_REG_QUEUE_INSERT_PDU: | ||
181 | + loger.warn('REG QUEUE ARE IGNORED'); | ||
182 | + break; | ||
183 | + | ||
184 | + } | ||
64 | } | 185 | } |
186 | + } | ||
65 | 187 | ||
66 | - regResponsePduHandler() { | 188 | + rosterInsertHandler(recordId, recordData) { |
189 | + // loger.warn(this._session_name + ' rosterInsertHandler 应有子类具体覆盖处理.'); | ||
190 | + } | ||
67 | 191 | ||
68 | - } | 192 | + rosterUpdateHandler(nodeId, nodeData) { |
193 | + //loger.warn(this._session_name + ' rosterUpdateHandler 应有子类具体覆盖处理.'); | ||
194 | + } | ||
69 | 195 | ||
70 | - //停止APE一切操作 | ||
71 | - stopApe() { | ||
72 | - // loger.log("stopApe=============================="); | ||
73 | - } | 196 | + rosterDelHandler(recordData) { |
197 | + //loger.warn(this._session_name + ' rosterDelHandler 应有子类具体覆盖处理.'); | ||
198 | + } | ||
74 | 199 | ||
75 | - // 消息处理 | ||
76 | - _pduMessageHandler(regBuffer,_seekTime) { | ||
77 | - let seekTime=_seekTime||0;//这个只有在录制回放的时候才有 | ||
78 | - /* loger.warn('APE->收到消息处理->',GlobalConfig.mcuDelay,GlobalConfig.messageDelay); | ||
79 | - //延迟处理消息(3个条件--->ape允许延迟&&客户端设置需要延迟&&Sass设置的延迟时间大于0) | ||
80 | - if (this._apeDelayed&&GlobalConfig.messageDelay&&GlobalConfig.mcuDelay>0) { | ||
81 | - loger.warn('延迟处理消息->',GlobalConfig.mcuDelay); | ||
82 | - setTimeout(() => { | ||
83 | - this._pduRegAdapterHandler(regBuffer,seekTime); | ||
84 | - }, GlobalConfig.mcuDelay*1000);//mcuDelay单位是秒,这里需要换算为毫秒 | ||
85 | - return; | ||
86 | - } | ||
87 | -*/ | ||
88 | - //不延迟,立即处理 | ||
89 | - this._pduRegAdapterHandler(regBuffer,seekTime); | ||
90 | - } | 200 | + tableInsertHandler(tableId, record) { |
201 | + //loger.warn(this._session_name + ' tableInsertHandler 应有子类具体覆盖处理.'); | ||
202 | + } | ||
91 | 203 | ||
92 | - // 数据同步处理 | ||
93 | - _pduRegAdapterHandler(regBuffer,seekTime) { | ||
94 | - let regPdu = pdu['RCAdapterPdu'].decode(regBuffer); | ||
95 | - let regItems = regPdu.item; | ||
96 | - let regItemSize = regItems.length; | ||
97 | - //console.log("RCAdapterPdu数据同步处理",regPdu); | ||
98 | - //loger.log(this._session_name + '数据同步消息'); | ||
99 | - //loger.log(this._session_name + '数据同步消息.同步条数', regItemSize,"seekTime->",seekTime); | ||
100 | - for (var i = 0; i < regItemSize; ++i) { | ||
101 | - let regItem = regItems[i]; | ||
102 | - let regItemType = regItem.type; | ||
103 | - let regItemData = regItem.itemData; | ||
104 | - | ||
105 | - //根据数据包中的type处理数据是否同步 | ||
106 | - | ||
107 | - if (pdu.RCPDU_REG_UPDATE_OBJ !== regItemType) { | ||
108 | - if (pdu.RCPDU_REG_RESPONSE_OBJ == regItemType) { | ||
109 | - let regResponsePdu = pdu['RCRegistryResponseObjPdu'].decode(regItemData); | ||
110 | - this.regResponsePduHandler(regResponsePdu); | ||
111 | - } | ||
112 | - // 只处理两种类型 | ||
113 | - continue; | ||
114 | - } | 204 | + tableUpdateHandler(ownerId, recordId, recordData, seekTime) { |
205 | + //loger.warn(this._session_name + ' tableUpdateHandler 应有子类具体覆盖处理.'); | ||
206 | + } | ||
115 | 207 | ||
116 | - //具体的数据包 | ||
117 | - let regUpdatedItem = pdu['RCRegistryUpdateObjPdu'].decode(regItemData); | ||
118 | - let sub_type = regUpdatedItem.subType; | ||
119 | - let object_id = regUpdatedItem.objId; | ||
120 | - let user_data = regUpdatedItem.userData; | ||
121 | - | ||
122 | - //loger.log('REG OBJECT EVENT ->', pdu.id2type(sub_type)); | ||
123 | - switch (sub_type) { | ||
124 | - case pdu.RCPDU_REG_ROSTER_INSERT_PDU: | ||
125 | - //let rosterInsertData = pdu['RCRegstryRosterInsertItemPdu'].decode(user_data); | ||
126 | - //loger.log('RCPDU_REG_ROSTER_INSERT_PDU---->'); | ||
127 | - console.log(user_data); | ||
128 | - let rosterInsertData = pdu['RCRegistryRosterInsertItemPdu'].decode(user_data); | ||
129 | - let rosterInsertItems = rosterInsertData.items; | ||
130 | - let rosterInsertItemsLen = rosterInsertItems.length; | ||
131 | - for (let i = 0; i < rosterInsertItemsLen; ++i) { | ||
132 | - let record = rosterInsertItems[i]; | ||
133 | - let recordId = record.item_id; | ||
134 | - let recordData = pdu['RCNodeInfoRecordPdu'].decode(record.item_data); | ||
135 | - this.rosterInsertHandler(recordId, recordData); | ||
136 | - } | ||
137 | - break; | ||
138 | - case pdu.RCPDU_REG_ROSTER_DELETE_PDU: | ||
139 | - let rosterDelData = pdu['RCRegistryRosterDeleteItemPdu'].decode(user_data); | ||
140 | - this.rosterDelHandler(rosterDelData.nodeId); | ||
141 | - break; | ||
142 | - case pdu.RCPDU_REG_ROSTER_UPDATE_PDU: | ||
143 | - let rosterUpdateData = pdu['RCRegistryRosterUpdateItemPdu'].decode(user_data); | ||
144 | - let rosterUpdateItems = rosterUpdateData.items; | ||
145 | - let rosterUpdateItemsLen = rosterUpdateItems.length; | ||
146 | - for (let i = 0; i < rosterUpdateItemsLen; ++i) { | ||
147 | - let node = rosterUpdateItems[i]; | ||
148 | - let nodeId = node.nodeId; | ||
149 | - let nodeData = pdu['RCNodeInfoRecordPdu'].decode(node.nodeData); | ||
150 | - this.rosterUpdateHandler(nodeId, nodeData); | ||
151 | - } | ||
152 | - break; | ||
153 | - case pdu.RCPDU_REG_TABLE_INSERT_PDU: | ||
154 | - let tableInsertData = pdu['RCRegistryTableInsertItemPdu'].decode(user_data); | ||
155 | - let tableInsertItems = tableInsertData.items; | ||
156 | - let tableInsertItemsLen = tableInsertItems.length; | ||
157 | - for (let i = 0; i < tableInsertItemsLen; ++i) { | ||
158 | - let insertItem = tableInsertItems[i]; | ||
159 | - //loger.log("insertItem",insertItem); | ||
160 | - this.tableInsertHandler(insertItem.owner, insertItem.itemIdx, insertItem.itemData); | ||
161 | - } | ||
162 | - | ||
163 | - //文档数据数组内部自己处理数组 | ||
164 | - this.tableInsertApeHandler(tableInsertItems,seekTime); | ||
165 | - break; | ||
166 | - case pdu.RCPDU_REG_TABLE_DELETE_PDU: | ||
167 | - let tableDeleteData = pdu['RCRegistryTableDeleteItemPdu'].decode(user_data); | ||
168 | - //console.log("tableDeleteData",object_id,tableDeleteData); | ||
169 | - this.tableDeleteHandler(object_id, tableDeleteData); | ||
170 | - break; | ||
171 | - case pdu.RCPDU_REG_TABLE_UPDATE_PDU: | ||
172 | - let tableUpdateData = pdu['RCRegistryTableUpdateItemPdu'].decode(user_data); | ||
173 | - let tableUpdateItems = tableUpdateData.items; | ||
174 | - let tableUpdateItemsLen = tableUpdateItems.length; | ||
175 | - //loger.log("RCRegistryTableUpdateItemPdu " + tableUpdateItemsLen); | ||
176 | - //loger.log(tableUpdateData); | ||
177 | - | ||
178 | - | ||
179 | - for (let i = 0; i < tableUpdateItemsLen; ++i) { | ||
180 | - let tableItem = tableUpdateItems[i]; | ||
181 | - this.tableUpdateHandler(tableItem.owner, tableItem.itemIdx, tableItem.itemData,seekTime); | ||
182 | - } | ||
183 | - | ||
184 | - //白板,文档数据数组内部自己处理数组 | ||
185 | - this.tableUpdateApeHandler(tableUpdateItems,seekTime); | ||
186 | - break; | ||
187 | - case pdu.RCPDU_REG_QUEUE_UPDATE_PDU: | ||
188 | - case pdu.RCPDU_REG_QUEUE_DELETE_PDU: | ||
189 | - case pdu.RCPDU_REG_QUEUE_INSERT_PDU: | ||
190 | - loger.warn('REG QUEUE ARE IGNORED'); | ||
191 | - break; | 208 | + tableUpdateApeHandler(tableUpdateItems, seekTime) { |
192 | 209 | ||
193 | - } | ||
194 | - } | ||
195 | - } | 210 | + } |
196 | 211 | ||
197 | - rosterInsertHandler(recordId, recordData) { | ||
198 | - // loger.warn(this._session_name + ' rosterInsertHandler 应有子类具体覆盖处理.'); | ||
199 | - } | 212 | + tableInsertApeHandler(tableInsertItems, seekTime) { |
200 | 213 | ||
201 | - rosterUpdateHandler(nodeId, nodeData) { | ||
202 | - //loger.warn(this._session_name + ' rosterUpdateHandler 应有子类具体覆盖处理.'); | ||
203 | - } | 214 | + } |
204 | 215 | ||
205 | - rosterDelHandler(recordData) { | ||
206 | - //loger.warn(this._session_name + ' rosterDelHandler 应有子类具体覆盖处理.'); | ||
207 | - } | 216 | + tableDeleteHandler(tableId, record) { |
217 | + //loger.warn(this._session_name + ' tableDelHandler 应有子类具体覆盖处理.'); | ||
218 | + } | ||
208 | 219 | ||
209 | - tableInsertHandler(tableId, record) { | ||
210 | - //loger.warn(this._session_name + ' tableInsertHandler 应有子类具体覆盖处理.'); | ||
211 | - } | 220 | + onJoinChannelHandlerSuccess() { |
221 | + //loger.warn(this._session_name + ' onJoinChannelHandlerSuccess 应有子类具体覆盖处理.'); | ||
222 | + } | ||
212 | 223 | ||
213 | - tableUpdateHandler(ownerId, recordId, recordData,seekTime) { | ||
214 | - //loger.warn(this._session_name + ' tableUpdateHandler 应有子类具体覆盖处理.'); | ||
215 | - } | ||
216 | - tableUpdateApeHandler(tableUpdateItems,seekTime){ | 224 | + onJoinSessionHandlerSuccess() { |
225 | + //loger.warn(this._session_name + ' onJoinSessionHandlerSuccess 应有子类具体覆盖处理.'); | ||
226 | + } | ||
217 | 227 | ||
218 | - } | ||
219 | - tableInsertApeHandler(tableInsertItems,seekTime){ | 228 | + //录制状态发生改变后ape模块数据更新 |
229 | + updaterRecordApeStatus(_data) { | ||
230 | + loger.warn(this._session_name + 'updaterRecordApeStatus->应有子类具体覆盖处理.'); | ||
231 | + } | ||
220 | 232 | ||
221 | - } | ||
222 | - tableDeleteHandler(tableId, record) { | ||
223 | - //loger.warn(this._session_name + ' tableDelHandler 应有子类具体覆盖处理.'); | ||
224 | - } | 233 | + // 加入Session处理 |
234 | + _joinSessionHandler(data) { | ||
235 | + //loger.log(this._session_name, ' -> 加入Session'); | ||
236 | + this.onJoinSessionHandlerSuccess(); | ||
237 | + } | ||
225 | 238 | ||
226 | - onJoinChannelHandlerSuccess() { | ||
227 | - //loger.warn(this._session_name + ' onJoinChannelHandlerSuccess 应有子类具体覆盖处理.'); | 239 | + // 加入Channel处理 |
240 | + _joinChannelHandler(data) { | ||
241 | + let joinedChannel = pdu['RCChannelJoinResponsePdu'].decode(data); | ||
242 | + if (joinedChannel.result === pdu.RET_SUCCESS) { | ||
243 | + //loger.log(this._session_name, ' -> 加入Channel成功. ChannelId', joinedChannel.requestedChannelId); | ||
244 | + this._session_channels[joinedChannel.requestedChannelId] = ApeConsts.CJS_JOINNED; | ||
245 | + this.onJoinChannelHandlerSuccess(); | ||
246 | + } else { | ||
247 | + loger.warn(this._session_name, ' -> 加入Channel失败.', joinedChannel); | ||
228 | } | 248 | } |
229 | - | ||
230 | - onJoinSessionHandlerSuccess() { | ||
231 | - //loger.warn(this._session_name + ' onJoinSessionHandlerSuccess 应有子类具体覆盖处理.'); | 249 | + } |
250 | + | ||
251 | + // 依赖的课堂创建完毕 - 发起Ape加入 | ||
252 | + _mcuConferenceJoinSuccessHandler(_data) { | ||
253 | + //loger.log('创建Ape->', | ||
254 | + // 'SessionId', | ||
255 | + // this._session_id, | ||
256 | + // 'SessionName', | ||
257 | + // this._session_name, | ||
258 | + // 'SessionTag', | ||
259 | + // this._session_tag); | ||
260 | + | ||
261 | + // 课堂依赖底层课堂信息 | ||
262 | + //this._classInfo = classInfo; | ||
263 | + this._classInfo = GlobalConfig.getClassInfo(); | ||
264 | + | ||
265 | + var joinSessionPdu = new pdu['RCSessionJoinRequestPdu']; | ||
266 | + joinSessionPdu.id = this._session_id; | ||
267 | + joinSessionPdu.name = this._session_name; | ||
268 | + joinSessionPdu.tag = this._session_tag; | ||
269 | + joinSessionPdu.sessionData = this._adapter_pdu.toArrayBuffer(); | ||
270 | + this.sendUniform(joinSessionPdu, true); | ||
271 | + | ||
272 | + var joinChannelPdu = new pdu['RCChannelJoinRequestPdu']; | ||
273 | + joinChannelPdu.initiator = this.mcu.classInfo.nodeId; | ||
274 | + joinChannelPdu.channelId = this._session_id; | ||
275 | + this.send(joinChannelPdu); | ||
276 | + } | ||
277 | + | ||
278 | + // 依赖的录制回放创建完毕 - 发起Ape加入 | ||
279 | + _joinRecordPlaybackSuccessHandler(_data) { | ||
280 | + loger.log('录制回放->Ape已经创建完毕->', | ||
281 | + 'SessionId', | ||
282 | + this._session_id, | ||
283 | + 'SessionName', | ||
284 | + this._session_name, | ||
285 | + 'SessionTag', | ||
286 | + this._session_tag); | ||
287 | + } | ||
288 | + | ||
289 | + // 注册Key对象 | ||
290 | + registerKey(id, name, tag, user_data) { | ||
291 | + let adapterItemPdu = new pdu['RCAdapterItemPdu']; | ||
292 | + adapterItemPdu.type = pdu.RCPDU_REG_REGISTER_KEY; | ||
293 | + | ||
294 | + // pack register key pdus | ||
295 | + let registerKeyPdu = new pdu['RCRegistryRegisterKeyPdu']; | ||
296 | + registerKeyPdu.id = id; | ||
297 | + registerKeyPdu.name = name; | ||
298 | + registerKeyPdu.tag = tag; | ||
299 | + if (user_data.length) { | ||
300 | + registerKeyPdu.userData = user_data; | ||
232 | } | 301 | } |
233 | - //录制状态发生改变后ape模块数据更新 | ||
234 | - updaterRecordApeStatus(_data){ | ||
235 | - loger.warn(this._session_name + 'updaterRecordApeStatus->应有子类具体覆盖处理.'); | 302 | + |
303 | + adapterItemPdu.itemData = registerKeyPdu.toArrayBuffer(); | ||
304 | + this._adapter_pdu.item.push(adapterItemPdu); | ||
305 | + } | ||
306 | + | ||
307 | + // 注册Object对象 等同于flash中的 RCRegistryOperator | ||
308 | + registerObj(type, id, name, tag, owner, user_data) { | ||
309 | + let adapterItemPdu = new pdu['RCAdapterItemPdu']; | ||
310 | + adapterItemPdu.type = pdu.RCPDU_REG_REGISTER_OBJ; | ||
311 | + | ||
312 | + let registerObjPdu = new pdu['RCRegistryRegisterObjPdu']; | ||
313 | + registerObjPdu.type = type; | ||
314 | + registerObjPdu.objId = id; | ||
315 | + registerObjPdu.name = name; | ||
316 | + registerObjPdu.tag = tag; | ||
317 | + if (owner) { | ||
318 | + registerObjPdu.owner = owner; | ||
236 | } | 319 | } |
237 | - // 加入Session处理 | ||
238 | - _joinSessionHandler(data) { | ||
239 | - //loger.log(this._session_name, ' -> 加入Session'); | ||
240 | - this.onJoinSessionHandlerSuccess(); | 320 | + if (user_data.length) { |
321 | + registerObjPdu.userData = user_data; | ||
241 | } | 322 | } |
242 | 323 | ||
243 | - // 加入Channel处理 | ||
244 | - _joinChannelHandler(data) { | ||
245 | - let joinedChannel = pdu['RCChannelJoinResponsePdu'].decode(data); | ||
246 | - if (joinedChannel.result === pdu.RET_SUCCESS) { | ||
247 | - //loger.log(this._session_name, ' -> 加入Channel成功. ChannelId', joinedChannel.requestedChannelId); | ||
248 | - this._session_channels[joinedChannel.requestedChannelId] = ApeConsts.CJS_JOINNED; | ||
249 | - this.onJoinChannelHandlerSuccess(); | ||
250 | - } else { | ||
251 | - loger.warn(this._session_name, ' -> 加入Channel失败.', joinedChannel); | ||
252 | - } | ||
253 | - } | 324 | + adapterItemPdu.itemData = registerObjPdu.toArrayBuffer(); |
325 | + this._adapter_pdu.item.push(adapterItemPdu); | ||
326 | + } | ||
254 | 327 | ||
255 | - // 依赖的课堂创建完毕 - 发起Ape加入 | ||
256 | - _mcuConferenceJoinSuccessHandler(_data) { | ||
257 | - //loger.log('创建Ape->', | ||
258 | - // 'SessionId', | ||
259 | - // this._session_id, | ||
260 | - // 'SessionName', | ||
261 | - // this._session_name, | ||
262 | - // 'SessionTag', | ||
263 | - // this._session_tag); | ||
264 | - | ||
265 | - // 课堂依赖底层课堂信息 | ||
266 | - //this._classInfo = classInfo; | ||
267 | - this._classInfo = GlobalConfig.getClassInfo(); | ||
268 | - | ||
269 | - var joinSessionPdu = new pdu['RCSessionJoinRequestPdu']; | ||
270 | - joinSessionPdu.id = this._session_id; | ||
271 | - joinSessionPdu.name = this._session_name; | ||
272 | - joinSessionPdu.tag = this._session_tag; | ||
273 | - joinSessionPdu.sessionData = this._adapter_pdu.toArrayBuffer(); | ||
274 | - this.sendUniform(joinSessionPdu, true); | ||
275 | - | ||
276 | - var joinChannelPdu = new pdu['RCChannelJoinRequestPdu']; | ||
277 | - joinChannelPdu.initiator = this.mcu.classInfo.nodeId; | ||
278 | - joinChannelPdu.channelId = this._session_id; | ||
279 | - this.send(joinChannelPdu); | 328 | + send(appPdu) { |
329 | + //loger.log('Ape发送数据NORMAL PDU'); | ||
330 | + if (!this.mcu || !this.mcu.connected || GlobalConfig.classExit) { | ||
331 | + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_SEND_FAILED_NO_JOIN); | ||
332 | + return; | ||
280 | } | 333 | } |
281 | - | ||
282 | - // 依赖的录制回放创建完毕 - 发起Ape加入 | ||
283 | - _joinRecordPlaybackSuccessHandler(_data) { | ||
284 | - loger.log('录制回放->Ape已经创建完毕->', | ||
285 | - 'SessionId', | ||
286 | - this._session_id, | ||
287 | - 'SessionName', | ||
288 | - this._session_name, | ||
289 | - 'SessionTag', | ||
290 | - this._session_tag); | 334 | + if (!this._classInfo) { |
335 | + loger.warn('Ape发送数据NORMAL PDU->失败->ape课堂数据无效->', this._classInfo); | ||
336 | + return; | ||
291 | } | 337 | } |
338 | + let normalPdu = pdu.create_normal_pdu( | ||
339 | + appPdu.type, | ||
340 | + this._classInfo.nodeId, | ||
341 | + this._classInfo.classId, | ||
342 | + this._session_id, | ||
343 | + this._channel_id, | ||
344 | + true, | ||
345 | + true, | ||
346 | + PduConsts.DP_TOP, | ||
347 | + this._classInfo.topNodeID, | ||
348 | + PduConsts.SEG_ONCE | ||
349 | + ); | ||
350 | + normalPdu.data = appPdu.toArrayBuffer(); | ||
351 | + // Mcu发送 | ||
352 | + this.mcu.send(normalPdu); | ||
353 | + } | ||
354 | + | ||
355 | + // 发送当前APE(session uniform包) | ||
356 | + sendUniform(appPdu, top) { | ||
357 | + if (!this.mcu || !this.mcu.connected || GlobalConfig.classExit) { | ||
292 | 358 | ||
293 | - // 注册Key对象 | ||
294 | - registerKey(id, name, tag, user_data) { | ||
295 | - let adapterItemPdu = new pdu['RCAdapterItemPdu']; | ||
296 | - adapterItemPdu.type = pdu.RCPDU_REG_REGISTER_KEY; | ||
297 | - | ||
298 | - // pack register key pdus | ||
299 | - let registerKeyPdu = new pdu['RCRegistryRegisterKeyPdu']; | ||
300 | - registerKeyPdu.id = id; | ||
301 | - registerKeyPdu.name = name; | ||
302 | - registerKeyPdu.tag = tag; | ||
303 | - if (user_data.length) { | ||
304 | - registerKeyPdu.userData = user_data; | ||
305 | - } | ||
306 | - | ||
307 | - adapterItemPdu.itemData = registerKeyPdu.toArrayBuffer(); | ||
308 | - this._adapter_pdu.item.push(adapterItemPdu); | ||
309 | } | 359 | } |
310 | - | ||
311 | - // 注册Object对象 等同于flash中的 RCRegistryOperator | ||
312 | - registerObj(type, id, name, tag, owner, user_data) { | ||
313 | - let adapterItemPdu = new pdu['RCAdapterItemPdu']; | ||
314 | - adapterItemPdu.type = pdu.RCPDU_REG_REGISTER_OBJ; | ||
315 | - | ||
316 | - let registerObjPdu = new pdu['RCRegistryRegisterObjPdu']; | ||
317 | - registerObjPdu.type = type; | ||
318 | - registerObjPdu.objId = id; | ||
319 | - registerObjPdu.name = name; | ||
320 | - registerObjPdu.tag = tag; | ||
321 | - if (owner) { | ||
322 | - registerObjPdu.owner = owner; | ||
323 | - } | ||
324 | - if (user_data.length) { | ||
325 | - registerObjPdu.userData = user_data; | ||
326 | - } | ||
327 | - | ||
328 | - adapterItemPdu.itemData = registerObjPdu.toArrayBuffer(); | ||
329 | - this._adapter_pdu.item.push(adapterItemPdu); | 360 | + if (!this._classInfo) { |
361 | + loger.warn('Ape发送数据UNIFORM PDU->失败->ape课堂数据无效->', this._classInfo); | ||
362 | + return; | ||
330 | } | 363 | } |
331 | - | ||
332 | - send(appPdu) { | ||
333 | - //loger.log('Ape发送数据NORMAL PDU'); | ||
334 | - //console.log(appPdu); | ||
335 | - //loger.log('当前的状态============',GlobalConfig.getCurrentStatus().code); | ||
336 | - /* if (GlobalConfig.getCurrentStatus().code == 0 || GlobalConfig.getCurrentStatus().code == 1) { | ||
337 | - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_SEND_FAILED_NO_JOIN); | ||
338 | - return; | ||
339 | - }*/ | ||
340 | - if(!this.mcu||!this.mcu.connected){ | ||
341 | - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_SEND_FAILED_NO_JOIN); | ||
342 | - return; | ||
343 | - } | ||
344 | - if(!this._classInfo){ | ||
345 | - loger.warn('Ape发送数据NORMAL PDU->失败->ape课堂数据无效->', this._classInfo); | ||
346 | - return; | ||
347 | - } | ||
348 | - let normalPdu = pdu.create_normal_pdu( | ||
349 | - appPdu.type, | ||
350 | - this._classInfo.nodeId, | ||
351 | - this._classInfo.classId, | ||
352 | - this._session_id, | ||
353 | - this._channel_id, | ||
354 | - true, | ||
355 | - true, | ||
356 | - PduConsts.DP_TOP, | ||
357 | - this._classInfo.topNodeID, | ||
358 | - PduConsts.SEG_ONCE | ||
359 | - ); | ||
360 | - normalPdu.data = appPdu.toArrayBuffer(); | ||
361 | - // Mcu发送 | ||
362 | - this.mcu.send(normalPdu); | 364 | + let uniformPdu = pdu.create_uniform_pdu( |
365 | + appPdu.type, | ||
366 | + this._classInfo.nodeId, | ||
367 | + this._classInfo.classId, | ||
368 | + this._session_id, | ||
369 | + top ? ApeConsts.BROADCAST_CHANNEL_ID : this._channel_id, | ||
370 | + true, | ||
371 | + PduConsts.DP_TOP, | ||
372 | + top ? this._classInfo.topNodeID : (appPdu.peer || 0), | ||
373 | + PduConsts.SEG_ONCE | ||
374 | + ); | ||
375 | + uniformPdu.data = appPdu.toArrayBuffer(); | ||
376 | + // Mcu发送 | ||
377 | + if (this.mcu) { | ||
378 | + this.mcu.send(uniformPdu); | ||
379 | + } else { | ||
380 | + loger.warn('MCU为空->无法发送消息', uniformPdu); | ||
363 | } | 381 | } |
364 | 382 | ||
365 | - // 发送当前APE(session uniform包) | ||
366 | - sendUniform(appPdu, top) { | ||
367 | - if(!this._classInfo){ | ||
368 | - loger.warn('Ape发送数据UNIFORM PDU->失败->ape课堂数据无效->', this._classInfo); | ||
369 | - return; | ||
370 | - } | ||
371 | - let uniformPdu = pdu.create_uniform_pdu( | ||
372 | - appPdu.type, | ||
373 | - this._classInfo.nodeId, | ||
374 | - this._classInfo.classId, | ||
375 | - this._session_id, | ||
376 | - top ? ApeConsts.BROADCAST_CHANNEL_ID : this._channel_id, | ||
377 | - true, | ||
378 | - PduConsts.DP_TOP, | ||
379 | - top ? this._classInfo.topNodeID : (appPdu.peer || 0), | ||
380 | - PduConsts.SEG_ONCE | ||
381 | - ); | ||
382 | - uniformPdu.data = appPdu.toArrayBuffer(); | ||
383 | - // Mcu发送 | ||
384 | - if(this.mcu){ | ||
385 | - this.mcu.send(uniformPdu); | ||
386 | - }else { | ||
387 | - loger.warn('MCU为空->无法发送消息',uniformPdu); | ||
388 | - } | 383 | + } |
389 | 384 | ||
385 | + sendChatUniform(appPdu, top) { | ||
386 | + //loger.log('当前的状态============',GlobalConfig.getCurrentStatus().code); | ||
387 | + if (!this.mcu || !this.mcu.connected || GlobalConfig.classExit) { | ||
388 | + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_SEND_FAILED_NO_JOIN); | ||
389 | + return; | ||
390 | } | 390 | } |
391 | - | ||
392 | - sendChatUniform(appPdu, top) { | ||
393 | - //console.log(appPdu); | ||
394 | - //loger.log('当前的状态============',GlobalConfig.getCurrentStatus().code); | ||
395 | - if (GlobalConfig.getCurrentStatus().code == 0 || GlobalConfig.getCurrentStatus().code == 1) { | ||
396 | - this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_SEND_FAILED_NO_JOIN); | ||
397 | - return; | ||
398 | - } | ||
399 | - if(!this._classInfo){ | ||
400 | - loger.warn("课堂数据还未获取,不能发送消息"); | ||
401 | - return; | ||
402 | - } | ||
403 | - let uniformPdu = pdu.create_uniform_pdu( | ||
404 | - appPdu.type, | ||
405 | - this._classInfo.nodeId, | ||
406 | - this._classInfo.classId, | ||
407 | - this._session_id, | ||
408 | - top ? ApeConsts.BROADCAST_CHANNEL_ID : this._channel_id, | ||
409 | - true, | ||
410 | - PduConsts.DP_TOP, | ||
411 | - 0,//flash中这个值设置为0 | ||
412 | - PduConsts.SEG_ONCE | ||
413 | - ); | ||
414 | - uniformPdu.data = appPdu.toArrayBuffer(); | ||
415 | - //loger.log('Ape发送数据UNIFORM PDU',uniformPdu); | ||
416 | - // Mcu发送 | ||
417 | - this.mcu.send(uniformPdu); | 391 | + if (!this._classInfo) { |
392 | + loger.warn("课堂数据还未获取,不能发送消息"); | ||
393 | + return; | ||
418 | } | 394 | } |
395 | + let uniformPdu = pdu.create_uniform_pdu( | ||
396 | + appPdu.type, | ||
397 | + this._classInfo.nodeId, | ||
398 | + this._classInfo.classId, | ||
399 | + this._session_id, | ||
400 | + top ? ApeConsts.BROADCAST_CHANNEL_ID : this._channel_id, | ||
401 | + true, | ||
402 | + PduConsts.DP_TOP, | ||
403 | + 0,//flash中这个值设置为0 | ||
404 | + PduConsts.SEG_ONCE | ||
405 | + ); | ||
406 | + uniformPdu.data = appPdu.toArrayBuffer(); | ||
407 | + //loger.log('Ape发送数据UNIFORM PDU',uniformPdu); | ||
408 | + // Mcu发送 | ||
409 | + this.mcu.send(uniformPdu); | ||
410 | + } | ||
419 | } | 411 | } |
420 | 412 |
@@ -194,16 +194,16 @@ ApeConsts.MUSIC_SESSION_TAG = "mis-tag"; | @@ -194,16 +194,16 @@ ApeConsts.MUSIC_SESSION_TAG = "mis-tag"; | ||
194 | ApeConsts.SCREENSHARING_SESSION_TAG = "scr-tag"; | 194 | ApeConsts.SCREENSHARING_SESSION_TAG = "scr-tag"; |
195 | ApeConsts.QUESTION_SESSION_TAG = "qst-tag"; | 195 | ApeConsts.QUESTION_SESSION_TAG = "qst-tag"; |
196 | 196 | ||
197 | -ApeConsts.CONFERENCE_OBJ_ROSTER_ID = ((ApeConsts.CONFERENCE_SESSION_ID << 16) + 1); | 197 | +ApeConsts.CONFERENCE_OBJ_ROSTER_ID = ((ApeConsts.CONFERENCE_SESSION_ID << 16) + 1);//720897 |
198 | ApeConsts.CONFERENCE_OBJ_ROSTER_NAME = "node list"; | 198 | ApeConsts.CONFERENCE_OBJ_ROSTER_NAME = "node list"; |
199 | ApeConsts.CONFERENCE_OBJ_ROSTER_TAG = "node list tag"; | 199 | ApeConsts.CONFERENCE_OBJ_ROSTER_TAG = "node list tag"; |
200 | 200 | ||
201 | -ApeConsts.CONFERENCE_OBJ_QUEUE_ID = ((ApeConsts.CONFERENCE_SESSION_ID << 16) + 2); | 201 | +ApeConsts.CONFERENCE_OBJ_QUEUE_ID = ((ApeConsts.CONFERENCE_SESSION_ID << 16) + 2);//720898 |
202 | ApeConsts.CONFERENCE_OBJ_QUEUE_NAME = "mic list"; | 202 | ApeConsts.CONFERENCE_OBJ_QUEUE_NAME = "mic list"; |
203 | ApeConsts.CONFERENCE_OBJ_QUEUE_TAG = "mic list tag"; | 203 | ApeConsts.CONFERENCE_OBJ_QUEUE_TAG = "mic list tag"; |
204 | 204 | ||
205 | // conference tab pages | 205 | // conference tab pages |
206 | -ApeConsts.CONFERENCE_OBJ_TABLE_ID = ((ApeConsts.CONFERENCE_SESSION_ID << 16) + 3); | 206 | +ApeConsts.CONFERENCE_OBJ_TABLE_ID = ((ApeConsts.CONFERENCE_SESSION_ID << 16) + 3);//720899 |
207 | ApeConsts.CONFERENCE_OBJ_TABLE_NAME = "tabbar list"; | 207 | ApeConsts.CONFERENCE_OBJ_TABLE_NAME = "tabbar list"; |
208 | ApeConsts.CONFERENCE_OBJ_TABLE_TAG = "tabbar list tag"; | 208 | ApeConsts.CONFERENCE_OBJ_TABLE_TAG = "tabbar list tag"; |
209 | 209 |
@@ -23,6 +23,7 @@ class ConferApe extends Ape { | @@ -23,6 +23,7 @@ class ConferApe extends Ape { | ||
23 | ApeConsts.CONFERENCE_SESSION_NAME, | 23 | ApeConsts.CONFERENCE_SESSION_NAME, |
24 | ApeConsts.CONFERENCE_SESSION_TAG | 24 | ApeConsts.CONFERENCE_SESSION_TAG |
25 | ); | 25 | ); |
26 | + this.isSendInsterRoster=false;//这个很重要,每次MCU连接成功之后只发一次 | ||
26 | this.isLeave=false;//记录自己是否已经离开 | 27 | this.isLeave=false;//记录自己是否已经离开 |
27 | this.rosters = {}; //用户列表 | 28 | this.rosters = {}; //用户列表 |
28 | this.rosterLen = 0;//当前课堂人数 | 29 | this.rosterLen = 0;//当前课堂人数 |
@@ -57,8 +58,11 @@ class ConferApe extends Ape { | @@ -57,8 +58,11 @@ class ConferApe extends Ape { | ||
57 | 58 | ||
58 | //加入课堂 | 59 | //加入课堂 |
59 | _joinSessionHandler(_data) { | 60 | _joinSessionHandler(_data) { |
60 | - //let nodeInfoRecordPdu = this.mcu.mcuClassInfo.self; | ||
61 | - let nodeInfoRecordPdu = this.getNodeInfo(); | 61 | + if(this.isSendInsterRoster){ |
62 | + loger.warn("已经发送过insertRoster,不能再次发送"); | ||
63 | + return | ||
64 | + } | ||
65 | + let nodeInfoRecordPdu = this.getNodeInfo(); | ||
62 | 66 | ||
63 | let userDataPdu = new pdu['RCNodeInfoUserDataPdu']; | 67 | let userDataPdu = new pdu['RCNodeInfoUserDataPdu']; |
64 | userDataPdu.qq = ''; | 68 | userDataPdu.qq = ''; |
@@ -67,14 +71,12 @@ class ConferApe extends Ape { | @@ -67,14 +71,12 @@ class ConferApe extends Ape { | ||
67 | nodeInfoRecordPdu.userData = userDataPdu.toArrayBuffer(); | 71 | nodeInfoRecordPdu.userData = userDataPdu.toArrayBuffer(); |
68 | nodeInfoRecordPdu.deviceType = GlobalConfig.deviceType; //设备类型 | 72 | nodeInfoRecordPdu.deviceType = GlobalConfig.deviceType; //设备类型 |
69 | 73 | ||
70 | - //loger.log('开始加入->', nodeInfoRecordPdu); | ||
71 | - | ||
72 | let item = new pdu['RCRegistryRosterItemPdu']; | 74 | let item = new pdu['RCRegistryRosterItemPdu']; |
73 | item.nodeId = nodeInfoRecordPdu.nodeId; | 75 | item.nodeId = nodeInfoRecordPdu.nodeId; |
74 | item.nodeData = nodeInfoRecordPdu.toArrayBuffer(); | 76 | item.nodeData = nodeInfoRecordPdu.toArrayBuffer(); |
75 | 77 | ||
76 | let rosterUpdateItem = new pdu['RCRegistryRosterInsertItemPdu']; | 78 | let rosterUpdateItem = new pdu['RCRegistryRosterInsertItemPdu']; |
77 | - rosterUpdateItem.type = pdu.RCPDU_REG_ROSTER_UPDATE_PDU; | 79 | + rosterUpdateItem.type =pdu.RCPDU_REG_ROSTER_UPDATE_PDU;// pdu.RCPDU_REG_ROSTER_INSERT_PDU 暂时用update的类型,MCU第一次会当insert处理,目前insert解包出错 |
78 | rosterUpdateItem.items.push(item); | 80 | rosterUpdateItem.items.push(item); |
79 | 81 | ||
80 | let updateObjPdu = new pdu['RCRegistryUpdateObjPdu']; | 82 | let updateObjPdu = new pdu['RCRegistryUpdateObjPdu']; |
@@ -91,6 +93,9 @@ class ConferApe extends Ape { | @@ -91,6 +93,9 @@ class ConferApe extends Ape { | ||
91 | adapterPdu.type = pdu.RCPDU_REG_ADAPTER; | 93 | adapterPdu.type = pdu.RCPDU_REG_ADAPTER; |
92 | adapterPdu.item.push(adapterItemPdu); | 94 | adapterPdu.item.push(adapterItemPdu); |
93 | this.sendUniform(adapterPdu, true); | 95 | this.sendUniform(adapterPdu, true); |
96 | + | ||
97 | + this.isSendInsterRoster=true; | ||
98 | + loger.log('发送insertRoster->', nodeInfoRecordPdu); | ||
94 | } | 99 | } |
95 | 100 | ||
96 | //获取角色信息 | 101 | //获取角色信息 |
@@ -289,7 +294,7 @@ class ConferApe extends Ape { | @@ -289,7 +294,7 @@ class ConferApe extends Ape { | ||
289 | loger.warn('目前已经是录制状态->当前课堂人数:' + this.rosterLen); | 294 | loger.warn('目前已经是录制状态->当前课堂人数:' + this.rosterLen); |
290 | return false; | 295 | return false; |
291 | } | 296 | } |
292 | - //如果是host或者当前课堂只有1个人 | 297 | + //如果是host或者当前课堂只有1个人,并且不是H5 |
293 | if (this.checkHasRecordControl()) { | 298 | if (this.checkHasRecordControl()) { |
294 | loger.warn('开启录制', "isHost", GlobalConfig.isHost, "recordStatus", GlobalConfig.recordStatus, "当前人数:" + this.rosterLen); | 299 | loger.warn('开启录制', "isHost", GlobalConfig.isHost, "recordStatus", GlobalConfig.recordStatus, "当前人数:" + this.rosterLen); |
295 | //如果录制的文件名不存在,需要创建一个名字 | 300 | //如果录制的文件名不存在,需要创建一个名字 |
@@ -619,6 +624,9 @@ class ConferApe extends Ape { | @@ -619,6 +624,9 @@ class ConferApe extends Ape { | ||
619 | sendUpdaterClassStatusInfo(_param) { | 624 | sendUpdaterClassStatusInfo(_param) { |
620 | //{"actionType": 1,isStopAllPublishMedia:false} //actionType课堂状态 isStopAllPublishMedia是否停止当前的所有推流 | 625 | //{"actionType": 1,isStopAllPublishMedia:false} //actionType课堂状态 isStopAllPublishMedia是否停止当前的所有推流 |
621 | //console.log('发送更新课堂信息->'); | 626 | //console.log('发送更新课堂信息->'); |
627 | + if(GlobalConfig.classType==ApeConsts.CLASS_TYPE_ZHIBO&&GlobalConfig.isH5==true){ | ||
628 | + return; | ||
629 | + } | ||
622 | if (_param == null || EngineUtils.isEmptyObject(_param)) { | 630 | if (_param == null || EngineUtils.isEmptyObject(_param)) { |
623 | loger.log('发送更新课堂信息->参数错误'); | 631 | loger.log('发送更新课堂信息->参数错误'); |
624 | this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG); | 632 | this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG); |
@@ -733,6 +741,10 @@ class ConferApe extends Ape { | @@ -733,6 +741,10 @@ class ConferApe extends Ape { | ||
733 | //更新录制进行时间 | 741 | //更新录制进行时间 |
734 | GlobalConfig.recordTimestamp = GlobalConfig.recordTimestamp + 1; | 742 | GlobalConfig.recordTimestamp = GlobalConfig.recordTimestamp + 1; |
735 | if (this.checkHasRecordControl()) { | 743 | if (this.checkHasRecordControl()) { |
744 | + | ||
745 | + if(GlobalConfig.classType==ApeConsts.CLASS_TYPE_ZHIBO&&GlobalConfig.isH5==true){ | ||
746 | + return; | ||
747 | + } | ||
736 | //以一定的时间间隔同步课堂内所有人的累积上课时间 | 748 | //以一定的时间间隔同步课堂内所有人的累积上课时间 |
737 | if (GlobalConfig.recordTimestamp % GlobalConfig.updateRecordTimeDelay == 0) { | 749 | if (GlobalConfig.recordTimestamp % GlobalConfig.updateRecordTimeDelay == 0) { |
738 | //保存数据到Sass | 750 | //保存数据到Sass |
@@ -945,7 +957,6 @@ class ConferApe extends Ape { | @@ -945,7 +957,6 @@ class ConferApe extends Ape { | ||
945 | } | 957 | } |
946 | 958 | ||
947 | rosterInsertHandler(nodeId, nodeData) { | 959 | rosterInsertHandler(nodeId, nodeData) { |
948 | - //loger.log("人员进入--->"); | ||
949 | if (GlobalConfig.nodeId == nodeId) { | 960 | if (GlobalConfig.nodeId == nodeId) { |
950 | loger.log("人员进入课堂模块--->自己"); | 961 | loger.log("人员进入课堂模块--->自己"); |
951 | } else { | 962 | } else { |
@@ -1026,8 +1037,10 @@ class ConferApe extends Ape { | @@ -1026,8 +1037,10 @@ class ConferApe extends Ape { | ||
1026 | loger.log("人员加入->", newNodeData); | 1037 | loger.log("人员加入->", newNodeData); |
1027 | } | 1038 | } |
1028 | 1039 | ||
1029 | - this._emit(MessageTypes.CLASS_INSERT_ROSTER, {"nodeId": nodeId, "nodeData": newNodeData}); | ||
1030 | - this.emitRosterChange(); | 1040 | + if(!GlobalConfig.isH5){ |
1041 | + this._emit(MessageTypes.CLASS_INSERT_ROSTER, {"nodeId": nodeId, "nodeData": newNodeData}); | ||
1042 | + this.emitRosterChange(); | ||
1043 | + } | ||
1031 | } else { | 1044 | } else { |
1032 | //loger.log("更新人员列表数据,rosterExists已经存在",rosterExists); | 1045 | //loger.log("更新人员列表数据,rosterExists已经存在",rosterExists); |
1033 | this.rosterLen = Object.keys(this.rosters).length; | 1046 | this.rosterLen = Object.keys(this.rosters).length; |
@@ -1038,7 +1051,10 @@ class ConferApe extends Ape { | @@ -1038,7 +1051,10 @@ class ConferApe extends Ape { | ||
1038 | loger.log("人员更新信息->", newNodeData); | 1051 | loger.log("人员更新信息->", newNodeData); |
1039 | } | 1052 | } |
1040 | } | 1053 | } |
1041 | - this._emit(MessageTypes.CLASS_UPDATE_ROSTER, {"nodeId": nodeId, "nodeData": newNodeData}); | 1054 | + if(!GlobalConfig.isH5){ |
1055 | + this._emit(MessageTypes.CLASS_UPDATE_ROSTER, {"nodeId": nodeId, "nodeData": newNodeData}); | ||
1056 | + } | ||
1057 | + | ||
1042 | } | 1058 | } |
1043 | } | 1059 | } |
1044 | 1060 | ||
@@ -1105,29 +1121,33 @@ class ConferApe extends Ape { | @@ -1105,29 +1121,33 @@ class ConferApe extends Ape { | ||
1105 | this.rosterLen = Object.keys(this.rosters).length; | 1121 | this.rosterLen = Object.keys(this.rosters).length; |
1106 | GlobalConfig.rosterNumber = this.rosterLen;//记录当前的总人数 | 1122 | GlobalConfig.rosterNumber = this.rosterLen;//记录当前的总人数 |
1107 | 1123 | ||
1108 | - this.emitRosterChange(); | ||
1109 | - this._emit(MessageTypes.CLASS_DELETE_ROSTER, {"nodeId": nodeId, "rosterLen": this.rosterLen}); | ||
1110 | - | ||
1111 | - //当前人员列表中抽一个人来检查离开人员是否占用频道 | ||
1112 | - for (let key in this.rosters) { | ||
1113 | - let randNodeId = parseInt(key); | ||
1114 | - //判断是否是自己就处理以下操作 | ||
1115 | - if (randNodeId == GlobalConfig.nodeId) { | ||
1116 | - loger.log("检查离开的人员是否占用channel"); | ||
1117 | - this._emit(MessageTypes.CLASS_NONENTITY_ROSTER, {"nodeId": nodeId, "rosterLen": this.rosterLen}); | ||
1118 | - //如果离开的人员是老师,需要暂停当前的课堂 | ||
1119 | - if (user && user.role == ApeConsts.NR_HOST) { | ||
1120 | - this.pauseClass(); | 1124 | + if(!GlobalConfig.isH5) { |
1125 | + this.emitRosterChange(); | ||
1126 | + this._emit(MessageTypes.CLASS_DELETE_ROSTER, {"nodeId": nodeId, "rosterLen": this.rosterLen}); | ||
1127 | + | ||
1128 | + //当前人员列表中抽一个人来检查离开人员是否占用频道 | ||
1129 | + for (let key in this.rosters) { | ||
1130 | + let randNodeId = parseInt(key); | ||
1131 | + //判断是否是自己就处理以下操作 | ||
1132 | + if (randNodeId == GlobalConfig.nodeId) { | ||
1133 | + loger.log("检查离开的人员是否占用channel"); | ||
1134 | + this._emit(MessageTypes.CLASS_NONENTITY_ROSTER, {"nodeId": nodeId, "rosterLen": this.rosterLen}); | ||
1135 | + //如果离开的人员是老师,需要暂停当前的课堂 | ||
1136 | + if (user && user.role == ApeConsts.NR_HOST) { | ||
1137 | + this.pauseClass(); | ||
1138 | + } | ||
1121 | } | 1139 | } |
1140 | + return; | ||
1122 | } | 1141 | } |
1123 | - return; | ||
1124 | } | 1142 | } |
1125 | } | 1143 | } |
1126 | } | 1144 | } |
1127 | 1145 | ||
1128 | //广播当前的人数 | 1146 | //广播当前的人数 |
1129 | emitRosterChange() { | 1147 | emitRosterChange() { |
1130 | - this._emit(MessageTypes.CLASS_UPDATE_ROSTER_NUM, Object.keys(this.rosters).length); | 1148 | + if(!GlobalConfig.isH5){ |
1149 | + this._emit(MessageTypes.CLASS_UPDATE_ROSTER_NUM, Object.keys(this.rosters).length); | ||
1150 | + } | ||
1131 | } | 1151 | } |
1132 | 1152 | ||
1133 | ///////数据的封包和解包///////////////////////////////////////// | 1153 | ///////数据的封包和解包///////////////////////////////////////// |
@@ -1206,6 +1226,7 @@ class ConferApe extends Ape { | @@ -1206,6 +1226,7 @@ class ConferApe extends Ape { | ||
1206 | GlobalConfig.rosterNumber = this.rosterLen; | 1226 | GlobalConfig.rosterNumber = this.rosterLen; |
1207 | GlobalConfig.rosters = this.rosters; | 1227 | GlobalConfig.rosters = this.rosters; |
1208 | this.isLeave=true; | 1228 | this.isLeave=true; |
1229 | + this.isSendInsterRoster=false; | ||
1209 | } | 1230 | } |
1210 | 1231 | ||
1211 | } | 1232 | } |
@@ -406,6 +406,12 @@ class VideoApe extends Ape { | @@ -406,6 +406,12 @@ class VideoApe extends Ape { | ||
406 | loger.warn(GlobalConfig.getCurrentStatus()); | 406 | loger.warn(GlobalConfig.getCurrentStatus()); |
407 | return {"code": ApeConsts.RETURN_FAILED, "data": "已经断开连接"}; | 407 | return {"code": ApeConsts.RETURN_FAILED, "data": "已经断开连接"}; |
408 | } | 408 | } |
409 | + clearTimeout(this.releaseTimeId); | ||
410 | + if(GlobalConfig.classType==ApeConsts.CLASS_TYPE_ZHIBO&&GlobalConfig.isH5){ | ||
411 | + //直播时H5不处理 | ||
412 | + return; | ||
413 | + } | ||
414 | + | ||
409 | loger.log("释放nodeId占用的所有频道->", nodeId); | 415 | loger.log("释放nodeId占用的所有频道->", nodeId); |
410 | let openingChannelInfo = this.mediaModule.getOpeningMediaChannelForNodeId(nodeId); | 416 | let openingChannelInfo = this.mediaModule.getOpeningMediaChannelForNodeId(nodeId); |
411 | if (openingChannelInfo.channelId == 0) { | 417 | if (openingChannelInfo.channelId == 0) { |
@@ -423,10 +429,6 @@ class VideoApe extends Ape { | @@ -423,10 +429,6 @@ class VideoApe extends Ape { | ||
423 | 429 | ||
424 | this.sendTableUpdateHandler(channelInfo); | 430 | this.sendTableUpdateHandler(channelInfo); |
425 | //递归检查,800毫秒之后执行 | 431 | //递归检查,800毫秒之后执行 |
426 | - clearTimeout(this.releaseTimeId); | ||
427 | - if(GlobalConfig.classType==ApeConsts.CLASS_TYPE_ZHIBO&&GlobalConfig.isH5){ | ||
428 | - return; | ||
429 | - } | ||
430 | this.releaseTimeId = setTimeout(function () { | 432 | this.releaseTimeId = setTimeout(function () { |
431 | loger.warn(nodeId, "检查频道是否占用"); | 433 | loger.warn(nodeId, "检查频道是否占用"); |
432 | this._releaseNodeIdAllChannel(nodeId); | 434 | this._releaseNodeIdAllChannel(nodeId); |
@@ -501,7 +503,10 @@ class VideoApe extends Ape { | @@ -501,7 +503,10 @@ class VideoApe extends Ape { | ||
501 | //已经离开课堂就不再做处理 | 503 | //已经离开课堂就不再做处理 |
502 | return; | 504 | return; |
503 | } | 505 | } |
504 | - | 506 | + if(GlobalConfig.classType==ApeConsts.CLASS_TYPE_ZHIBO&&GlobalConfig.isH5){ |
507 | + //直播时H5不做处理 | ||
508 | + return; | ||
509 | + } | ||
505 | let updateModelPdu = this.packPdu(_channelInfo, _channelInfo.channelId);//let updateModelPdu=this.packPdu({},ApeConsts.VIDEO_OBJ_TABLE_ID+2); | 510 | let updateModelPdu = this.packPdu(_channelInfo, _channelInfo.channelId);//let updateModelPdu=this.packPdu({},ApeConsts.VIDEO_OBJ_TABLE_ID+2); |
506 | 511 | ||
507 | if (updateModelPdu == null) { | 512 | if (updateModelPdu == null) { |
-
请 注册 或 登录 后发表评论