fix: broadcast event add joinedAt

Signed-off-by: Innei <i@innei.in>
This commit is contained in:
Innei
2024-02-16 13:03:32 +08:00
parent 9c2b19c8d8
commit d1704d8450
3 changed files with 19 additions and 7 deletions

View File

@@ -313,8 +313,15 @@ export class ActivityService implements OnModuleInit, OnModuleDestroy {
ip,
}
Reflect.deleteProperty(presenceData, 'ts')
const serializedPresenceData = omit(presenceData, 'ip')
const roomJoinedAtMap =
await this.webGateway.getSocketRoomJoinedAtMap(socket)
Reflect.set(serializedPresenceData, 'joinedAt', roomJoinedAtMap[roomName])
this.webGateway.broadcast(
BusinessEvents.ACTIVITY_UPDATE_PRESENCE,
serializedPresenceData,

View File

@@ -12,7 +12,7 @@ import { getRedisKey, safeJSONParse } from '~/utils'
import { CacheService } from '../redis/cache.service'
type SocketType =
export type SocketType =
| Socket<DefaultEventsMap, DefaultEventsMap, DefaultEventsMap, any>
| RemoteSocket<
DecorateAcknowledgementsWithMultipleResponses<DefaultEventsMap>,

View File

@@ -11,6 +11,7 @@ import type {
DecorateAcknowledgementsWithMultipleResponses,
DefaultEventsMap,
} from 'socket.io/dist/typed-events'
import type { SocketType } from '../gateway.service'
import type { EventGatewayHooks } from './hook.interface'
import {
@@ -125,9 +126,7 @@ export class WebEventsGateway
socket.join(roomName)
this.hooks.onJoinRoom.forEach((fn) => fn(socket, roomName))
const roomJoinedAtMap =
(await this.gatewayService.getSocketMetadata(socket))
?.roomJoinedAtMap || {}
const roomJoinedAtMap = await this.getSocketRoomJoinedAtMap(socket)
roomJoinedAtMap[roomName] = Date.now()
@@ -143,9 +142,7 @@ export class WebEventsGateway
socket.leave(roomName)
this.hooks.onLeaveRoom.forEach((fn) => fn(socket, roomName))
const roomJoinedAtMap =
(await this.gatewayService.getSocketMetadata(socket))
?.roomJoinedAtMap || {}
const roomJoinedAtMap = await this.getSocketRoomJoinedAtMap(socket)
delete roomJoinedAtMap[roomName]
await this.gatewayService.setSocketMetadata(socket, {
roomJoinedAtMap,
@@ -288,4 +285,12 @@ export class WebEventsGateway
}
return roomToSocketsMap
}
public async getSocketRoomJoinedAtMap(socket: SocketType) {
const roomJoinedAtMap =
(await this.gatewayService.getSocketMetadata(socket))?.roomJoinedAtMap ||
{}
return roomJoinedAtMap
}
}