JCMsgHandler = function(){ this.init=function(handler){ this._handobj = handler; this.msglst = []; this.deltatime = 0; this.delaytime = 500; this.rate = 60; } this.run=function (dt){ var self = this; this.msglst.forEach(element => { element.delaycount--; if(element.delaycount <= 0){ self._handobj && self._handobj.handleData && self._handobj.handleData(element); element.handled = true; } }); var i = this.msglst.length; while(i--){ if(this.msglst[i].handled){ this.msglst.splice(i,1); } } } this.pushMsg =function(obj){ var msg = this.msgclone(obj); var subobj = JSON.parse(msg.content); var tm = subobj.timestamp + this.deltatime; var d = new Date(); msg.delaycount = Math.ceil((d.getTime() - tm) / this.rate); msg.handled = false; this.msglst.push(msg); } this.msgclone=function(obj) { // Handle the 3 simple types, and null or undefined if (null == obj || "object" != typeof obj) return obj; // Handle Date if (obj instanceof Date) { var copy = new Date(); copy.setTime(obj.getTime()); return copy; } // Handle Array if (obj instanceof Array) { var copy = []; var len = obj.length; for (var i = 0; i < len; ++i) { copy[i] = this.msgclone(obj[i]); } return copy; } // Handle Object if (obj instanceof Object) { var copy = {}; for (var attr in obj) { if (obj.hasOwnProperty(attr)) copy[attr] = this.msgclone(obj[attr]); } return copy; } throw new Error("Unable to copy obj! Its type isn't supported."); } this.setDeltaTime=function(dt){ this.deltatime = dt; } this.setFramerate=function(rt){ this.rate = rt; } }; MsgEnum = function(){ this.c2sMsg = function(){ return this.msg.CMMessageId_e; } this.s2cMsg = function(){ return this.msg.SMMessageId_e; } this.downloadFile=function(fileName, registrationHandler) { var ajax = new XMLHttpRequest(); ajax.onload = registrationHandler; ajax.open("GET", "./" + fileName, true); ajax.responseType = "text"; ajax.overrideMimeType("text/plain; charset=x-user-defined"); ajax.send(null); } this.init=function(cb){ this.msg = null; var protoFile = "./resources/messages.proto"; this.downloadFile(protoFile, function ( res){ if(res.target.status===200){ var Builder = ProtoBuf.protoFromString(res.target.response); this.msg = Builder.build("kingsomevs"); cb && cb(); } }.bind(this)); } }; MsgObj =function(arrbuf, len){ var handbuf = new Uint8Array(arrbuf); this._id = handbuf[2] | ((handbuf[3] << 8) & 0xFF); var msgbuf = handbuf.subarray(8, 8+len); this.u8buf = new Uint8Array(len); this.u8buf.set(msgbuf); this.id=function(){ return this._id; } this.data=function(){ return this.u8buf.buffer; } }; const BUFF_SIZE = 1024; MsgBuffer =function(){ this.init=function(){ this.BUFF_SZ = BUFF_SIZE; this.buffer = new ArrayBuffer(BUFF_SIZE); this.handrecvbuf = new Uint8Array(this.buffer); this.usedlen = 0; } this.pushData=function(buf){ if(!buf || !buf.byteLength || buf.byteLength <= 0){ return; } var len = buf.byteLength; while (this.usedlen + len >= this.BUFF_SZ){ console.log("msgbuffer enlarge *2!" + this.BUFF_SZ + "|" + this.usedlen); this.BUFF_SZ *= 2; var newBuffer = new ArrayBuffer(this.BUFF_SZ); if(this.usedlen>0){ var oldbuf = new Uint8Array(this.buffer); var newbuf = new Uint8Array(newBuffer); var subold = oldbuf.subarray(this.usedlen); newbuf.set(subold); } this.buffer = newBuffer; this.handrecvbuf = new Uint8Array(this.buffer); } var subbuf = this.handrecvbuf.subarray(this.usedlen); var hbuf = new Uint8Array(buf); subbuf.set(hbuf); this.usedlen += len; } this.hasPackMsg=function(){ if(this.usedlen < 8){//len(2byte) + id(2byte) + code(4byte) return false; } var handbuf = this.handrecvbuf; var num = handbuf[0] | ((handbuf[1] << 8)); if(this.usedlen < num + 8){ return false; } return true; } this.popPackMsg=function(){ var handbuf = this.handrecvbuf; var num = handbuf[0] | ((handbuf[1] << 8)); var id = handbuf[2] | ((handbuf[3] << 8)); var msg = new MsgObj(handbuf.buffer, num); // console.log("[popPackMsg]:"+num+","+id); //start update param var n = num + 8; if(this.usedlen > n){ this.buffer.copyWithin(0, n, this.usedlen); } this.usedlen -= n; return msg; } this.buildPackMsg=function(msgid, arrbuf){ var len = arrbuf? arrbuf.byteLength: 0; var num = len + 8; var bytebuf = new Uint8Array(num); bytebuf[0] = len > 0? len & 0xFF: 0; bytebuf[1] = len > 0? (len >> 8) & 0xFF: 0; bytebuf[2] = msgid & 0xFF; bytebuf[3] = (msgid >> 8) & 0xFF; bytebuf[4] = 0xAA; bytebuf[5] = 0xCC; bytebuf[6] = 0xBB; bytebuf[7] = 0xAA; //var handbuf = new Uint16Array(bytebuf.buffer); //handbuf[0] = num; //handbuf[1] = msgid; //var dwordbuf = new Uint32Array(handbuf.buffer); //dwordbuf[1] = 0xFFCCAABB; if(arrbuf){ var oldbuf = new Uint8Array(arrbuf); bytebuf.set(oldbuf, 8); } return bytebuf.buffer; } } MessageVo = function(){ this.update= function (mId, proto, cb) { this.msgId = mId; this.protoData = proto; this.callBack = cb; return this; } }; Socket = function(callback, hosturl){ //this._super(); this._sock = null; this._cb = callback; this._host = hosturl; this._sendqueue = []; this._isclosed = false; var self = this; if(typeof(WebSocket) != 'undefined'){ //cocos creator websocket this._sock = new WebSocket(hosturl); this._sock.binaryType = 'arraybuffer'; this._sock.onmessage = function (event) { //console.log("socket on message"); self._cb.onMessage && self._cb.onMessage(event.data); }; this._sock.onopen = function (event) { console.log("Create the socket is success :"+self._host ); while (self._sendqueue.length > 0) { self._sock.send(self._sendqueue.pop()); } self._cb.onOpen && self._cb.onOpen(self._host); }; this._sock.onclose = function (e) { self._isclosed = true; self._cb.onClose && self._cb.onClose(self._host,e); console.log("socket on closed ,code:"+e.code+"(1000:NORMAL,1005:CLOSE_NO_STATUS,1006:RESET,1009:CLOSE_TOO_LARGE) msg:"+e.reason); }; this._sock.onerror = function (event) { console.log("socket on error ,event:"+JSON.stringify(event)); self._cb.onError && self._cb.onError(self._host,event); if(!self._isclosed){ self.close(); } }; } this.send=function(msg){ var n = this._sock.readyState; //console.log("sock readyState:" + n); if(n == WebSocket.CONNECTING){ this._sendqueue.push(msg); }else if(n == WebSocket.OPEN){ this._sock.send(msg); }else{ this._sock.onclose({code:-n}); } } this.close=function(){ //todo: this._sock && this._sock.close(); } } WS = function(){ this.url ="" this.sock = null; this.setCallback=function(cb){ this.cb = cb; } // LIFE-CYCLE CALLBACKS: // onLoad () {}, this.start=function () { } // update (dt) {}, this.setHost=function(url){ this.url = url; } this.connect=function(){ if(this.sock){ this.sock = null; } this.sock = new Socket(this, this.url); } this.send=function(msg){ this.sock && this.sock.send(msg); } this.disconnect=function(){ this.sock && this.sock.close(); } this.onOpen=function(url){ this.cb && this.cb.onConnect(); } this.onClose=function(url, errevent){ this.cb && this.cb.onClose(errevent); } this.onError=function(url, errevent){ this.cb && this.cb.onError(errevent); } this.onMessage=function(msg){ this.cb && this.cb.onRecv(msg); } } // var MessageBuffer = require('msgbuffer'); // var MessageVo = require('messageVo'); // var WS = require('webclient'); //var Base64 = require('base64'); MsgManager = function(){ this.init=function() { this._sendMsgQueue = {}; this._recvMsgQueue = {}; this._ws = new WS(); this._ws.setCallback(this); this._buf = new MsgBuffer(); this._buf.init(); this._isconnected = false; this._netcb = null; } this.initSendMsg=function(msgId, proto) { var vo = new MessageVo(); vo.update(msgId, proto, null); this._sendMsgQueue[msgId] = vo; } this.initRecvMsg=function(msgId, proto, callBack) { var vo = new MessageVo(); vo.update(msgId, proto, callBack); this._recvMsgQueue[msgId] = vo; } this.sendMsg=function(msgId, msg) { var msgVo = this._sendMsgQueue[msgId]; //console.log(JSON.stringify(msgVo)); var data = msg? msgVo.protoData.encode(msg).toArrayBuffer():null; var pkgdata = this._buf.buildPackMsg(msgId, data); if(pkgdata && this._ws){ //console.log(Base64.arrayBufferToBase64(pkgdata)); //console.log("[sendmsg]:"+msgId + ":" + msg); this._ws.send(pkgdata); } } this.parseMsg=function(msgId, msgByte) { // console.log("信息回调id:" + msgId+ ":"+msgByte); var msgVo = this._recvMsgQueue[msgId]; if(msgVo == undefined){ console.log("[undefined msg]"+msgId); return; } var msg = msgVo.protoData.decode(msgByte); if(msgVo.callBack) { //统一处理errorcode if(msg && msg.errorcode){ //TODO 统一处理errorcode //1:根据errorcode获取对应的文本信息 //2:提示给用户 } msgVo.callBack(msg); } } this.isConnected=function(){ return this._isconnected; } this.connectNet= function(host, cb){ console.log("[connectNet]"); this._netcb = cb; //this._ws.setHost(host); this._ws.url = host; this._ws.connect(); } this.closeNet= function(){ this._ws.disconnect(); } this.onConnect=function(){ this._isconnected = true; if(this._netcb){ this._netcb("connect", 0); } } this.onClose=function(err){ this._isconnected = false; if(this._netcb){ var n = err.code? err.code: 0; this._netcb("close", n); } } this.onError=function(err){ this._isconnected = false; if(this._netcb){ var n = err.code? err.code: 0; this._netcb("error", n); } } this.onRecv=function(msg){ // console.log("onrecv"); this._buf.pushData(msg); while(this._buf.hasPackMsg()){ var msg = this._buf.popPackMsg(); this.parseMsg(msg.id(), msg.data()); } } } // var MsgMan = require('./net/msgmanager'); // var MsgIDEnum = require('./net/msgenum'); // var ProtoBuf = require("./net/proto/protobuf"); // var MsgHandler = require("./jcmsghandler"); const state_enum ={ none: 0, initing: 1, inited: 2, logining: 3, logined: 4, loginouting: 5, loginouted: 6, joining: 7, joined: 8, leaving: 9, leaved: 10, }; UserInfo = function(){ this.channelID="" this.platForm="" this.gameID="" this.deviceID="" this.userID="" this.token="" this.roomID="" this.init_state=state_enum.none this.login_state= state_enum.none this.room_state= state_enum.none }; const url_offical = "wss://matchvs-al.kingsome.cn/websocket"; const url_test = "wss://matchvs-al.kingsome.cn/websocket";//"ws://118.31.73.76:81/websocket"; JCMatchVS = function(){ // LIFE-CYCLE CALLBACKS: this.onLoad =function() { this.userinfo = {}; this.rsp = null; this.userinfo = new UserInfo(); this.reconnectcount = 0; this.reconnectmax = 5; this.msgctrl = new JCMsgHandler(); } this.run=function(dt){ this.msgctrl.run(dt); } // update (dt) {}, this.__classCreate=function(){ this.onLoad(); if(!this.msgManager){ this.msgManager = new MsgManager(); this.msgManager.init(); } if(!this.msgIDs){ this.msgIDs = new MsgEnum(); } } this.init=function(response, channel, platform, gameid, deviceid) { this.rsp = response; this.userinfo.channelID = channel; this.userinfo.platForm = platform; this.userinfo.gameID = gameid; this.userinfo.deviceID = deviceid; this.userinfo.init_state = state_enum.initing; this.msgIDs.init(function(err){ this.initMsgHandler(this.msgIDs.c2sMsg(), this.msgIDs.s2cMsg()); }.bind(this)); this.msgctrl.init(response); } this.downloadFile=function(fileName, registrationHandler) { var ajax = new XMLHttpRequest(); ajax.onload = registrationHandler; ajax.open("GET", "./" + fileName, true); ajax.responseType = "text"; ajax.overrideMimeType("text/plain; charset=x-user-defined"); ajax.send(null); } this.initMsgHandler=function(c2sMsg, s2cMsg){ var protoFile = "./resources/kingsomevs.proto"; this.downloadFile(protoFile, function ( res){ var Builder = ProtoBuf.protoFromString(res.target.response); var msg = Builder.build("kingsomevs"); this.msgManager.initSendMsg(c2sMsg._CMLogin, msg.CMLogin); this.msgManager.initRecvMsg(s2cMsg._SMLogin, msg.SMLogin, this.onLoginRsp.bind(this)); this.msgManager.initSendMsg(c2sMsg._CMCreateRoom, msg.CMCreateRoom); this.msgManager.initRecvMsg(s2cMsg._SMCreateRoom, msg.SMCreateRoom, this.onCreateRoomRsp.bind(this)); this.msgManager.initSendMsg(c2sMsg._CMJoinRandomRoom, msg.CMJoinRandomRoom); this.msgManager.initRecvMsg(s2cMsg._SMJoinRandomRoom, msg.SMJoinRandomRoom, this.onJoinRoomRsp.bind(this)); this.msgManager.initSendMsg(c2sMsg._CMJoinRoom, msg.CMJoinRoom); this.msgManager.initRecvMsg(s2cMsg._SMJoinRoom, msg.SMJoinRoom, this.onJoinRoomRsp.bind(this)); this.msgManager.initSendMsg(c2sMsg._CMKickPlayer, msg.CMKickPlayer); this.msgManager.initRecvMsg(s2cMsg._SMKickPlayer, msg.SMKickPlayer, this.onKickPlayerRsp.bind(this)); this.msgManager.initSendMsg(c2sMsg._CMJoinOver, msg.CMJoinOver); this.msgManager.initRecvMsg(s2cMsg._SMJoinOver, msg.SMJoinOver, this.onJoinOverRsp.bind(this)); this.msgManager.initSendMsg(c2sMsg._CMJoinOpen, msg.CMJoinOpen); this.msgManager.initRecvMsg(s2cMsg._SMJoinOpen, msg.SMJoinOpen, this.onJoinOpenRsp.bind(this)); this.msgManager.initSendMsg(c2sMsg._CMGameStart, msg.CMGameStart); this.msgManager.initRecvMsg(s2cMsg._SMGameStart, msg.SMGameStart, this.onGameStartRsp.bind(this)); this.msgManager.initSendMsg(c2sMsg._CMSendRoomEvent, msg.CMSendRoomEvent); this.msgManager.initRecvMsg(s2cMsg._SMSendRoomEvent, msg.SMSendRoomEvent, this.onSendRoomEvtRsp.bind(this)); this.msgManager.initSendMsg(c2sMsg._CMLeaveRoom, msg.CMLeaveRoom); this.msgManager.initRecvMsg(s2cMsg._SMLeaveRoom, msg.SMLeaveRoom, this.onLeaveRoomRsp.bind(this)); this.msgManager.initSendMsg(c2sMsg._CMSetFrameSync, msg.CMSetFrameSync); this.msgManager.initRecvMsg(s2cMsg.SMSetFrameSync, msg.SMSetFrameSync, this.onSetFrameSyncRsp.bind(this)); this.msgManager.initSendMsg(c2sMsg._CMPing, msg.CMPing); this.msgManager.initRecvMsg(s2cMsg._SMPing, msg.SMPing, this.onPing.bind(this)); this.msgManager.initSendMsg(c2sMsg._CMSendFrameEvent, msg.CMSendFrameEvent); this.msgManager.initRecvMsg(s2cMsg._SMSendFrameEvent, msg.SMSendFrameEvent, this.onSendFrameEvtRsp.bind(this)); this.msgManager.initSendMsg(c2sMsg._CMReConnect, msg.CMReConnect); this.msgManager.initRecvMsg(s2cMsg._SMReConnect, msg.SMReConnect, this.onReConnectRsp.bind(this)); this.msgManager.initRecvMsg(s2cMsg._SMRoomPeerJoinNotify, msg.SMRoomPeerJoinNotify, this.onJoinRoomNotify.bind(this)); this.msgManager.initRecvMsg(s2cMsg._SMRoomKickPlayerNotify, msg.SMRoomKickPlayerNotify, this.onKickNotify.bind(this)); this.msgManager.initRecvMsg(s2cMsg._SMRoomEventNotify, msg.SMRoomEventNotify, this.onRoomEvtNotify.bind(this)); this.msgManager.initRecvMsg(s2cMsg._SMRoomPeerLeaveNotify, msg.SMRoomPeerLeaveNotify, this.onLeaveRoomNotify.bind(this)); this.msgManager.initRecvMsg(s2cMsg._SMFrameEventUpdateNotify, msg.SMFrameEventUpdateNotify, this.onFrameUpdateNotify.bind(this)); this.msgManager.initRecvMsg(s2cMsg._SMRoomDisbandNotify, msg.SMRoomDisbandNotify, this.onRoomDestoryNotify.bind(this)); this.msgManager.initRecvMsg(s2cMsg._SMJoinOverNotify, msg.SMJoinOverNotify, this.onJoinOverNotify.bind(this)); this.msgManager.initRecvMsg(s2cMsg._SMJoinOpenNotify, msg.SMJoinOpenNotify, this.onJoinOpenNotify.bind(this)); this.msgManager.initRecvMsg(s2cMsg._SMNetWorkStateNotify, msg.SMNetWorkStateNotify, this.onNetWorkStateNotify.bind(this)); this.msgManager.initSendMsg(c2sMsg._CMSetRoomParam, msg.CMSetRoomParam); this.msgManager.initRecvMsg(s2cMsg._SMSetRoomParam, msg.SMSetRoomParam, this.onSMSetRoomParam.bind(this)); this.msgManager.initRecvMsg(s2cMsg._SMRoomMergeNotify, msg.SMRoomMergeNotify, this.onSMRoomMergeNotify.bind(this)); this.msgManager.initSendMsg(c2sMsg._CMResetRoom, msg.CMResetRoom); this.msgManager.initRecvMsg(s2cMsg._SMResetRoom, msg.SMResetRoom, this.onSMResetRoom.bind(this)); this.userinfo.init_state = state_enum.inited; this.rsp && this.rsp.initResponse({ status: 0 }); }.bind(this)); } this.setUserId=function(userid){ this.userinfo.userID = userid; } this.setToken=function(token){ this.userinfo.token = token; } this. _checkInitState=function(){ if(this.userinfo.init_state != state_enum.inited){ if(this.userinfo.init_state == state_enum.none) return -2; if(this.userinfo.init_state == state_enum.initing) return -3; } return 0; } this._checkLoginState=function(currstate){ if(this.userinfo.login_state == state_enum.none && currstate != state_enum.logining){ return -4; } if(this.userinfo.login_state == state_enum.logined && currstate == state_enum.logining){ return -5; } if(this.userinfo.login_state == state_enum.logining && this.userinfo.login_state != currstate){ return -6; } if(this.userinfo.login_state == state_enum.loginouting && this.userinfo.login_state != currstate){ return -6; } return 0; } this._checkRoomState=function(currstate){ if(this.userinfo.room_state == state_enum.none && currstate != state_enum.joining){ return -9; } if(this.userinfo.room_state == state_enum.joined && currstate == state_enum.joining){ return -8; } if(this.userinfo.room_state == state_enum.joining && this.userinfo.room_state != currstate){ return -7; } if(this.userinfo.room_state != state_enum.joined && currstate == state_enum.leaving){ return -6; } return 0; } this._netCallback=function(msg, err){ if(msg == "connect"){ this.reconnectcount = 0; var res = { status: 0, eventtype: msg }; this.rsp && this.rsp.netResponse(res); if(this.userinfo.roomID != ""){ this.reconnect(); }else{ this.login(); } //this.msgManager.sendMsg(this.msgIDs.c2sMsg()._CMLogin, param); }else{ if(msg == "close"){ if(this.reconnectcount > this.reconnectmax){ var res = { status: err, eventtype: msg }; this.rsp && this.rsp.netResponse(res); this._cleanState(); }else{ var self = this; this.scheduleOnce(function(dt){ self.reconnectcount++; self.reconnectNet(); var res = { status: -1, eventtype: "reconnect" }; this.rsp && this.rsp.netResponse(res); }, 2); } } } } this._cleanState=function(){ this.userinfo.login_state = state_enum.none; this.userinfo.room_state = state_enum.none; this.userinfo.roomID = ""; } this._handleDeltaTime=function(createtime, passtime){ var ts = createtime * 1000 + passtime; var d = new Date(); var ct = d.getTime() - ts; this.msgctrl.setDeltaTime(ct); } this.isInited=function() { return this.userinfo.init_state == state_enum.inited; }, this.isLogined=function() { return this.userinfo.login_state == state_enum.logined; } this.isInRoom=function (){ return this.userinfo.room_state == state_enum.joined; } this.isConnected=function (){ return this.msgManager.isConnected(); } this.reconnectNet=function(){ //this._cleanState(); var url = this.userinfo.platForm == "alpha"? url_test: url_offical; this.msgManager.connectNet(url, this._netCallback.bind(this)); } this.disconnect=function(){ // if(this.msgManager.isConnected()){ // this.msgManager.closeNet(); // } this.msgManager.closeNet(); } this.login=function(){ var st = state_enum.logining; var rs = this._checkInitState(); if(rs != 0){ return rs; } rs = this._checkLoginState(st); if(rs != 0){ return rs; } this.userinfo.login_state = st; var param = { account_id: this.userinfo.userID, session_id: this.userinfo.token, game_id: this.userinfo.gameID, device_id: this.userinfo.deviceID }; if(!this.isConnected()){ this.reconnectNet(); }else{ this.msgManager.sendMsg(this.msgIDs.c2sMsg()._CMLogin, param); } this._log && this._log.logVS_login(); return 0; } this.loginOut=function(){ this.userinfo.login_state = state_enum.none; var param = { status: 0 }; this.rsp && this.rsp.logoutResponse(param); } this.createRoom=function(roomname, maxplayer, userdesc){ var rs = this._checkInitState(); if(rs != 0){ return rs; } rs = this._checkLoginState(this.userinfo.login_state); if(rs != 0){ return rs; } var st = state_enum.joining; rs = this._checkRoomState(st); if(rs != 0){ return rs; } this.userinfo.room_state = st; var param = { create_room_info:{ room_name: roomname, max_player: maxplayer, allow_merge: 0, auto_exit_room : 1, }, user_profile: userdesc }; this.msgManager.sendMsg(this.msgIDs.c2sMsg()._CMCreateRoom, param); return 0; } this.joinRoom=function(roomid, userdesc){ var rs = this._checkInitState(); if(rs != 0){ return rs; } rs = this._checkLoginState(this.userinfo.login_state); if(rs != 0){ return rs; } var st = state_enum.joining; rs = this._checkRoomState(st); if(rs != 0){ return rs; } this.userinfo.room_state = st; var param = { room_id: roomid, user_profile: userdesc }; this.msgManager.sendMsg(this.msgIDs.c2sMsg()._CMJoinRoom, param); window.log && window.log.logVS_joinRoom(roomid, userdesc, false); return 0; } this.joinRandomRoom=function(maxplayer, userdesc){ var rs = this._checkInitState(); if(rs != 0){ return rs; } rs = this._checkLoginState(this.userinfo.login_state); if(rs != 0){ return rs; } var st = state_enum.joining; rs = this._checkRoomState(st); if(rs != 0){ return rs; } this.userinfo.room_state = st; var param = { max_player: maxplayer, user_profile: userdesc }; this.msgManager.sendMsg(this.msgIDs.c2sMsg()._CMJoinRandomRoom, param); window.log && window.log.logVS_joinRoom('', userdesc, true); return 0; } this.leaveRoom=function(content){ var rs = this._checkInitState(); if(rs != 0){ return rs; } rs = this._checkLoginState(this.userinfo.login_state); if(rs != 0){ return rs; } var st = state_enum.leaving; rs = this._checkRoomState(st); if(rs != 0){ return rs; } this.userinfo.room_state = st; var param = { custom_data: content }; this.msgManager.sendMsg(this.msgIDs.c2sMsg()._CMLeaveRoom, param); window.log && window.log.logVS_leaveRoom(this.userinfo.roomID, content); return 0; } this.joinOver=function(content){ var rs = this._checkInitState(); if(rs != 0){ return rs; } rs = this._checkLoginState(this.userinfo.login_state); if(rs != 0){ return rs; } var st = state_enum.none; rs = this._checkRoomState(st); if(rs != 0){ return rs; } var param = { custom_data: content }; this.msgManager.sendMsg(this.msgIDs.c2sMsg()._CMJoinOver, param); window.log && window.log.logVS_gameReady(this.userinfo.roomID, content, true); return 0; } this.joinOpen=function(content){ var rs = this._checkInitState(); if(rs != 0){ return rs; } rs = this._checkLoginState(this.userinfo.login_state); if(rs != 0){ return rs; } var st = state_enum.none; rs = this._checkRoomState(st); if(rs != 0){ return rs; } var param = { custom_data: content }; this.msgManager.sendMsg(this.msgIDs.c2sMsg()._CMJoinOpen, param); window.log && window.log.logVS_gameReady(this.userinfo.roomID, content, false); return 0; } this.gameStart=function(content){ var rs = this._checkInitState(); if(rs != 0){ return rs; } rs = this._checkLoginState(this.userinfo.login_state); if(rs != 0){ return rs; } var st = state_enum.none; rs = this._checkRoomState(st); if(rs != 0){ return rs; } var param = { custom_data: content }; this.msgManager.sendMsg(this.msgIDs.c2sMsg()._CMGameStart, param); window.log && window.log.logVS_gameStart(this.userinfo.roomID, content); return 0; } this.kickPlayer=function(userid, content){ var rs = this._checkInitState(); if(rs != 0){ return rs; } rs = this._checkLoginState(this.userinfo.login_state); if(rs != 0){ return rs; } var st = state_enum.none; rs = this._checkRoomState(st); if(rs != 0){ return rs; } var param = { account_id: userid, custom_data: content }; this.msgManager.sendMsg(this.msgIDs.c2sMsg()._CMKickPlayer, param); return 0; } this.sendRoomMsg=function(msg){ var d = new Date(); msg.timestamp = d.getTime() - this.msgctrl.deltatime + this.msgctrl.delaytime; this.sendRoomEvent(JSON.stringify(msg)); } this.sendRoomEvent=function(msg){ console.log("[sendRoomEvent]"+msg); var rs = this._checkInitState(); console.log("rs"+rs); if(rs != 0){ return rs; } rs = this._checkLoginState(this.userinfo.login_state); if(rs != 0){ return rs; } var st = state_enum.none; rs = this._checkRoomState(st); if(rs != 0){ return rs; } var param = { custom_data: msg }; this.msgManager.sendMsg(this.msgIDs.c2sMsg()._CMSendRoomEvent, param); return 0; } this.sendFrameEvent=function(msg){ var rs = this._checkInitState(); if(rs != 0){ return rs; } rs = this._checkLoginState(this.userinfo.login_state); if(rs != 0){ return rs; } var st = state_enum.none; rs = this._checkRoomState(st); if(rs != 0){ return rs; } var param = { custom_data: msg }; this.msgManager.sendMsg(this.msgIDs.c2sMsg()._CMSendFrameEvent, param); return 0; } this.setFrameSync=function(framerate){ var rs = this._checkInitState(); if(rs != 0){ return rs; } rs = this._checkLoginState(this.userinfo.login_state); if(rs != 0){ return rs; } var st = state_enum.none; rs = this._checkRoomState(st); if(rs != 0){ return rs; } var param = { frame_rate: framerate }; this.msgManager.sendMsg(this.msgIDs.c2sMsg()._CMSetFrameSync, param); return 0; } this.heart=function(){ this.msgManager.sendMsg(this.msgIDs.c2sMsg()._CMPing, null); return 0; } this.reconnect=function(){ var rs = this._checkInitState(); if(rs != 0){ return rs; } var param = { room_id: this.userinfo.roomID, account_id: this.userinfo.userID, session_id: this.userinfo.token }; this.msgManager.sendMsg(this.msgIDs.c2sMsg()._CMReConnect, param); return 0; } this.onLoginRsp=function(msg){ console.log("[onLoginRsp]"+JSON.stringify(msg)); var err = 0; var errstr = ""; if(msg.result == null || msg.result.error_code == 0){ this.userinfo.login_state = state_enum.logined; this.userinfo.roomID = msg.room_id? msg.room_id: ""; }else{ err = msg.result.error_code; errstr = msg.result.error_msg; this.userinfo.login_state = state_enum.none; this.userinfo.roomID = ""; } var param = { status: err, statusmsg: errstr, roomID: this.userinfo.roomID }; this.rsp && this.rsp.loginResponse(param); } this.onLoginOutRsp=function(msg){ console.log("[onLoginOutRsp]"+JSON.stringify(msg)); var err = 0; var errstr = ""; if(msg.result == null || msg.result.error_code == 0){ this.userinfo.login_state = state_enum.none; }else{ err = msg.result.error_code; errstr = msg.result.error_msg; this.userinfo.login_state = state_enum.logined; } var param = { status: err, statusmsg: errstr, }; this.rsp && this.rsp.logoutResponse(param); } this.onCreateRoomRsp=function(msg){ console.log("[onCreateRoomRsp]"+JSON.stringify(msg)); var err = 0; var errstr = ""; if(msg.result == null || msg.result.error_code == 0){ this.userinfo.room_state = state_enum.joined; this.userinfo.roomID = msg.room_id? msg.room_id: ""; }else{ err = msg.result.error_code; errstr = msg.result.error_msg; this.userinfo.room_state = state_enum.none; window.log && window.log.logButtonClick('matchvs', msg.result, 'onCreateRoomRsp'); } var param = { status: err, statusmsg: errstr, roomID: msg.room_id? msg.room_id: "", owner: "", create_time: msg.create_time, room_info:msg.room_info, }; if(param.status == 0){ this._handleDeltaTime(param.create_time, 0); } this.rsp && this.rsp.createRoomResponse(param); } this.onJoinRoomRsp=function(msg){ console.log("[onJoinRoomRsp]"+JSON.stringify(msg)); var err = 0; var errstr = ""; if(msg.result == null ||msg.result.error_code == 0||msg.result.error_code == -3){ this.userinfo.room_state = state_enum.joined; this.userinfo.roomID = msg.room_info? msg.room_info.room_id: ""; }else{ err = msg.result.error_code; errstr = msg.result.error_msg; this.userinfo.room_state = state_enum.none; window.log && window.log.logButtonClick('matchvs', msg.result, 'onJoinRoomRsp'); } var lst = []; if(msg.room_user_info_list){ msg.room_user_info_list.forEach(element => { var obj = { userId: element.account_id, userProfile: element.user_profile }; lst.push(obj); }); } var param = { status: err, statusmsg: errstr, roomInfo:{ roomID: msg.room_info? msg.room_info.room_id: "", roomProperty: msg.room_info? msg.room_info.room_property: "", ownerId: msg.room_info? msg.room_info.owner_id: "", create_time: msg.room_info? msg.room_info.create_time: 0, _timestamp: msg.room_info? msg.room_info._timestamp: 0, robot_list:msg.room_info? msg.room_info.robot_list: 0 }, roomUserInfoList: lst }; if(param.status == 0||param.status == -3){ this._handleDeltaTime(param.roomInfo.create_time, param.roomInfo._timestamp); } this.rsp && this.rsp.joinRoomResponse(param); } this.onJoinOverRsp=function(msg){ console.log("[onJoinOverRsp]"+JSON.stringify(msg)); var err = 0; var errstr = ""; if(msg.result != null && msg.result.error_code != 0){ err = msg.result.error_code; errstr = msg.result.error_msg; window.log && window.log.logButtonClick('matchvs', msg.result, 'onJoinOverRsp'); } var param = { status: err, statusmsg: errstr, content: msg.custom_data? msg.custom_data: "" }; this.rsp && this.rsp.joinOverResponse(param); } this.onJoinOpenRsp=function(msg){ console.log("[onJoinOpenRsp]"+JSON.stringify(msg)); var err = 0; var errstr = ""; if(msg.result != null && msg.result.error_code != 0){ err = msg.result.error_code; errstr = msg.result.error_msg; window.log && window.log.logButtonClick('matchvs', msg.result, 'onJoinOpenRsp'); } var param = { status: err, statusmsg: errstr, content: msg.custom_data? msg.custom_data: "" }; this.rsp && this.rsp.joinOpenResponse(param); } this.onGameStartRsp=function(msg){ console.log("[onGameStartRsp]"+JSON.stringify(msg)); var err = 0; var errstr = ""; if(msg.result != null && msg.result.error_code != 0){ err = msg.result.error_code; errstr = msg.result.error_msg; window.log && window.log.logButtonClick('matchvs', msg.result, 'onGameStartRsp'); } var param = { status: err, statusmsg: errstr, content: msg.custom_data? msg.custom_data: "" }; this.rsp && this.rsp.gameStartResponse(param); } this.onLeaveRoomRsp=function(msg){ console.log("[onLeaveRoomRsp]"+JSON.stringify(msg)); var err = 0; var errstr = ""; if(msg.result == null || msg.result.error_code == 0 || msg.result.error_code == -1){ this.userinfo.room_state = state_enum.none; this.userinfo.roomID = ""; }else{ err = msg.result.error_code; errstr = msg.result.error_msg; this.userinfo.room_state = state_enum.joined; window.log && window.log.logButtonClick('matchvs', msg.result, 'onLeaveRoomRsp'); } var param = { status: err, statusmsg: errstr, roomID: msg.room_id? msg.room_id: "", userId: msg.account_id? msg.account_id: "", content: msg.custom_data? msg.custom_data: "" }; this.rsp && this.rsp.leaveRoomResponse(param); } this.onKickPlayerRsp=function(msg){ console.log("[onKickPlayerRsp]"+JSON.stringify(msg)); var err = 0; var errstr = ""; if(msg.result != null && msg.result.error_code != 0){ err = msg.result.error_code; errstr = msg.result.error_msg; } var param = { status: err, statusmsg: errstr, owner: "", userId: msg.account_id? msg.account_id: "", content: msg.custom_data? msg.custom_data: "" }; this.rsp && this.rsp.kickPlayerResponse(param); } this.onSendRoomEvtRsp=function(msg){ console.log("[onSendRoomEvtRsp]"+JSON.stringify(msg)); var err = 0; var errstr = ""; if(msg.result != null && msg.result.error_code != 0){ err = msg.result.error_code; errstr = msg.result.error_msg; } var param = { status: err, statusmsg: errstr, eventid: msg.event_id? msg.event_id: "", content: msg.custom_data? msg.custom_data: "", _timestamp: msg._timestamp? msg._timestamp: 0 }; this.rsp && this.rsp.sendEventResponse(param); } this.onSetFrameSyncRsp=function(msg){ console.log("[onSetFrameSyncRsp]"+JSON.stringify(msg)); var err = 0; var errstr = ""; if(msg.result != null && msg.result.error_code != 0){ err = msg.result.error_code; errstr = msg.result.error_msg; } var param = { status: err, statusmsg: errstr, framerate: msg.frame_rate? msg.frame_rate: 0 }; this.rsp && this.rsp.setFrameSyncResponse(param); } this.onSendFrameEvtRsp=function(msg){ // console.log("[onSendFrameEvtRsp]"+JSON.stringify(msg)); var err = 0; var errstr = ""; if(msg.result != null && msg.result.error_code != 0){ err = msg.result.error_code; errstr = msg.result.error_msg; } var param = { status: err, statusmsg: errstr, eventid: msg.event_id? msg.event_id: "" }; this.rsp && this.rsp.sendFrameEventResponse(param); } this.onReConnectRsp=function(msg){ console.log("[onReConnectRsp]"+JSON.stringify(msg)); var err = 0; var errstr = ""; if(msg.result != null){ if(msg.result.error_code != 0){ err = msg.result.error_code; errstr = msg.result.error_msg; this._cleanState(); window.log && window.log.logButtonClick('matchvs', msg.result, 'onReConnectRsp'); }else{ this.userinfo.roomID = msg.room_info? msg.room_info.room_id: ""; } } var lst = []; if(msg.room_user_info_list){ msg.room_user_info_list.forEach(element => { var obj = { userId: element.account_id, userProfile: element.user_profile }; lst.push(obj); }); } var param = { status: err, statusmsg: errstr, roomInfo:{ roomID: msg.room_info? msg.room_info.room_id: "", roomProperty: msg.room_info? msg.room_info.room_property: "", ownerId: msg.room_info? msg.room_info.owner_id: "", create_time: msg.room_info? msg.room_info.create_time: 0, _timestamp: msg.room_info? msg.room_info._timestamp: 0 }, roomUserInfoList: lst }; if(param.status == 0){ this._handleDeltaTime(param.roomInfo.create_time, param.roomInfo._timestamp); } this.rsp && this.rsp.reconnectResponse(param); } this.onRoomEvtNotify=function(msg){ console.log("[onRoomEvtNotify]"+JSON.stringify(msg)); var param = { srcUserId: msg.src_account_id? msg.src_account_id: "", eventid: msg.event_id? msg.event_id: "", content: msg.custom_data? msg.custom_data: "" }; this.msgctrl.pushMsg(param); this.rsp && this.rsp.sendRoomEvtNotify(param); } this.onKickNotify=function(msg){ console.log("[onKickNotify]"+JSON.stringify(msg)); var param = { srcUserId: "", userId: msg.account_id? msg.account_id: "", owner: "", content: msg.custom_data? msg.custom_data: "" }; this.rsp && this.rsp.kickPlayerNotify(param); } this.onJoinRoomNotify=function(msg){ console.log("[onJoinRoomNotify]"+JSON.stringify(msg)); var param = { userId: msg.room_user_info? msg.room_user_info.account_id: "", userProfile: msg.room_user_info? msg.room_user_info.user_profile: "" }; this.rsp && this.rsp.joinRoomNotify(param); } this.onLeaveRoomNotify=function(msg){ console.log("[onLeaveRoomNotify]"+JSON.stringify(msg)); var param = { userId: msg.room_user_info? msg.room_user_info.account_id: "", userProfile: msg.room_user_info? msg.room_user_info.user_profile: "", roomID: msg.room_id? msg.room_id: "", owner: "", content: "" }; this.rsp && this.rsp.leaveRoomNotify(param); } this.onFrameUpdateNotify=function(msg){ // console.log("[onFrameUpdateNotify]"+JSON.stringify(msg)); var lst = []; if(msg.frame_info && msg.frame_info.frame_items){ msg.frame_info.frame_items.forEach(element =>{ var obj = { srcUserID: element.src_account_id, content: element.custom_data, timestamp: element.timestamp }; lst.push(obj); }); } var param = { frameIndex: msg.frame_info? msg.frame_info.frame_index: 0, frameItems: lst, frameWaitCount: msg.frame_info? msg.frame_info.frame_wait_count: 0 }; this.rsp && this.rsp.frameUpdate(param); } this.onRoomDestoryNotify=function(msg){ console.log("[onFrameUpdateNotify]"+JSON.stringify(msg)); var param = { roomID: msg.room_id? msg.room_id: "" }; this.userinfo.room_state = state_enum.none; this.userinfo.roomID = ""; this.rsp && this.rsp.destroyRoomNotify(param); } this.onJoinOverNotify=function(msg){ console.log("[onJoinOverNotify]"+JSON.stringify(msg)); var param = { content: msg.custom_data? msg.custom_data: "" }; this.rsp && this.rsp.joinOverRoomNotify(param); } this.onJoinOpenNotify=function(msg){ console.log("[onJoinOpenNotify]"+JSON.stringify(msg)); var param = { content: msg.custom_data? msg.custom_data: "" }; this.rsp && this.rsp.joinOpenRoomNotify(param); } this.onNetWorkStateNotify=function(msg){ console.log("[onNetWorkStateNotify]"+JSON.stringify(msg)); var param = { roomID: msg.room_id? msg.room_id: "", userID: msg.account_id? msg.account_id: "", state: msg.state? msg.state: -100, owner: msg.owner? msg.owner: "" }; this.rsp && this.rsp.netWorkStateNotify(param); } this.resetRoom=function(msg){ var rs = this._checkInitState(); if(rs != 0){ return rs; } rs = this._checkLoginState(this.userinfo.login_state); if(rs != 0){ return rs; } var st = state_enum.none; rs = this._checkRoomState(st); if(rs != 0){ return rs; } var param = { join_over: msg, }; this.msgManager.sendMsg(this.msgIDs.c2sMsg()._CMResetRoom, param); } this.setRoomParam=function(msg){ var rs = this._checkInitState(); if(rs != 0){ return rs; } rs = this._checkLoginState(this.userinfo.login_state); if(rs != 0){ return rs; } var st = state_enum.none; rs = this._checkRoomState(st); if(rs != 0){ return rs; } var param = { allow_merge: msg, }; this.msgManager.sendMsg(this.msgIDs.c2sMsg()._CMSetRoomParam, param); } this.onSMSetRoomParam=function(msg){ console.log("[onSMSetRoomParam]"); this.rsp && this.rsp.onSMSetRoomParam(msg); } this.onSMResetRoom=function(msg){ console.log("[onSMResetRoom]"); this.rsp && this.rsp.onSMResetRoom(msg); } this.onSMRoomMergeNotify=function(msg){ console.log("[onSMRoomMergeNotify]"); this.rsp && this.rsp.onSMRoomMergeNotify(msg); } this.onPing=function(msg){ } }