@roomkit/gateway 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/README.md +93 -0
  2. package/dist/src/admin/admin.controller.d.ts +187 -0
  3. package/dist/src/admin/admin.controller.d.ts.map +1 -0
  4. package/dist/src/admin/admin.controller.js +187 -0
  5. package/dist/src/admin/admin.controller.js.map +1 -0
  6. package/dist/src/admin/admin.module.d.ts +3 -0
  7. package/dist/src/admin/admin.module.d.ts.map +1 -0
  8. package/dist/src/admin/admin.module.js +28 -0
  9. package/dist/src/admin/admin.module.js.map +1 -0
  10. package/dist/src/admin/admin.service.d.ts +196 -0
  11. package/dist/src/admin/admin.service.d.ts.map +1 -0
  12. package/dist/src/admin/admin.service.js +322 -0
  13. package/dist/src/admin/admin.service.js.map +1 -0
  14. package/dist/src/config/config.module.d.ts +3 -0
  15. package/dist/src/config/config.module.d.ts.map +1 -0
  16. package/dist/src/config/config.module.js +22 -0
  17. package/dist/src/config/config.module.js.map +1 -0
  18. package/dist/src/config/config.service.d.ts +19 -0
  19. package/dist/src/config/config.service.d.ts.map +1 -0
  20. package/dist/src/config/config.service.js +55 -0
  21. package/dist/src/config/config.service.js.map +1 -0
  22. package/dist/src/config/gateway.config.d.ts +64 -0
  23. package/dist/src/config/gateway.config.d.ts.map +1 -0
  24. package/dist/src/config/gateway.config.js +43 -0
  25. package/dist/src/config/gateway.config.js.map +1 -0
  26. package/dist/src/connection/connection.module.d.ts +3 -0
  27. package/dist/src/connection/connection.module.d.ts.map +1 -0
  28. package/dist/src/connection/connection.module.js +22 -0
  29. package/dist/src/connection/connection.module.js.map +1 -0
  30. package/dist/src/connection/connection.service.d.ts +93 -0
  31. package/dist/src/connection/connection.service.d.ts.map +1 -0
  32. package/dist/src/connection/connection.service.js +257 -0
  33. package/dist/src/connection/connection.service.js.map +1 -0
  34. package/dist/src/gateway.module.d.ts +8 -0
  35. package/dist/src/gateway.module.d.ts.map +1 -0
  36. package/dist/src/gateway.module.js +44 -0
  37. package/dist/src/gateway.module.js.map +1 -0
  38. package/dist/src/index.d.ts +38 -0
  39. package/dist/src/index.d.ts.map +1 -0
  40. package/dist/src/index.js +97 -0
  41. package/dist/src/index.js.map +1 -0
  42. package/dist/src/lifecycle/graceful-shutdown.service.d.ts +65 -0
  43. package/dist/src/lifecycle/graceful-shutdown.service.d.ts.map +1 -0
  44. package/dist/src/lifecycle/graceful-shutdown.service.js +187 -0
  45. package/dist/src/lifecycle/graceful-shutdown.service.js.map +1 -0
  46. package/dist/src/lifecycle/index.d.ts +2 -0
  47. package/dist/src/lifecycle/index.d.ts.map +1 -0
  48. package/dist/src/lifecycle/index.js +18 -0
  49. package/dist/src/lifecycle/index.js.map +1 -0
  50. package/dist/src/main.d.ts +2 -0
  51. package/dist/src/main.d.ts.map +1 -0
  52. package/dist/src/main.js +56 -0
  53. package/dist/src/main.js.map +1 -0
  54. package/dist/src/metrics/metrics.controller.d.ts +13 -0
  55. package/dist/src/metrics/metrics.controller.d.ts.map +1 -0
  56. package/dist/src/metrics/metrics.controller.js +42 -0
  57. package/dist/src/metrics/metrics.controller.js.map +1 -0
  58. package/dist/src/metrics/metrics.module.d.ts +3 -0
  59. package/dist/src/metrics/metrics.module.d.ts.map +1 -0
  60. package/dist/src/metrics/metrics.module.js +26 -0
  61. package/dist/src/metrics/metrics.module.js.map +1 -0
  62. package/dist/src/metrics/metrics.service.d.ts +81 -0
  63. package/dist/src/metrics/metrics.service.d.ts.map +1 -0
  64. package/dist/src/metrics/metrics.service.js +255 -0
  65. package/dist/src/metrics/metrics.service.js.map +1 -0
  66. package/dist/src/ratelimit/rate-limit.module.d.ts +3 -0
  67. package/dist/src/ratelimit/rate-limit.module.d.ts.map +1 -0
  68. package/dist/src/ratelimit/rate-limit.module.js +23 -0
  69. package/dist/src/ratelimit/rate-limit.module.js.map +1 -0
  70. package/dist/src/ratelimit/rate-limiter.service.d.ts +68 -0
  71. package/dist/src/ratelimit/rate-limiter.service.d.ts.map +1 -0
  72. package/dist/src/ratelimit/rate-limiter.service.js +201 -0
  73. package/dist/src/ratelimit/rate-limiter.service.js.map +1 -0
  74. package/dist/src/redis/redis.module.d.ts +3 -0
  75. package/dist/src/redis/redis.module.d.ts.map +1 -0
  76. package/dist/src/redis/redis.module.js +22 -0
  77. package/dist/src/redis/redis.module.js.map +1 -0
  78. package/dist/src/redis/redis.service.d.ts +68 -0
  79. package/dist/src/redis/redis.service.d.ts.map +1 -0
  80. package/dist/src/redis/redis.service.js +281 -0
  81. package/dist/src/redis/redis.service.js.map +1 -0
  82. package/dist/src/session/session.module.d.ts +3 -0
  83. package/dist/src/session/session.module.d.ts.map +1 -0
  84. package/dist/src/session/session.module.js +21 -0
  85. package/dist/src/session/session.module.js.map +1 -0
  86. package/dist/src/session/session.service.d.ts +64 -0
  87. package/dist/src/session/session.service.d.ts.map +1 -0
  88. package/dist/src/session/session.service.js +206 -0
  89. package/dist/src/session/session.service.js.map +1 -0
  90. package/dist/src/ws/message-router.service.d.ts +133 -0
  91. package/dist/src/ws/message-router.service.d.ts.map +1 -0
  92. package/dist/src/ws/message-router.service.js +715 -0
  93. package/dist/src/ws/message-router.service.js.map +1 -0
  94. package/dist/src/ws/response-handler.service.d.ts +53 -0
  95. package/dist/src/ws/response-handler.service.d.ts.map +1 -0
  96. package/dist/src/ws/response-handler.service.js +282 -0
  97. package/dist/src/ws/response-handler.service.js.map +1 -0
  98. package/dist/src/ws/ws.gateway.d.ts +46 -0
  99. package/dist/src/ws/ws.gateway.d.ts.map +1 -0
  100. package/dist/src/ws/ws.gateway.js +244 -0
  101. package/dist/src/ws/ws.gateway.js.map +1 -0
  102. package/dist/src/ws/ws.module.d.ts +8 -0
  103. package/dist/src/ws/ws.module.d.ts.map +1 -0
  104. package/dist/src/ws/ws.module.js +39 -0
  105. package/dist/src/ws/ws.module.js.map +1 -0
  106. package/dist/test/connection/connection.service.spec.d.ts +2 -0
  107. package/dist/test/connection/connection.service.spec.d.ts.map +1 -0
  108. package/dist/test/connection/connection.service.spec.js +204 -0
  109. package/dist/test/connection/connection.service.spec.js.map +1 -0
  110. package/dist/test/e2e/gateway-worker.e2e.spec.d.ts +2 -0
  111. package/dist/test/e2e/gateway-worker.e2e.spec.d.ts.map +1 -0
  112. package/dist/test/e2e/gateway-worker.e2e.spec.js +412 -0
  113. package/dist/test/e2e/gateway-worker.e2e.spec.js.map +1 -0
  114. package/dist/test/integration/admin-api.spec.d.ts +2 -0
  115. package/dist/test/integration/admin-api.spec.d.ts.map +1 -0
  116. package/dist/test/integration/admin-api.spec.js +218 -0
  117. package/dist/test/integration/admin-api.spec.js.map +1 -0
  118. package/dist/test/ratelimit/rate-limiter.service.spec.d.ts +2 -0
  119. package/dist/test/ratelimit/rate-limiter.service.spec.d.ts.map +1 -0
  120. package/dist/test/ratelimit/rate-limiter.service.spec.js +139 -0
  121. package/dist/test/ratelimit/rate-limiter.service.spec.js.map +1 -0
  122. package/dist/test/setup.d.ts +2 -0
  123. package/dist/test/setup.d.ts.map +1 -0
  124. package/dist/test/setup.js +56 -0
  125. package/dist/test/setup.js.map +1 -0
  126. package/dist/test/ws/message-router.service.spec.d.ts +2 -0
  127. package/dist/test/ws/message-router.service.spec.d.ts.map +1 -0
  128. package/dist/test/ws/message-router.service.spec.js +403 -0
  129. package/dist/test/ws/message-router.service.spec.js.map +1 -0
  130. package/package.json +78 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limiter.service.js","sourceRoot":"","sources":["../../../src/ratelimit/rate-limiter.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare class RedisModule {
2
+ }
3
+ //# sourceMappingURL=redis.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.module.d.ts","sourceRoot":"","sources":["../../../src/redis/redis.module.ts"],"names":[],"mappings":"AAGA,qBAKa,WAAW;CAAG"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.RedisModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const redis_service_1 = require("./redis.service");
12
+ let RedisModule = class RedisModule {
13
+ };
14
+ exports.RedisModule = RedisModule;
15
+ exports.RedisModule = RedisModule = __decorate([
16
+ (0, common_1.Global)(),
17
+ (0, common_1.Module)({
18
+ providers: [redis_service_1.RedisService],
19
+ exports: [redis_service_1.RedisService],
20
+ })
21
+ ], RedisModule);
22
+ //# sourceMappingURL=redis.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.module.js","sourceRoot":"","sources":["../../../src/redis/redis.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAgD;AAChD,mDAA+C;AAOxC,IAAM,WAAW,GAAjB,MAAM,WAAW;CAAG,CAAA;AAAd,kCAAW;sBAAX,WAAW;IALvB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,4BAAY,CAAC;QACzB,OAAO,EAAE,CAAC,4BAAY,CAAC;KACxB,CAAC;GACW,WAAW,CAAG"}
@@ -0,0 +1,68 @@
1
+ import { OnModuleInit, OnModuleDestroy } from '@nestjs/common';
2
+ import Redis from 'ioredis';
3
+ import { ConfigService } from '../config/config.service';
4
+ export declare class RedisService implements OnModuleInit, OnModuleDestroy {
5
+ private readonly configService;
6
+ private readonly logger;
7
+ readonly client: Redis;
8
+ readonly subscriber: Redis;
9
+ private messageHandlers;
10
+ private heartbeatTimer?;
11
+ private cleanupTimer?;
12
+ private readonly HEARTBEAT_INTERVAL;
13
+ private readonly HEARTBEAT_TIMEOUT;
14
+ private readonly CLEANUP_INTERVAL;
15
+ constructor(configService: ConfigService);
16
+ onModuleInit(): Promise<void>;
17
+ onModuleDestroy(): Promise<void>;
18
+ private subscribeToChannels;
19
+ /**
20
+ * 注册消息处理器
21
+ */
22
+ onMessage(channel: string, handler: (message: string) => void): void;
23
+ /**
24
+ * 发布消息
25
+ */
26
+ publish(channel: string, message: string | object): Promise<void>;
27
+ /**
28
+ * 执行 Lua 脚本
29
+ */
30
+ evalScript(script: string, keys: string[], args: (string | number)[]): Promise<unknown>;
31
+ /**
32
+ * 注册Gateway到Redis
33
+ */
34
+ private registerGateway;
35
+ /**
36
+ * 注销Gateway
37
+ */
38
+ private unregisterGateway;
39
+ /**
40
+ * 启动心跳定时器
41
+ */
42
+ private startHeartbeat;
43
+ /**
44
+ * 发送心跳
45
+ */
46
+ private sendHeartbeat;
47
+ /**
48
+ * 启动清理定时器
49
+ */
50
+ private startCleanup;
51
+ /**
52
+ * 清理过期的Gateway节点
53
+ */
54
+ private cleanupDeadGateways;
55
+ /**
56
+ * 移除Gateway
57
+ */
58
+ private removeGateway;
59
+ /**
60
+ * 清理过期的Worker节点
61
+ */
62
+ private cleanupDeadWorkers;
63
+ /**
64
+ * 移除Worker(同时清理gameType注册)
65
+ */
66
+ private removeWorker;
67
+ }
68
+ //# sourceMappingURL=redis.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.service.d.ts","sourceRoot":"","sources":["../../../src/redis/redis.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,YAAY,EAAE,eAAe,EAAU,MAAM,gBAAgB,CAAC;AACnF,OAAO,KAAK,MAAM,SAAS,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGzD,qBACa,YAAa,YAAW,YAAY,EAAE,eAAe;IAiBpD,OAAO,CAAC,QAAQ,CAAC,aAAa;IAhB1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiC;IAExD,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC;IAE3B,OAAO,CAAC,eAAe,CAAqD;IAG5E,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,YAAY,CAAC,CAAiB;IAGtC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAQ;IAC3C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;gBAEb,aAAa,EAAE,aAAa;IAanD,YAAY;IA+BZ,eAAe;YAgBP,mBAAmB;IASjC;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI;IAI7D;;OAEG;IACG,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvE;;OAEG;IACG,UAAU,CACd,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GACxB,OAAO,CAAC,OAAO,CAAC;IAInB;;OAEG;YACW,eAAe;IAuB7B;;OAEG;YACW,iBAAiB;IAY/B;;OAEG;IACH,OAAO,CAAC,cAAc;IAYtB;;OAEG;YACW,aAAa;IAY3B;;OAEG;IACH,OAAO,CAAC,YAAY;IAapB;;OAEG;YACW,mBAAmB;IAgCjC;;OAEG;YACW,aAAa;IAQ3B;;OAEG;YACW,kBAAkB;IA+BhC;;OAEG;YACW,YAAY;CAsB3B"}
@@ -0,0 +1,281 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ var RedisService_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.RedisService = void 0;
17
+ const common_1 = require("@nestjs/common");
18
+ const ioredis_1 = __importDefault(require("ioredis"));
19
+ const config_service_1 = require("../config/config.service");
20
+ const core_1 = require("@roomkit/core");
21
+ let RedisService = RedisService_1 = class RedisService {
22
+ configService;
23
+ logger = new common_1.Logger(RedisService_1.name);
24
+ client;
25
+ subscriber;
26
+ messageHandlers = new Map();
27
+ // 心跳和清理定时器
28
+ heartbeatTimer;
29
+ cleanupTimer;
30
+ // 常量配置
31
+ HEARTBEAT_INTERVAL = 5000; // 5秒心跳
32
+ HEARTBEAT_TIMEOUT = 30000; // 30秒超时
33
+ CLEANUP_INTERVAL = 60000; // 60秒清理一次
34
+ constructor(configService) {
35
+ this.configService = configService;
36
+ const redisConfig = {
37
+ host: this.configService.redisHost,
38
+ port: this.configService.redisPort,
39
+ password: this.configService.redisPassword,
40
+ retryStrategy: (times) => Math.min(times * 50, 2000),
41
+ maxRetriesPerRequest: 3,
42
+ };
43
+ this.client = new ioredis_1.default(redisConfig);
44
+ this.subscriber = new ioredis_1.default(redisConfig);
45
+ }
46
+ async onModuleInit() {
47
+ this.client.on('connect', () => this.logger.log('Redis client connected'));
48
+ this.client.on('error', (err) => this.logger.error('Redis client error', err));
49
+ this.subscriber.on('connect', () => this.logger.log('Redis subscriber connected'));
50
+ this.subscriber.on('error', (err) => this.logger.error('Redis subscriber error', err));
51
+ // 设置消息处理
52
+ this.subscriber.on('message', (channel, message) => {
53
+ this.logger.debug(`[Redis] Received message on channel: ${channel}, length: ${message.length}`);
54
+ const handler = this.messageHandlers.get(channel);
55
+ if (handler) {
56
+ handler(message);
57
+ }
58
+ else {
59
+ this.logger.warn(`[Redis] No handler for channel: ${channel}`);
60
+ }
61
+ });
62
+ // 订阅通道
63
+ await this.subscribeToChannels();
64
+ // 注册Gateway
65
+ await this.registerGateway();
66
+ // 启动心跳定时器
67
+ this.startHeartbeat();
68
+ // 启动清理定时器
69
+ this.startCleanup();
70
+ }
71
+ async onModuleDestroy() {
72
+ // 停止定时器
73
+ if (this.heartbeatTimer) {
74
+ clearInterval(this.heartbeatTimer);
75
+ }
76
+ if (this.cleanupTimer) {
77
+ clearInterval(this.cleanupTimer);
78
+ }
79
+ // 注销Gateway
80
+ await this.unregisterGateway();
81
+ await this.client.quit();
82
+ await this.subscriber.quit();
83
+ }
84
+ async subscribeToChannels() {
85
+ const gatewayChannel = core_1.RedisChannels.rpcGateway(this.configService.gatewayId);
86
+ const broadcastChannel = core_1.RedisChannels.broadcast();
87
+ const routeUpdateChannel = core_1.RedisChannels.routeUpdate();
88
+ await this.subscriber.subscribe(gatewayChannel, broadcastChannel, routeUpdateChannel);
89
+ this.logger.log(`Subscribed to channels: ${gatewayChannel}, ${broadcastChannel}, ${routeUpdateChannel}`);
90
+ }
91
+ /**
92
+ * 注册消息处理器
93
+ */
94
+ onMessage(channel, handler) {
95
+ this.messageHandlers.set(channel, handler);
96
+ }
97
+ /**
98
+ * 发布消息
99
+ */
100
+ async publish(channel, message) {
101
+ const data = typeof message === 'string' ? message : JSON.stringify(message);
102
+ const result = await this.client.publish(channel, data);
103
+ this.logger.debug(`[Redis] Published to channel: ${channel}, subscribers: ${result}, data length: ${data.length}`);
104
+ }
105
+ /**
106
+ * 执行 Lua 脚本
107
+ */
108
+ async evalScript(script, keys, args) {
109
+ return this.client.eval(script, keys.length, ...keys, ...args);
110
+ }
111
+ /**
112
+ * 注册Gateway到Redis
113
+ */
114
+ async registerGateway() {
115
+ const gatewayId = this.configService.gatewayId;
116
+ // 注册Gateway信息
117
+ await this.client.hset(core_1.RedisKeys.gateway(gatewayId), {
118
+ gatewayId,
119
+ status: 'active', // 状态: active | draining
120
+ connectionCount: 0,
121
+ lastHeartbeat: Date.now(),
122
+ startedAt: Date.now(),
123
+ wsPort: this.configService.port,
124
+ adminPort: this.configService.adminPort,
125
+ });
126
+ // 设置TTL为30秒(需要心跳续期)
127
+ await this.client.expire(core_1.RedisKeys.gateway(gatewayId), 30);
128
+ // 添加到Gateway列表
129
+ await this.client.sadd(core_1.RedisKeys.gatewaysAll(), gatewayId);
130
+ this.logger.log(`Gateway registered: ${gatewayId}, status: active`);
131
+ }
132
+ /**
133
+ * 注销Gateway
134
+ */
135
+ async unregisterGateway() {
136
+ const gatewayId = this.configService.gatewayId;
137
+ // 从Gateway列表中移除
138
+ await this.client.srem(core_1.RedisKeys.gatewaysAll(), gatewayId);
139
+ // 删除Gateway信息
140
+ await this.client.del(core_1.RedisKeys.gateway(gatewayId));
141
+ this.logger.log(`Gateway unregistered: ${gatewayId}`);
142
+ }
143
+ /**
144
+ * 启动心跳定时器
145
+ */
146
+ startHeartbeat() {
147
+ this.heartbeatTimer = setInterval(async () => {
148
+ try {
149
+ await this.sendHeartbeat();
150
+ }
151
+ catch (error) {
152
+ this.logger.error('Failed to send heartbeat', error);
153
+ }
154
+ }, this.HEARTBEAT_INTERVAL);
155
+ this.logger.log(`Heartbeat started: interval=${this.HEARTBEAT_INTERVAL}ms`);
156
+ }
157
+ /**
158
+ * 发送心跳
159
+ */
160
+ async sendHeartbeat() {
161
+ const gatewayId = this.configService.gatewayId;
162
+ await this.client.hset(core_1.RedisKeys.gateway(gatewayId), {
163
+ lastHeartbeat: Date.now(),
164
+ });
165
+ // 续期TTL(根据状态决定时长)
166
+ const status = await this.client.hget(core_1.RedisKeys.gateway(gatewayId), 'status');
167
+ const ttl = status === 'draining' ? 120 : 30;
168
+ await this.client.expire(core_1.RedisKeys.gateway(gatewayId), ttl);
169
+ }
170
+ /**
171
+ * 启动清理定时器
172
+ */
173
+ startCleanup() {
174
+ this.cleanupTimer = setInterval(async () => {
175
+ try {
176
+ await this.cleanupDeadGateways();
177
+ await this.cleanupDeadWorkers();
178
+ }
179
+ catch (error) {
180
+ this.logger.error('Failed to cleanup dead nodes', error);
181
+ }
182
+ }, this.CLEANUP_INTERVAL);
183
+ this.logger.log(`Cleanup started: interval=${this.CLEANUP_INTERVAL}ms`);
184
+ }
185
+ /**
186
+ * 清理过期的Gateway节点
187
+ */
188
+ async cleanupDeadGateways() {
189
+ const now = Date.now();
190
+ const timeout = this.HEARTBEAT_TIMEOUT;
191
+ // 获取所有Gateway
192
+ const gatewayIds = await this.client.smembers(core_1.RedisKeys.gatewaysAll());
193
+ let cleaned = 0;
194
+ for (const gatewayId of gatewayIds) {
195
+ const gatewayData = await this.client.hgetall(core_1.RedisKeys.gateway(gatewayId));
196
+ if (!gatewayData || !gatewayData.lastHeartbeat) {
197
+ // 没有心跳信息,清理掉
198
+ await this.removeGateway(gatewayId);
199
+ cleaned++;
200
+ continue;
201
+ }
202
+ const lastHeartbeat = parseInt(gatewayData.lastHeartbeat);
203
+ if (now - lastHeartbeat > timeout) {
204
+ // 心跳超时,清理掉
205
+ this.logger.warn(`Removing dead gateway: ${gatewayId} (last heartbeat: ${new Date(lastHeartbeat).toISOString()})`);
206
+ await this.removeGateway(gatewayId);
207
+ cleaned++;
208
+ }
209
+ }
210
+ if (cleaned > 0) {
211
+ this.logger.log(`Cleaned up ${cleaned} dead gateway(s)`);
212
+ }
213
+ }
214
+ /**
215
+ * 移除Gateway
216
+ */
217
+ async removeGateway(gatewayId) {
218
+ // 从总列表移除
219
+ await this.client.srem(core_1.RedisKeys.gatewaysAll(), gatewayId);
220
+ // 删除Gateway数据
221
+ await this.client.del(core_1.RedisKeys.gateway(gatewayId));
222
+ }
223
+ /**
224
+ * 清理过期的Worker节点
225
+ */
226
+ async cleanupDeadWorkers() {
227
+ const now = Date.now();
228
+ const timeout = this.HEARTBEAT_TIMEOUT;
229
+ // 获取所有Worker
230
+ const workerIds = await this.client.smembers(core_1.RedisKeys.workersAll());
231
+ let cleaned = 0;
232
+ for (const workerId of workerIds) {
233
+ const workerData = await this.client.hgetall(core_1.RedisKeys.worker(workerId));
234
+ if (!workerData || !workerData.lastHeartbeat) {
235
+ // 没有心跳信息,清理掉
236
+ await this.removeWorker(workerId);
237
+ cleaned++;
238
+ continue;
239
+ }
240
+ const lastHeartbeat = parseInt(workerData.lastHeartbeat);
241
+ if (now - lastHeartbeat > timeout) {
242
+ // 心跳超时,清理掉
243
+ this.logger.warn(`Removing dead worker: ${workerId} (last heartbeat: ${new Date(lastHeartbeat).toISOString()})`);
244
+ await this.removeWorker(workerId);
245
+ cleaned++;
246
+ }
247
+ }
248
+ if (cleaned > 0) {
249
+ this.logger.log(`Cleaned up ${cleaned} dead worker(s)`);
250
+ }
251
+ }
252
+ /**
253
+ * 移除Worker(同时清理gameType注册)
254
+ */
255
+ async removeWorker(workerId) {
256
+ // 获取Worker的gameTypes信息
257
+ const workerData = await this.client.hgetall(core_1.RedisKeys.worker(workerId));
258
+ if (workerData && workerData.gameTypes) {
259
+ try {
260
+ const gameTypes = JSON.parse(workerData.gameTypes);
261
+ // 从各个gameType集合中移除
262
+ for (const gameType of gameTypes) {
263
+ await this.client.srem(core_1.RedisKeys.workersByType(gameType), workerId);
264
+ }
265
+ }
266
+ catch (error) {
267
+ this.logger.warn(`Failed to parse gameTypes for worker ${workerId}`);
268
+ }
269
+ }
270
+ // 从总列表移除
271
+ await this.client.srem(core_1.RedisKeys.workersAll(), workerId);
272
+ // 删除Worker数据
273
+ await this.client.del(core_1.RedisKeys.worker(workerId));
274
+ }
275
+ };
276
+ exports.RedisService = RedisService;
277
+ exports.RedisService = RedisService = RedisService_1 = __decorate([
278
+ (0, common_1.Injectable)(),
279
+ __metadata("design:paramtypes", [config_service_1.ConfigService])
280
+ ], RedisService);
281
+ //# sourceMappingURL=redis.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.service.js","sourceRoot":"","sources":["../../../src/redis/redis.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAmF;AACnF,sDAA4B;AAC5B,6DAAyD;AACzD,wCAAyD;AAGlD,IAAM,YAAY,oBAAlB,MAAM,YAAY;IAiBM;IAhBZ,MAAM,GAAG,IAAI,eAAM,CAAC,cAAY,CAAC,IAAI,CAAC,CAAC;IAE/C,MAAM,CAAQ;IACd,UAAU,CAAQ;IAEnB,eAAe,GAA2C,IAAI,GAAG,EAAE,CAAC;IAE5E,WAAW;IACH,cAAc,CAAkB;IAChC,YAAY,CAAkB;IAEtC,OAAO;IACU,kBAAkB,GAAG,IAAI,CAAC,CAAE,OAAO;IACnC,iBAAiB,GAAG,KAAK,CAAC,CAAE,QAAQ;IACpC,gBAAgB,GAAG,KAAK,CAAC,CAAG,UAAU;IAEvD,YAA6B,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;QACvD,MAAM,WAAW,GAAG;YAClB,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,SAAS;YAClC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,SAAS;YAClC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,aAAa;YAC1C,aAAa,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,EAAE,IAAI,CAAC;YAC5D,oBAAoB,EAAE,CAAC;SACxB,CAAC;QAEF,IAAI,CAAC,MAAM,GAAG,IAAI,iBAAK,CAAC,WAAW,CAAC,CAAC;QACrC,IAAI,CAAC,UAAU,GAAG,IAAI,iBAAK,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAC3E,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC,CAAC;QAE/E,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC;QACnF,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC,CAAC;QAEvF,SAAS;QACT,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;YACjD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wCAAwC,OAAO,aAAa,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YAChG,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAClD,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,OAAO,CAAC,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mCAAmC,OAAO,EAAE,CAAC,CAAC;YACjE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO;QACP,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAEjC,YAAY;QACZ,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAE7B,UAAU;QACV,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,UAAU;QACV,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,QAAQ;QACR,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACnC,CAAC;QAED,YAAY;QACZ,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAE/B,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACzB,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAEO,KAAK,CAAC,mBAAmB;QAC/B,MAAM,cAAc,GAAG,oBAAa,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAC9E,MAAM,gBAAgB,GAAG,oBAAa,CAAC,SAAS,EAAE,CAAC;QACnD,MAAM,kBAAkB,GAAG,oBAAa,CAAC,WAAW,EAAE,CAAC;QAEvD,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;QACtF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,2BAA2B,cAAc,KAAK,gBAAgB,KAAK,kBAAkB,EAAE,CAAC,CAAC;IAC3G,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,OAAe,EAAE,OAAkC;QAC3D,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,OAAe,EAAE,OAAwB;QACrD,MAAM,IAAI,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC7E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,OAAO,kBAAkB,MAAM,kBAAkB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACrH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CACd,MAAc,EACd,IAAc,EACd,IAAyB;QAEzB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;IACjE,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;QAE/C,cAAc;QACd,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAS,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YACnD,SAAS;YACT,MAAM,EAAE,QAAQ,EAAG,wBAAwB;YAC3C,eAAe,EAAE,CAAC;YAClB,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE;YACzB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI;YAC/B,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,SAAS;SACxC,CAAC,CAAC;QAEH,oBAAoB;QACpB,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAS,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;QAE3D,eAAe;QACf,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAS,CAAC,WAAW,EAAE,EAAE,SAAS,CAAC,CAAC;QAE3D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAuB,SAAS,kBAAkB,CAAC,CAAC;IACtE,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;QAE/C,gBAAgB;QAChB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAS,CAAC,WAAW,EAAE,EAAE,SAAS,CAAC,CAAC;QAE3D,cAAc;QACd,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QAEpD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,yBAAyB,SAAS,EAAE,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACK,cAAc;QACpB,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;YAC3C,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YAC7B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;YACvD,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAE5B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,+BAA+B,IAAI,CAAC,kBAAkB,IAAI,CAAC,CAAC;IAC9E,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;QAC/C,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAS,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YACnD,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE;SAC1B,CAAC,CAAC;QAEH,kBAAkB;QAClB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAS,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC9E,MAAM,GAAG,GAAG,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAS,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACK,YAAY;QAClB,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;YACzC,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACjC,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAClC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,6BAA6B,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAEvC,cAAc;QACd,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAS,CAAC,WAAW,EAAE,CAAC,CAAC;QAEvE,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;YAE5E,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;gBAC/C,aAAa;gBACb,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;gBACpC,OAAO,EAAE,CAAC;gBACV,SAAS;YACX,CAAC;YAED,MAAM,aAAa,GAAG,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;YAC1D,IAAI,GAAG,GAAG,aAAa,GAAG,OAAO,EAAE,CAAC;gBAClC,WAAW;gBACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,SAAS,qBAAqB,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;gBACnH,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;gBACpC,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QAED,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,OAAO,kBAAkB,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa,CAAC,SAAiB;QAC3C,SAAS;QACT,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAS,CAAC,WAAW,EAAE,EAAE,SAAS,CAAC,CAAC;QAE3D,cAAc;QACd,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,kBAAkB;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAEvC,aAAa;QACb,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAS,CAAC,UAAU,EAAE,CAAC,CAAC;QAErE,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAEzE,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;gBAC7C,aAAa;gBACb,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBAClC,OAAO,EAAE,CAAC;gBACV,SAAS;YACX,CAAC;YAED,MAAM,aAAa,GAAG,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YACzD,IAAI,GAAG,GAAG,aAAa,GAAG,OAAO,EAAE,CAAC;gBAClC,WAAW;gBACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,QAAQ,qBAAqB,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;gBAAQ,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBAC3J,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QAED,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,OAAO,iBAAiB,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY,CAAC,QAAgB;QACzC,uBAAuB;QACvB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEzE,IAAI,UAAU,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;YACvC,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;gBACnD,mBAAmB;gBACnB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;oBACjC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;gBACtE,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wCAAwC,QAAQ,EAAE,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;QAED,SAAS;QACT,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAS,CAAC,UAAU,EAAE,EAAE,QAAQ,CAAC,CAAC;QAEzD,aAAa;QACb,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpD,CAAC;CACF,CAAA;AAjTY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,mBAAU,GAAE;qCAkBiC,8BAAa;GAjB9C,YAAY,CAiTxB"}
@@ -0,0 +1,3 @@
1
+ export declare class SessionModule {
2
+ }
3
+ //# sourceMappingURL=session.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.module.d.ts","sourceRoot":"","sources":["../../../src/session/session.module.ts"],"names":[],"mappings":"AAGA,qBAIa,aAAa;CAAG"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.SessionModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const session_service_1 = require("./session.service");
12
+ let SessionModule = class SessionModule {
13
+ };
14
+ exports.SessionModule = SessionModule;
15
+ exports.SessionModule = SessionModule = __decorate([
16
+ (0, common_1.Module)({
17
+ providers: [session_service_1.SessionService],
18
+ exports: [session_service_1.SessionService],
19
+ })
20
+ ], SessionModule);
21
+ //# sourceMappingURL=session.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.module.js","sourceRoot":"","sources":["../../../src/session/session.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,uDAAmD;AAM5C,IAAM,aAAa,GAAnB,MAAM,aAAa;CAAG,CAAA;AAAhB,sCAAa;wBAAb,aAAa;IAJzB,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,gCAAc,CAAC;QAC3B,OAAO,EAAE,CAAC,gCAAc,CAAC;KAC1B,CAAC;GACW,aAAa,CAAG"}
@@ -0,0 +1,64 @@
1
+ import { RedisService } from '../redis/redis.service';
2
+ import { UserSession } from '@roomkit/core';
3
+ /**
4
+ * 会话管理服务
5
+ *
6
+ * 负责管理用户会话信息,支持断线重连
7
+ * - 会话存储在 Redis 中
8
+ * - 使用 TTL 自动过期(默认 5 分钟)
9
+ */
10
+ export declare class SessionService {
11
+ private readonly redisService;
12
+ private readonly logger;
13
+ /** 会话过期时间(秒) */
14
+ private readonly SESSION_TTL;
15
+ constructor(redisService: RedisService);
16
+ /**
17
+ * 创建或更新用户会话
18
+ */
19
+ createOrUpdateSession(userId: string, options?: {
20
+ gatewayId?: string;
21
+ connectionId?: string;
22
+ rooms?: Array<{
23
+ roomId: string;
24
+ gameType: string;
25
+ }>;
26
+ }): Promise<string>;
27
+ /**
28
+ * 保存会话到 Redis(带 TTL)
29
+ */
30
+ private saveSession;
31
+ /**
32
+ * 根据令牌获取会话
33
+ */
34
+ getSessionByToken(token: string): Promise<UserSession | null>;
35
+ /**
36
+ * 根据用户ID获取会话
37
+ */
38
+ getSessionByUserId(userId: string): Promise<UserSession | null>;
39
+ /**
40
+ * 添加房间到会话(包含房间类型)
41
+ */
42
+ addRoomToSession(userId: string, roomId: string, gameType: string): Promise<void>;
43
+ /**
44
+ * 从会话中移除房间
45
+ */
46
+ removeRoomFromSession(userId: string, roomId: string): Promise<void>;
47
+ /**
48
+ * 更新会话的连接信息
49
+ */
50
+ updateConnectionInfo(userId: string, gatewayId: string, connectionId: string): Promise<void>;
51
+ /**
52
+ * 刷新会话的 TTL(智能刷新)
53
+ *
54
+ * 只有当 TTL 剩余时间少于阈值时才刷新,避免频繁写入
55
+ * @param userId 用户ID
56
+ * @param forceRefresh 是否强制刷新(默认false)
57
+ */
58
+ refreshSession(userId: string, forceRefresh?: boolean): Promise<void>;
59
+ /**
60
+ * 删除会话
61
+ */
62
+ deleteSession(userId: string): Promise<void>;
63
+ }
64
+ //# sourceMappingURL=session.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.service.d.ts","sourceRoot":"","sources":["../../../src/session/session.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAa,WAAW,EAAE,MAAM,eAAe,CAAC;AAGvD;;;;;;GAMG;AACH,qBACa,cAAc;IAMb,OAAO,CAAC,QAAQ,CAAC,YAAY;IALzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;IAE1D,gBAAgB;IAChB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAU;gBAET,YAAY,EAAE,YAAY;IAEvD;;OAEG;IACG,qBAAqB,CACzB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,KAAK,CAAC,EAAE,KAAK,CAAC;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACrD,GACA,OAAO,CAAC,MAAM,CAAC;IA0ClB;;OAEG;YACW,WAAW;IAoBzB;;OAEG;IACG,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAcnE;;OAEG;IACG,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAiBrE;;OAEG;IACG,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAevF;;OAEG;IACG,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY1E;;OAEG;IACG,oBAAoB,CACxB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC;IAahB;;;;;;OAMG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BzE;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAUnD"}