import { eg } from "../frameWork/eg"; import { GameServerConfig } from "../network/GameServerConfig"; import { HttpClient as HttpClient_Browser, WsClient as WsClient_Browser } from 'tsrpc-browser'; import { HttpClient as HttpClient_Miniapp, WsClient as WsClient_Miniapp } from 'tsrpc-miniapp'; import { serviceProto as ServiceProtoRoom, ServiceType, ServiceType as ServiceTypeRoom } from "../shared/serviceProto"; import IDataModel from "../data/model/IDataModel"; /** 游戏服 */ export class GameServerModel extends IDataModel { /** 连接房间服务器 Websocket 客户端 */ wscRoom: WsClient_Browser = null!; async Init() { this.wscRoom = eg.tspcNet.createWscRoom(GameServerConfig.GAME_SERVER); } async Connect() { let resConnect = await this.wscRoom.connect(); if (!resConnect.isSucc) { console.log('连接游戏服失败', resConnect.errMsg); return; } console.error('连接游戏服成功'); this.postDisconnectFlow(); } /** 客户端与服务器断开事件 */ private postDisconnectFlow() { this.wscRoom.flows.postDisconnectFlow.push(v => { // 非客户端手动断开时处理(例:网络错误、服务器关闭) if (!v.isManual) { console.log("wss断线"); // // 等待 2 秒后自动重连 // // setTimeout(async () => { // // smc.room.reconnectRoom(); // // }, 2000) // if (smc.room.roomMode == RoomMode.Friend && (!smc.room.mRoom || !smc.room.mRoom.isInit)) { // setTimeout(async () => { // smc.room.reconnectRoom(); // }, 2000) // return; // } } return v; }); } /** http请求api */ public async callApi(apiName: T, req: ServiceType['api'][T]['req']) { let ret = await this.wscRoom.callApi(apiName, req); return ret; } /** ws发送消息 */ public sendMsg(msgName: T, msg: ServiceType['msg'][T]) { this.wscRoom.sendMsg(msgName, msg); } /** 监听消息 */ public listenMsg(msgName: T | RegExp, callback: Function) { this.wscRoom.listenMsg(msgName, v => { callback(v); }); } }