gemercheung 2 năm trước cách đây
mục cha
commit
054b901052

+ 1 - 0
package.json

@@ -32,6 +32,7 @@
     "@socket.io/admin-ui": "^0.5.1",
     "@socket.io/redis-adapter": "^8.1.0",
     "bcrypt": "^5.1.0",
+    "camelcase-keys": "^8.0.2",
     "chalk": "^4",
     "dotenv": "^16.0.3",
     "ioredis": "^5.3.1",

+ 32 - 0
pnpm-lock.yaml

@@ -22,6 +22,7 @@ specifiers:
   '@typescript-eslint/eslint-plugin': ^5.0.0
   '@typescript-eslint/parser': ^5.0.0
   bcrypt: ^5.1.0
+  camelcase-keys: ^8.0.2
   chalk: ^4
   dotenv: ^16.0.3
   eslint: ^8.0.1
@@ -61,6 +62,7 @@ dependencies:
   '@socket.io/admin-ui': 0.5.1_socket.io@4.6.0
   '@socket.io/redis-adapter': 8.1.0_socket.io-adapter@2.5.2
   bcrypt: 5.1.0
+  camelcase-keys: 8.0.2
   chalk: 4.1.2
   dotenv: 16.0.3
   ioredis: 5.3.1
@@ -2158,6 +2160,16 @@ packages:
     engines: {node: '>=6'}
     dev: true
 
+  /camelcase-keys/8.0.2:
+    resolution: {integrity: sha512-qMKdlOfsjlezMqxkUGGMaWWs17i2HoL15tM+wtx8ld4nLrUwU58TFdvyGOz/piNP842KeO8yXvggVQSdQ828NA==}
+    engines: {node: '>=14.16'}
+    dependencies:
+      camelcase: 7.0.1
+      map-obj: 4.3.0
+      quick-lru: 6.1.1
+      type-fest: 2.19.0
+    dev: false
+
   /camelcase/5.3.1:
     resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
     engines: {node: '>=6'}
@@ -2168,6 +2180,11 @@ packages:
     engines: {node: '>=10'}
     dev: true
 
+  /camelcase/7.0.1:
+    resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==}
+    engines: {node: '>=14.16'}
+    dev: false
+
   /caniuse-lite/1.0.30001451:
     resolution: {integrity: sha512-XY7UbUpGRatZzoRft//5xOa69/1iGJRBlrieH6QYrkKLIFn3m7OVEJ81dSrKoy2BnKsdbX5cLrOispZNYo9v2w==}
     dev: true
@@ -4153,6 +4170,11 @@ packages:
       tmpl: 1.0.5
     dev: true
 
+  /map-obj/4.3.0:
+    resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==}
+    engines: {node: '>=8'}
+    dev: false
+
   /md5/2.3.0:
     resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==}
     dependencies:
@@ -4660,6 +4682,11 @@ packages:
     resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
     dev: true
 
+  /quick-lru/6.1.1:
+    resolution: {integrity: sha512-S27GBT+F0NTRiehtbrgaSE1idUAJ5bX8dPAQTdylEyNlrdcH5X4Lz7Edz3DYzecbsCluD5zO8ZNEe04z3D3u6Q==}
+    engines: {node: '>=12'}
+    dev: false
+
   /randombytes/2.1.0:
     resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
     dependencies:
@@ -5431,6 +5458,11 @@ packages:
     engines: {node: '>=10'}
     dev: true
 
+  /type-fest/2.19.0:
+    resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==}
+    engines: {node: '>=12.20'}
+    dev: false
+
   /type-is/1.6.18:
     resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
     engines: {node: '>= 0.6'}

+ 1 - 1
src/main.ts

@@ -18,7 +18,7 @@ async function bootstrap() {
           format: winston.format.combine(
             winston.format.timestamp({ format: 'DD/MM/YYYY HH:mm:ss' }),
             winston.format.ms(),
-            nestLikeConsoleFormat('MyApp'),
+            nestLikeConsoleFormat('socketV4'),
           ),
         }),
         new winston.transports.DailyRotateFile({

+ 8 - 1
src/room/actions/action.d.ts

@@ -1,5 +1,5 @@
 interface ActionsParams {
-  type: string;
+  type: actionType;
   data: any;
 }
 type actionType =
@@ -19,3 +19,10 @@ type actionType =
   | 'error'
   | 'sync-floor'
   | 'room-valid-time';
+
+interface DanmakuDataType {
+  nickname: string;
+  userId: string;
+  mode: string;
+  text: string;
+}

+ 31 - 1
src/room/actions/actions.service.ts

@@ -2,7 +2,6 @@ import { InjectRedis } from '@liaoliaots/nestjs-redis';
 import { forwardRef, Inject, Injectable } from '@nestjs/common';
 import { Redis } from 'ioredis';
 import { RoomService } from '../room.service';
-
 @Injectable()
 export class ActionsService {
   constructor(
@@ -13,5 +12,36 @@ export class ActionsService {
 
   async handleAllAction(data: ActionsParams): Promise<void> {
     console.log('ActionsParams', data);
+    switch (data.type) {
+      case 'danmumsg':
+        const params = {} as DanmakuDataType;
+        params.mode = data.data.mode;
+        params.nickname = data.data.Nickname;
+        params.text = data.data.text;
+        params.userId = data.data.UserId;
+        this.handleDanmaku(params);
+        break;
+
+      default:
+        break;
+    }
+  }
+
+  async handleDanmaku(data: DanmakuDataType) {
+    console.log('data', data);
+    const roomId = this.roomService._userInfo.RoomId;
+    const time = Date.now();
+    if (roomId) {
+      this.redis.hset(
+        `kankan:socket:roomMsg:${roomId}`,
+        time,
+        JSON.stringify(data),
+      );
+    } else {
+      this.roomService.logger.warn(
+        'handleDanmaku missing roomId ',
+        'ActionsService',
+      );
+    }
   }
 }

+ 1 - 1
src/room/room.service.ts

@@ -15,7 +15,7 @@ export class RoomService {
     private readonly userService: UsersService,
     private readonly actionsService: ActionsService,
   ) {}
-  private readonly logger = new Logger('user');
+  public readonly logger = new Logger('user');
   public _userInfo = {} as UserInfoType;
   private _roomConfig = {} as RoomConfigType;
   private isJoin = false;

+ 3 - 3
src/socket/socket.gateway.ts

@@ -25,11 +25,12 @@ console.log('SOCKET_PATH-0', process.env.SOCKET_PATH);
   // parser: require('socket.io-msgpack-parser'),
 })
 export class SocketGateway
-  implements OnGatewayInit, OnGatewayDisconnect, OnGatewayConnection {
+  implements OnGatewayInit, OnGatewayDisconnect, OnGatewayConnection
+{
   constructor(
     @InjectRedis() private readonly redis: Redis,
     private readonly roomService: RoomService,
-  ) { }
+  ) {}
 
   @WebSocketServer() server: Server;
   async handleConnection(client: any, ...args: any[]) {
@@ -41,7 +42,6 @@ export class SocketGateway
     // console.log('handleDisconnect', client);
   }
   afterInit(server: any) {
-    console.log('SOCKET_PATH-1', process.env.SOCKET_PATH);
     instrument(server, {
       auth: {
         type: 'basic',