commonui-lib-test
Version:
"#common ui lib test"
172 lines (171 loc) • 7.34 kB
JavaScript
"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;