mirror of
https://github.com/immich-app/immich.git
synced 2026-03-04 09:57:33 +03:00
refactor(server): event emits (#10648)
* refactor(server): event emits * refactor: change default priority to 0
This commit is contained in:
@@ -10,8 +10,9 @@ import {
|
||||
import { Server, Socket } from 'socket.io';
|
||||
import {
|
||||
ClientEventMap,
|
||||
EmitEvent,
|
||||
EmitEventHandler,
|
||||
IEventRepository,
|
||||
ServerAsyncEventMap,
|
||||
ServerEvent,
|
||||
ServerEventMap,
|
||||
} from 'src/interfaces/event.interface';
|
||||
@@ -27,6 +28,8 @@ import { Instrumentation } from 'src/utils/instrumentation';
|
||||
})
|
||||
@Injectable()
|
||||
export class EventRepository implements OnGatewayConnection, OnGatewayDisconnect, OnGatewayInit, IEventRepository {
|
||||
private emitHandlers: Partial<Record<EmitEvent, EmitEventHandler<EmitEvent>[]>> = {};
|
||||
|
||||
@WebSocketServer()
|
||||
private server?: Server;
|
||||
|
||||
@@ -71,6 +74,18 @@ export class EventRepository implements OnGatewayConnection, OnGatewayDisconnect
|
||||
await client.leave(client.nsp.name);
|
||||
}
|
||||
|
||||
on<T extends EmitEvent>(event: T, handler: EmitEventHandler<T>): void {
|
||||
const handlers: EmitEventHandler<EmitEvent>[] = this.emitHandlers[event] || [];
|
||||
this.emitHandlers[event] = [...handlers, handler];
|
||||
}
|
||||
|
||||
async emit<T extends EmitEvent>(event: T, ...args: Parameters<EmitEventHandler<T>>): Promise<void> {
|
||||
const handlers = this.emitHandlers[event] || [];
|
||||
for (const handler of handlers) {
|
||||
await handler(...args);
|
||||
}
|
||||
}
|
||||
|
||||
clientSend<E extends keyof ClientEventMap>(event: E, userId: string, data: ClientEventMap[E]) {
|
||||
this.server?.to(userId).emit(event, data);
|
||||
}
|
||||
@@ -84,8 +99,4 @@ export class EventRepository implements OnGatewayConnection, OnGatewayDisconnect
|
||||
this.server?.serverSideEmit(event, data);
|
||||
return this.eventEmitter.emit(event, data);
|
||||
}
|
||||
|
||||
serverSendAsync<E extends keyof ServerAsyncEventMap, R = any[]>(event: E, data: ServerAsyncEventMap[E]): Promise<R> {
|
||||
return this.eventEmitter.emitAsync(event, data) as Promise<R>;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user