李勇

1.视频模块修复同步更新消息时nodeId不正确的问题;2.新增video模块由于频道占用问题导致推流消息不能同步,回放时缺少消息的问题,使用广播消息来匹配;3.修复webrtc视频界面名字显示

@@ -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.36.4.20171201"; 66 + GlobalConfig.sdkVersion = "v2.36.11.20171204";
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 //设置
@@ -801,6 +801,7 @@ export default class MessageEntrance extends Emiter { @@ -801,6 +801,7 @@ export default class MessageEntrance extends Emiter {
801 //本地JOSN加载完成-获取IP信息完成 801 //本地JOSN加载完成-获取IP信息完成
802 _getUserIpCallbackHandler(_data) { 802 _getUserIpCallbackHandler(_data) {
803 //获取IP信息,返回一次就不再处理 803 //获取IP信息,返回一次就不再处理
  804 + loger.log("获取IP信息返回->",_data);
804 if (this.isGetUserIpCallback) { 805 if (this.isGetUserIpCallback) {
805 return; 806 return;
806 } 807 }
@@ -164,14 +164,14 @@ class EverSocket extends Emiter { @@ -164,14 +164,14 @@ class EverSocket extends Emiter {
164 } 164 }
165 165
166 _clear() { 166 _clear() {
167 - loger.log('WebSocket,Timers销毁'); 167 + loger.log('WebSocket-Timers销毁');
168 window.clearInterval(this.pingTimer); 168 window.clearInterval(this.pingTimer);
169 window.clearInterval(this.pongTimer); 169 window.clearInterval(this.pongTimer);
170 window.clearInterval(this.reConnectionTimeout); 170 window.clearInterval(this.reConnectionTimeout);
171 this._setConnected(false);//先设置状态 171 this._setConnected(false);//先设置状态
172 this._enableEverSocket = false; 172 this._enableEverSocket = false;
173 if (this.websocket == null) { 173 if (this.websocket == null) {
174 - loger.log('WebSocket,Timers已经销毁'); 174 + // loger.log('WebSocket,Timers已经销毁');
175 return; 175 return;
176 } 176 }
177 this.websocket.onopen = undefined; 177 this.websocket.onopen = undefined;
@@ -188,7 +188,7 @@ class EverSocket extends Emiter { @@ -188,7 +188,7 @@ class EverSocket extends Emiter {
188 } 188 }
189 189
190 _clearHistory() { 190 _clearHistory() {
191 - loger.log('WebSocket->清除记录'); 191 + //loger.log('WebSocket->清除记录');
192 window.clearInterval(this.pingTimer); 192 window.clearInterval(this.pingTimer);
193 window.clearInterval(this.pongTimer); 193 window.clearInterval(this.pongTimer);
194 window.clearInterval(this.reConnectionTimeout); 194 window.clearInterval(this.reConnectionTimeout);
@@ -196,7 +196,7 @@ class EverSocket extends Emiter { @@ -196,7 +196,7 @@ class EverSocket extends Emiter {
196 this._connected = false; 196 this._connected = false;
197 this._enableEverSocket = false; 197 this._enableEverSocket = false;
198 if (this.websocket == null) { 198 if (this.websocket == null) {
199 - loger.log('WebSocket->已经销毁'); 199 + //loger.log('WebSocket->已经销毁');
200 return; 200 return;
201 } 201 }
202 this.websocket.onopen = undefined; 202 this.websocket.onopen = undefined;
@@ -212,7 +212,7 @@ class EverSocket extends Emiter { @@ -212,7 +212,7 @@ class EverSocket extends Emiter {
212 } 212 }
213 213
214 _onOpen() { 214 _onOpen() {
215 - loger.log('WebSocket建立成功', this.wsURL); 215 + loger.log('MCU连接成功', this.wsURL);
216 this.reConnectionCounter = 0; 216 this.reConnectionCounter = 0;
217 this.mcuReconnectCounter=0; 217 this.mcuReconnectCounter=0;
218 218
@@ -224,12 +224,12 @@ class EverSocket extends Emiter { @@ -224,12 +224,12 @@ class EverSocket extends Emiter {
224 } 224 }
225 225
226 _onClose(closeEvent) { 226 _onClose(closeEvent) {
227 - loger.log(`WebSocket连接断开 CODE:${closeEvent.code} REASON:${closeEvent.reason} CLEAN: ${closeEvent.wasClean}`, this.wsURL); 227 + loger.log(`MCU连接断开-CODE:${closeEvent.code} REASON:${closeEvent.reason} CLEAN: ${closeEvent.wasClean}`, this.wsURL);
228 this._reConnection(); 228 this._reConnection();
229 } 229 }
230 230
231 _onError() { 231 _onError() {
232 - loger.log('WebSocket错误出现'); 232 + loger.log('WebSocket->ERROR->准备重连');
233 this._connected = false; 233 this._connected = false;
234 this._reConnection(); 234 this._reConnection();
235 } 235 }
@@ -264,7 +264,7 @@ class EverSocket extends Emiter { @@ -264,7 +264,7 @@ class EverSocket extends Emiter {
264 ) { 264 ) {
265 265
266 } else { 266 } else {
267 - loger.warn('---服务器PINGPONG超时-----'); 267 + loger.warn('服务器PINGPONG超时->准备重连',"lastActiveTime:"+this._lastActiveTime,"pongTime:"+pongTime);
268 this._reConnection(); 268 this._reConnection();
269 } 269 }
270 } 270 }
@@ -246,10 +246,10 @@ class RecordInfoMatch extends Emiter { @@ -246,10 +246,10 @@ class RecordInfoMatch extends Emiter {
246 this.matchForUid(k, _recordMessages[k], _m3u8jsonDataList[k]); 246 this.matchForUid(k, _recordMessages[k], _m3u8jsonDataList[k]);
247 } 247 }
248 248
249 - console.log("unMatchUid", this.matchStreams); 249 + console.log("matchStreams", this.matchStreams);
250 console.log("_recordMessages", _recordMessages); 250 console.log("_recordMessages", _recordMessages);
251 console.log("_m3u8jsonDataList", _m3u8jsonDataList); 251 console.log("_m3u8jsonDataList", _m3u8jsonDataList);
252 - console.log("最终匹配完成的数量为->" + Object.keys(this.matchStreams).length, "未匹配成功的数量为->" + (this.streamInfoLen - parseInt(Object.keys(this.matchStreams).length))); 252 + console.log("最终匹配完成的数量为->" + Object.keys(this.matchStreams).length);
253 console.log("没有录制文件的用户", this.unMatchUid); 253 console.log("没有录制文件的用户", this.unMatchUid);
254 this._emit(RecordInfoMatch.RECORD_INFO_MATCH_COMPLETE, this.matchStreams); 254 this._emit(RecordInfoMatch.RECORD_INFO_MATCH_COMPLETE, this.matchStreams);
255 } 255 }
@@ -317,22 +317,22 @@ class RecordInfoMatch extends Emiter { @@ -317,22 +317,22 @@ class RecordInfoMatch extends Emiter {
317 if (uidRecordInfoArr.length != uidRecordFileArr.length && uidRecordFileArr.length > 0 && uidRecordInfoArr.length > 0) { 317 if (uidRecordInfoArr.length != uidRecordFileArr.length && uidRecordFileArr.length > 0 && uidRecordInfoArr.length > 0) {
318 console.log(k + "->数量不同 消息数量:" + uidRecordInfoArr.length, "视频数量:" + uidRecordFileArr.length); 318 console.log(k + "->数量不同 消息数量:" + uidRecordInfoArr.length, "视频数量:" + uidRecordFileArr.length);
319 //按消息的数量大于视频数量处理 319 //按消息的数量大于视频数量处理
320 - let lastFileItem;//记录最后一个 320 + let lastVideoFileItem;//记录最后一个
321 for (let h = 0; h < uidRecordInfoArr.length; h++) { 321 for (let h = 0; h < uidRecordInfoArr.length; h++) {
322 let infoItem = uidRecordInfoArr[h]; 322 let infoItem = uidRecordInfoArr[h];
323 - let fileItem = uidRecordFileArr[h];  
324 - if (fileItem) {  
325 - infoItem.video_url = fileItem.video_url; 323 + let videoFileItem = uidRecordFileArr[h];
  324 + if (videoFileItem) {
  325 + infoItem.video_url = videoFileItem.video_url;
326 326
327 //如果之前没有匹配到才设置 327 //如果之前没有匹配到才设置
328 if (!this.matchStreams[infoItem.stream_id]) { 328 if (!this.matchStreams[infoItem.stream_id]) {
329 this.matchStreams[infoItem.stream_id] = infoItem; 329 this.matchStreams[infoItem.stream_id] = infoItem;
330 } 330 }
331 - lastFileItem = infoItem;//记录最后一个文件的数据 331 + lastVideoFileItem = infoItem;//记录最后一个文件的数据
332 } else { 332 } else {
333 - if (lastFileItem) {  
334 - infoItem.video_url = lastFileItem.video_url;  
335 - infoItem.seek = parseInt(infoItem.creatTimeUTC) - parseInt(lastFileItem.creatTimeUTC); 333 + if (lastVideoFileItem) {
  334 + infoItem.video_url = lastVideoFileItem.video_url;
  335 + infoItem.seek = parseInt(infoItem.creatTimeUTC) - parseInt(lastVideoFileItem.creatTimeUTC);
336 if (!this.matchStreams[infoItem.stream_id]) { 336 if (!this.matchStreams[infoItem.stream_id]) {
337 this.matchStreams[infoItem.stream_id] = infoItem; 337 this.matchStreams[infoItem.stream_id] = infoItem;
338 } 338 }
@@ -282,6 +282,7 @@ class RecordPlayBackParse extends Emiter { @@ -282,6 +282,7 @@ class RecordPlayBackParse extends Emiter {
282 this._searchMessageFromTime(this._recordPlaybackTimestamp, this._whiteApeMssages, "whiteApe"); 282 this._searchMessageFromTime(this._recordPlaybackTimestamp, this._whiteApeMssages, "whiteApe");
283 this._searchMessageFromTime(this._recordPlaybackTimestamp, this._videoApeMssages, "videoAp"); 283 this._searchMessageFromTime(this._recordPlaybackTimestamp, this._videoApeMssages, "videoAp");
284 this._searchMessageFromTime(this._recordPlaybackTimestamp, this._audioApeMssages, "audioApe"); 284 this._searchMessageFromTime(this._recordPlaybackTimestamp, this._audioApeMssages, "audioApe");
  285 + this._searchMessageFromTime(this._recordPlaybackTimestamp, this._videoApeBroadcastMssages, "videoApBroadcast");
285 } 286 }
286 287
287 //加载录制文件rec 288 //加载录制文件rec
@@ -864,8 +865,12 @@ class RecordPlayBackParse extends Emiter { @@ -864,8 +865,12 @@ class RecordPlayBackParse extends Emiter {
864 //this._searchApeMessageKeyfram(this._audioApeMssages, ApeConsts.AUDIO_SESSION_ID); 865 //this._searchApeMessageKeyfram(this._audioApeMssages, ApeConsts.AUDIO_SESSION_ID);
865 */ 866 */
866 867
  868 + //先查广播消息再查频道消息,频道消息在广播消息之后
  869 + //视频广播消息
  870 + this.searchVideoBroadcastMessageKeyfram(this._videoApeBroadcastMssages);
867 //音视频模块的查找规则和其他模块不一样,音视频按频道查找,如果课堂内存在多个频道,都要查 871 //音视频模块的查找规则和其他模块不一样,音视频按频道查找,如果课堂内存在多个频道,都要查
868 - this.searchMediaApeMessageKeyfram(this.mediaChannleList); 872 + //this.searchMediaApeMessageKeyfram(this.mediaChannleList);
  873 +
869 874
870 //媒体共享模块 875 //媒体共享模块
871 this.searchMediaShareApeMessageKeyfram(this._mediaShareApeMssages); 876 this.searchMediaShareApeMessageKeyfram(this._mediaShareApeMssages);
@@ -935,6 +940,31 @@ class RecordPlayBackParse extends Emiter { @@ -935,6 +940,31 @@ class RecordPlayBackParse extends Emiter {
935 } 940 }
936 } 941 }
937 942
  943 + //视频广播消息查找关键帧时间戳的消息
  944 + searchVideoBroadcastMessageKeyfram(_apeMessages) {
  945 + if (!_apeMessages) {
  946 + return;
  947 + }
  948 + console.log('SEEK->查找音视频模块广播数据', _apeMessages)
  949 + if (_apeMessages) {
  950 + for (let k in _apeMessages) {
  951 + let nodeIdVideoBrodcast = _apeMessages[k];
  952 + let messageItem;
  953 + let keyFrameSeekTime = 0;
  954 + for (let i = this._recordPlaybackTimestamp; i > 0; i--) {
  955 + messageItem = nodeIdVideoBrodcast[i];
  956 + if (messageItem) {
  957 + keyFrameSeekTime = (this._recordPlaybackTimestamp - i);
  958 + loger.log("nodeId:" + k + "->SEEK->查找音视频模块广播数据->", messageItem, 'keyFrameSeekTime->', keyFrameSeekTime)
  959 + this._everSocketMsgReceivedHandler(messageItem.byteData, keyFrameSeekTime);
  960 + break;
  961 + }
  962 + }
  963 + // loger.log("nodeId:" + k + "—>没有查找到数据")
  964 + }
  965 + }
  966 + }
  967 +
938 //媒体共享模块查找关键帧时间戳的消息 968 //媒体共享模块查找关键帧时间戳的消息
939 searchMediaShareApeMessageKeyfram(_apeMessages) { 969 searchMediaShareApeMessageKeyfram(_apeMessages) {
940 if (!_apeMessages) { 970 if (!_apeMessages) {
@@ -1080,6 +1110,12 @@ class RecordPlayBackParse extends Emiter { @@ -1080,6 +1110,12 @@ class RecordPlayBackParse extends Emiter {
1080 },..... 1110 },.....
1081 }*/ 1111 }*/
1082 1112
  1113 + if(videoReceivePdu.data.status==1){
  1114 + let videoChannelInfo=videoReceivePdu.data;
  1115 + videoChannelInfo.creatTime=videoChannelInfo.timestamp;
  1116 + this.videoPublishMessages.push(videoChannelInfo);
  1117 + }
  1118 +
1083 this._videoApeBroadcastMssages[videoReceivePdu.fromNodeId][timestamp] = { 1119 this._videoApeBroadcastMssages[videoReceivePdu.fromNodeId][timestamp] = {
1084 parseData: videoReceivePdu, 1120 parseData: videoReceivePdu,
1085 byteData: data, 1121 byteData: data,
@@ -1218,7 +1254,7 @@ class RecordPlayBackParse extends Emiter { @@ -1218,7 +1254,7 @@ class RecordPlayBackParse extends Emiter {
1218 if (sessionId == ApeConsts.VIDEO_SESSION_ID) { 1254 if (sessionId == ApeConsts.VIDEO_SESSION_ID) {
1219 try { 1255 try {
1220 let videoChannelInfo = pdu['RCVideoChannelInfoPdu'].decode(tableItem.itemData); 1256 let videoChannelInfo = pdu['RCVideoChannelInfoPdu'].decode(tableItem.itemData);
1221 - loger.log('RCVideoChannelInfoPdu->timestamp',timestamp,videoChannelInfo); 1257 + //loger.log('RCVideoChannelInfoPdu->timestamp',timestamp,videoChannelInfo);
1222 //储存音视频模块的数据 1258 //储存音视频模块的数据
1223 if (!this.mediaChannleList[videoChannelInfo.channelId]) { 1259 if (!this.mediaChannleList[videoChannelInfo.channelId]) {
1224 this.mediaChannleList[videoChannelInfo.channelId] = {}; 1260 this.mediaChannleList[videoChannelInfo.channelId] = {};
@@ -570,6 +570,7 @@ class VideoApe extends Ape { @@ -570,6 +570,7 @@ class VideoApe extends Ape {
570 //录制回放和H5需要处理 570 //录制回放和H5需要处理
571 if(GlobalConfig.isRecordPlayBack){ 571 if(GlobalConfig.isRecordPlayBack){
572 //录制回放的处理 572 //录制回放的处理
  573 + console.log("录制回放的处理视频模块控制消息->",videoReceivePdu);
573 if (videoReceivePdu.toNodeId!=0){ 574 if (videoReceivePdu.toNodeId!=0){
574 //只处理发送给所有人的消息,发给指定人的消息不处理 575 //只处理发送给所有人的消息,发给指定人的消息不处理
575 return; 576 return;
@@ -588,25 +589,24 @@ class VideoApe extends Ape { @@ -588,25 +589,24 @@ class VideoApe extends Ape {
588 "timestamp": 1505886364100, 589 "timestamp": 1505886364100,
589 "recordTimestamp": 27 590 "recordTimestamp": 27
590 }*/ 591 }*/
591 - /* switch (videoReceivePdu.actionType){ 592 + switch (videoReceivePdu.actionType){
592 case ApeConsts.MEDIA_ACTION_PUBLISH_STATUS: 593 case ApeConsts.MEDIA_ACTION_PUBLISH_STATUS:
593 //webRtc的推流和停止推流的消息 594 //webRtc的推流和停止推流的消息
594 let videoInfo={}; 595 let videoInfo={};
595 let videoData=data; 596 let videoData=data;
596 - videoData.streamId=data.channel+"_"+data.userId+"_"+data.uid+"_"+(parseInt(parseInt(data.timestamp)/1000));  
597 if(data.status==1){ 597 if(data.status==1){
598 - loger.log("播放文件->", "userName",data.userName,"uid",data.uid,"时间:"+new Date(1505886364100).toString()); 598 + loger.log("播放文件->", videoData);
599 videoInfo=this.packVideoInfoAndSendToClient(videoData,seek); 599 videoInfo=this.packVideoInfoAndSendToClient(videoData,seek);
600 this._emit(MessageTypes.VIDEO_PLAY, videoInfo); 600 this._emit(MessageTypes.VIDEO_PLAY, videoInfo);
601 }else if(data.status==0){ 601 }else if(data.status==0){
602 - loger.log("停止播放文件->", "userName",data.userName,"uid",data.uid,"时间:"+new Date(1505886364100).toString()); 602 + loger.log("停止播放文件->", videoData);
603 videoInfo=this.packVideoInfoAndSendToClient(videoData,seek); 603 videoInfo=this.packVideoInfoAndSendToClient(videoData,seek);
604 this._emit(MessageTypes.VIDEO_STOP, videoInfo); 604 this._emit(MessageTypes.VIDEO_STOP, videoInfo);
605 } 605 }
606 break; 606 break;
607 default: 607 default:
608 break 608 break
609 - }*/ 609 + }
610 610
611 }else { 611 }else {
612 //判断接收者的id,如果不是0,并且也不是自己的nodeId,那么消息不做处理 612 //判断接收者的id,如果不是0,并且也不是自己的nodeId,那么消息不做处理
@@ -835,6 +835,7 @@ class VideoApe extends Ape { @@ -835,6 +835,7 @@ class VideoApe extends Ape {
835 for (let i in this.mediaModule.mediaChannels) { 835 for (let i in this.mediaModule.mediaChannels) {
836 let channelInfo = this.mediaModule.mediaChannels[i]; 836 let channelInfo = this.mediaModule.mediaChannels[i];
837 if (channelInfo) { 837 if (channelInfo) {
  838 + channelInfo.nodeId = channelInfo.fromNodeId;//发送消息的人员nodeId
838 if (channelInfo.status == ApeConsts.CHANNEL_STATUS_RELEASED) { 839 if (channelInfo.status == ApeConsts.CHANNEL_STATUS_RELEASED) {
839 channelInfo.owner = 0; 840 channelInfo.owner = 0;
840 } else { 841 } else {
@@ -877,7 +878,7 @@ class VideoApe extends Ape { @@ -877,7 +878,7 @@ class VideoApe extends Ape {
877 packPduModel.userId = _param.userId || "0"; 878 packPduModel.userId = _param.userId || "0";
878 packPduModel.mediaType = _param.mediaType || ApeConsts.MEDIA_TYPE_VIDEO; 879 packPduModel.mediaType = _param.mediaType || ApeConsts.MEDIA_TYPE_VIDEO;
879 packPduModel.timestamp = _param.timestamp || 0; 880 packPduModel.timestamp = _param.timestamp || 0;
880 - packPduModel.fromNodeId = _param.nodeId || GlobalConfig.nodeId; 881 + packPduModel.fromNodeId = _param.nodeId||_param.fromNodeId || GlobalConfig.nodeId;
881 packPduModel.userName = _param.userName || GlobalConfig.userName; 882 packPduModel.userName = _param.userName || GlobalConfig.userName;
882 packPduModel.toNodeId = 0; 883 packPduModel.toNodeId = 0;
883 packPduModel.userRole = _param.userRole || GlobalConfig.userRole; 884 packPduModel.userRole = _param.userRole || GlobalConfig.userRole;
@@ -885,12 +886,12 @@ class VideoApe extends Ape { @@ -885,12 +886,12 @@ class VideoApe extends Ape {
885 packPduModel.screenHeight = _param.screenHeight || GlobalConfig.screenHeight; 886 packPduModel.screenHeight = _param.screenHeight || GlobalConfig.screenHeight;
886 packPduModel.deviceType = _param.deviceType || GlobalConfig.deviceType; 887 packPduModel.deviceType = _param.deviceType || GlobalConfig.deviceType;
887 packPduModel.optionJsonData = GlobalConfig.optionJsonData; 888 packPduModel.optionJsonData = GlobalConfig.optionJsonData;
888 - loger.log('packPdu->', packPduModel); 889 + loger.log('packPdu--------------->', packPduModel);
889 return packPduModel; 890 return packPduModel;
890 } 891 }
891 892
892 unPackPdu(owner, itemIdx, itemData) { 893 unPackPdu(owner, itemIdx, itemData) {
893 - loger.log("unPackPdu->owner:", owner, "itemIdx->", itemIdx); 894 + loger.log("unPackPdu-------------->owner:", owner, "itemIdx->", itemIdx);
894 if (owner == null || itemIdx == null || itemData == null) { 895 if (owner == null || itemIdx == null || itemData == null) {
895 this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG); 896 this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
896 return null; 897 return null;
@@ -718,6 +718,7 @@ class WebRtcApe extends Emiter { @@ -718,6 +718,7 @@ class WebRtcApe extends Emiter {
718 updateAllVideoSize() { 718 updateAllVideoSize() {
719 $("." + this.localWebRtcVideoClass).css("width", this.localVideoWidth * this.videoScale); 719 $("." + this.localWebRtcVideoClass).css("width", this.localVideoWidth * this.videoScale);
720 $("." + this.localWebRtcVideoClass).css("height", this.localVideoHeight * this.videoScale); 720 $("." + this.localWebRtcVideoClass).css("height", this.localVideoHeight * this.videoScale);
  721 + $("#videoOwnerName_" + this.uid).css("width", this.localVideoWidth * this.videoScale);
721 722
722 $("." + this.hostWebRtcVideoClass).css("width", this.hostRemoteVideoWidth * this.videoScale); 723 $("." + this.hostWebRtcVideoClass).css("width", this.hostRemoteVideoWidth * this.videoScale);
723 $("." + this.hostWebRtcVideoClass).css("height", this.hostRemoteVideoHeight * this.videoScale); 724 $("." + this.hostWebRtcVideoClass).css("height", this.hostRemoteVideoHeight * this.videoScale);
@@ -206,7 +206,7 @@ class MCU extends Emiter { @@ -206,7 +206,7 @@ class MCU extends Emiter {
206 206
207 // 主动断开MCU连接 207 // 主动断开MCU连接
208 leaveMCU() { 208 leaveMCU() {
209 - loger.log('leaveMCU'); 209 + loger.log('断开MCU连接');
210 GlobalConfig.setCurrentStatus(GlobalConfig.statusCode_3); 210 GlobalConfig.setCurrentStatus(GlobalConfig.statusCode_3);
211 GlobalConfig.classJoinSuccess = false; 211 GlobalConfig.classJoinSuccess = false;
212 if( this._everSocket){ 212 if( this._everSocket){