GameServerModel.ts 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import { eg } from "../frameWork/eg";
  2. import { GameServerConfig } from "../network/GameServerConfig";
  3. import { HttpClient as HttpClient_Browser, WsClient as WsClient_Browser } from 'tsrpc-browser';
  4. import { HttpClient as HttpClient_Miniapp, WsClient as WsClient_Miniapp } from 'tsrpc-miniapp';
  5. import { serviceProto as ServiceProtoRoom, ServiceType, ServiceType as ServiceTypeRoom } from "../shared/serviceProto";
  6. import IDataModel from "../data/model/IDataModel";
  7. /** 游戏服 */
  8. export class GameServerModel extends IDataModel {
  9. /** 连接房间服务器 Websocket 客户端 */
  10. wscRoom: WsClient_Browser<ServiceTypeRoom> = null!;
  11. async Init() {
  12. this.wscRoom = eg.tspcNet.createWscRoom(GameServerConfig.GAME_SERVER);
  13. }
  14. async Connect() {
  15. let resConnect = await this.wscRoom.connect();
  16. if (!resConnect.isSucc) {
  17. console.log('连接游戏服失败', resConnect.errMsg);
  18. return;
  19. }
  20. console.error('连接游戏服成功');
  21. this.postDisconnectFlow();
  22. }
  23. /** 客户端与服务器断开事件 */
  24. private postDisconnectFlow() {
  25. this.wscRoom.flows.postDisconnectFlow.push(v => {
  26. // 非客户端手动断开时处理(例:网络错误、服务器关闭)
  27. if (!v.isManual) {
  28. console.log("wss断线");
  29. // // 等待 2 秒后自动重连
  30. // // setTimeout(async () => {
  31. // // smc.room.reconnectRoom();
  32. // // }, 2000)
  33. // if (smc.room.roomMode == RoomMode.Friend && (!smc.room.mRoom || !smc.room.mRoom.isInit)) {
  34. // setTimeout(async () => {
  35. // smc.room.reconnectRoom();
  36. // }, 2000)
  37. // return;
  38. // }
  39. }
  40. return v;
  41. });
  42. }
  43. /** http请求api */
  44. public async callApi<T extends string & keyof ServiceType['api']>(apiName: T, req: ServiceType['api'][T]['req']) {
  45. let ret = await this.wscRoom.callApi(apiName, req);
  46. return ret;
  47. }
  48. /** ws发送消息 */
  49. public sendMsg<T extends string & keyof ServiceType['msg']>(msgName: T, msg: ServiceType['msg'][T]) {
  50. this.wscRoom.sendMsg(msgName, msg);
  51. }
  52. /** 监听消息 */
  53. public listenMsg<T extends keyof ServiceType['msg']>(msgName: T | RegExp, callback: Function) {
  54. this.wscRoom.listenMsg(msgName, v => {
  55. callback(v);
  56. });
  57. }
  58. }