From 4132663fef15c66642eab44b06a67b2edb42dcc2 Mon Sep 17 00:00:00 2001 From: zhl Date: Fri, 29 Jan 2021 18:37:38 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E4=BA=A7=E7=8E=AF=E5=A2=83=E4=BD=BF?= =?UTF-8?q?=E7=94=A8redis=E5=92=8Cmongodb?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/Extend.ts | 23 +++++++++++++++++++++-- src/index.ts | 28 ++++++++++++++++++++-------- src/rooms/RankedLobbyRoom.ts | 2 +- 3 files changed, 42 insertions(+), 11 deletions(-) diff --git a/src/common/Extend.ts b/src/common/Extend.ts index 5413a8c..3251380 100644 --- a/src/common/Extend.ts +++ b/src/common/Extend.ts @@ -478,7 +478,7 @@ interface Array { * @returns {boolean} true 有这个数据并且删除成功 * false 没有这个数据 */ - remove?(t: T): boolean; + removeEx?(t: T): boolean; /** * 排序 支持多重排序 @@ -580,6 +580,13 @@ interface Array { * @param arr */ difference?(arr: T[]): T[]; + + /** + * 转换成Map + * @param {string} key 用于生成map的key字段名 + * @return {Map} + */ + toMap?(key: string): Map; } Object.defineProperties(Array.prototype, { @@ -614,7 +621,7 @@ Object.defineProperties(Array.prototype, { }, writable: true }, - remove: { + removeEx: { value: function (this: T[], t: T) { let idx = this.indexOf(t); if (~idx) { @@ -858,6 +865,18 @@ Object.defineProperties(Array.prototype, { return [...set1]; }, writable: true + }, + + toMap: { + value: function (this: T[], key: string) { + let result: Map = new Map() + for(const o of this) { + // @ts-ignore + result.set(o[key], o) + } + return result + }, + writable: true } }); diff --git a/src/index.ts b/src/index.ts index 8b6d90d..5673fd9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,7 +1,7 @@ import http from "http"; import express from "express"; import cors from "cors"; -import {Server} from "colyseus"; +import { RedisPresence, Server } from 'colyseus' import {monitor} from "@colyseus/monitor"; import rateLimit from "express-rate-limit"; // import socialRoutes from "@colyseus/social/express" @@ -9,15 +9,16 @@ import {GeneralRoom} from "./rooms/GeneralRoom"; import {initData} from "./common/GConfig"; import {Config} from "./cfg/Config"; import {RankedLobbyRoom} from "./rooms/RankedLobbyRoom"; +import { MongooseDriver } from 'colyseus/lib/matchmaker/drivers/MongooseDriver' require('./rooms/MSender'); require('./rooms/RoomExtMethod'); require('./common/Extend'); +const isProd = process.env.NODE_ENV === 'production' + let config: Config = require('../config/config.json'); -const port = Number(process.env.PORT || 2567); -// const port = Number(process.env.PORT) + Number(process.env.NODE_APP_INSTANCE); const app = express() @@ -25,11 +26,22 @@ app.use(cors()); app.use(express.json()) initData(); const server = http.createServer(app); -const gameServer = new Server({ - server, - // driver: new MongooseDriver(config.mongodb), - // presence: new RedisPresence({url: config.redis}), -}); +let port +let gameServer +if (isProd) { + port = Number(process.env.PORT) + Number(process.env.NODE_APP_INSTANCE); + gameServer = new Server({ + server, + driver: new MongooseDriver(config.mongodb), + presence: new RedisPresence({url: config.redis}), + }); +} else { + port = Number(process.env.PORT || 2567); + gameServer = new Server({ + server, + }); +} + // register your room handlers gameServer.define('general_room', GeneralRoom); diff --git a/src/rooms/RankedLobbyRoom.ts b/src/rooms/RankedLobbyRoom.ts index c487be6..3492619 100644 --- a/src/rooms/RankedLobbyRoom.ts +++ b/src/rooms/RankedLobbyRoom.ts @@ -439,7 +439,7 @@ export class RankedLobbyRoom extends Room { let data = [...stat.clients.values()][0] stat.rank = data.options.rank } else { - this.stats.remove(stat) + this.stats.removeEx(stat) } }