UNPKG

commonui-lib-test

Version:

"#common ui lib test"

172 lines (171 loc) 7.34 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const protocolHandler_1 = require("./protocolHandler"); const socketHandler_1 = require("../socket/socketHandler"); const basicMsgHandler_1 = require("./basicMsgHandler"); const commMsgHandler_1 = require("./commMsgHandler"); const gameMsgHandler_1 = require("./gameMsgHandler"); class MessageHandler extends basicMsgHandler_1.default { constructor() { super(); this.connectAction = {}; this.commMsgHandler = new commMsgHandler_1.default(); this.gameMsgHandler = new gameMsgHandler_1.default(); this.socketHandler = new socketHandler_1.default(); this.socket$ = null; this.subscriberList = {}; } static get Ins() { if (!MessageHandler.instance) { MessageHandler.instance = new MessageHandler(); } return MessageHandler.instance; } intiMessageHandler(commProto, gameProto) { this.initConnectAction(); this.commMsgHandler.initHandler(commProto, this.socketHandler); this.gameMsgHandler.initHandler(gameProto, this.socketHandler); } intiCommMsgHandler(commProto) { this.commMsgHandler.initHandler(commProto, this.socketHandler); } intiGameMsgHandler(gameProto) { this.gameMsgHandler.initHandler(gameProto, this.socketHandler); } initConnectAction() { this.connectAction = {}; this.connectAction.socketConnect = this.createSubject(); this.connectAction.socketClose = this.createSubject(); this.connectAction.serverLogin = this.createSubject(); this.connectAction.serverDisconnect = this.createSubject(); } initSocketHandler(socketHost) { this.socket$ = this.socketHandler.getWebSocket(socketHost, this.decodeData, this.reciveSocketConnect.bind(this), this.reciveSocketClose.bind(this)); this.subscriberList.Login = this.socket$.filter(filterLogin) .subscribe(evt => this.reciveLogin(evt), evt => this.reciveLoginError(evt)); this.subscriberList.Disconnect = this.socket$.filter(filterDisconnect) .subscribe(evt => this.reciveDisconnect(evt), evt => this.reciveDisconnectError(evt)); this.subscriberList.CommMsg = this.socket$.filter(filterCommMsg) .subscribe(evt => this.reciveCommMsg(evt), evt => this.reciveCommMsgError(evt)); this.subscriberList.GameMsg = this.socket$.filter(filterGameMsg) .subscribe(evt => this.reciveGameMsg(evt), evt => this.reciveGameMsgError(evt)); } closeMessageHandler() { if (this.socket$ !== null && this.socket$ !== undefined) { this.socket$.unsubscribe(); this.socket$ = null; } this.socketHandler = null; this.commMsgHandler = null; this.gameMsgHandler = null; this.subscriberList = {}; this.connectAction = {}; MessageHandler.instance.socketHandler = new socketHandler_1.default(); MessageHandler.instance.commMsgHandler = new commMsgHandler_1.default(); MessageHandler.instance.gameMsgHandler = new gameMsgHandler_1.default(); MessageHandler.instance.socket$ = null; } // public onMessageError(evt): void { // console.warn("MessageHandler onMessageError : ", evt); // } sendLogin(data) { let PB = new protocolHandler_1.ProtocolBuilder(); var msg = new protocolHandler_1.MemoryStream([]); // Header= 0:onSystemRequest >=1:Gameplay PB.Encode_FromByte(msg, 0); // ProtocolNO PB.Encode_FromShort(msg, 1); // MsInstUId PB.Encode_FromInt64(msg, data.msInstUId); // gameID PB.Encode_FromInt(msg, data.gameId); // platform_code PB.Encode_FromString(msg, data.platformCode); // sessionID PB.Encode_FromString(msg, data.sessionId); // userID PB.Encode_FromString(msg, data.userId); // userName PB.Encode_FromString(msg, data.userName); // nickName PB.Encode_FromString(msg, data.nickName); // avatarId PB.Encode_FromString(msg, data.avatarId); // avatarUrl PB.Encode_FromString(msg, data.avatarUrl); // gamePara PB.Encode_FromString(msg, data.gamePara); // browser PB.Encode_FromString(msg, data.browserType); // osType PB.Encode_FromString(msg, data.osType); // // via platform, 0: dev; 1:from platform // PB.Encode_FromByte(msg, data.ViaPlatform); this.socketHandler.send(msg.getData()); } onConnectActionNext(actionName, evt) { let action = this.connectAction[actionName]; if (action) action.next(evt); } reciveSocketConnect(evt) { console.warn("reciveSocketConnect : ", evt); this.onConnectActionNext("socketConnect", evt); } reciveSocketClose(evt) { console.warn("reciveSocketClose : ", evt); this.onConnectActionNext("socketClose", evt); } reciveLogin(evt) { let PB = new protocolHandler_1.ProtocolBuilder(); let msg = new protocolHandler_1.MemoryStream(evt.data); let errorNo = PB.Decode_ToInt(msg); let data = { result: true, errorMsg: "" }; if (errorNo === 1) { // login 成功 this.socketHandler.isLogin = true; data.result = true; data.errorMsg = ""; } else { // login 失敗 let errorMsg = PB.Decode_ToString(msg); data.result = false; data.errorMsg = errorMsg; } this.onConnectActionNext("serverLogin", data); } reciveLoginError(evt) { console.warn("MessageHandler reciveLoginError : ", evt); } reciveDisconnect(evt) { let PB = new protocolHandler_1.ProtocolBuilder(); let msg = new protocolHandler_1.MemoryStream(evt.data); let errorCode = PB.Decode_ToInt(msg); let errorString = PB.Decode_ToString(msg); console.warn(`reciveDisconnect Error Code: ${errorCode}, Disconnect Cause: ${errorString}`); let data = { errorCode, errorString }; this.onConnectActionNext("serverDisconnect", data); } reciveDisconnectError(evt) { console.warn("MessageHandler reciveDisconnectError : ", evt); } reciveCommMsg(evt) { this.commMsgHandler.reciveServerToClient(evt); } reciveCommMsgError(evt) { console.warn("MessageHandler reciveCommMsgError : ", evt); this.commMsgHandler.onMessageError(evt); } reciveGameMsg(evt) { this.gameMsgHandler.reciveServerToClient(evt); } reciveGameMsgError(evt) { console.warn("MessageHandler reciveGameMsgError : ", evt); this.gameMsgHandler.onMessageError(evt); } } exports.MessageHandler = MessageHandler; const filterLogin = msg => msg.header === 0 && msg.protocolNo === 1; const filterDisconnect = msg => msg.header === 0 && msg.protocolNo === 2; const filterCommMsg = msg => msg.header !== 0 && msg.protocolNo <= 1000; const filterGameMsg = msg => msg.header !== 0 && msg.protocolNo > 1000;