openvidu/backend/tests/helpers/event-controller.ts

74 lines
2.2 KiB
TypeScript

import { container } from '../../src/config/index.js';
import { DistributedEventType } from '../../src/models';
import { DistributedEventService } from '../../src/services';
export const eventController = {
systemEventService: undefined as unknown as DistributedEventService,
pausedEvents: new Map<string, Array<{ eventType: string; payload: any }>>(),
isInitialized: false,
originalEmit: null as any,
initialize() {
if (this.isInitialized) return;
this.systemEventService = container.get(DistributedEventService);
this.originalEmit = this.systemEventService['emitter'].emit;
this.pausedEvents.clear();
this.isInitialized = true;
// Replace the emit method to intercept events
this.systemEventService['emitter'].emit = (eventType: string, payload: any) => {
console.log(`Event intercepted: ${eventType}`, payload);
// Check if the event is paused for the room
if (
eventType === DistributedEventType.RECORDING_ACTIVE &&
payload?.roomId &&
this.pausedEvents.has(payload.roomId)
) {
console.log(`🔴 Pausing event ${eventType} for room ${payload.roomId}`);
// Save the event to the pausedEvents map
this.pausedEvents.get(payload.roomId)?.push({ eventType, payload });
return true;
}
return this.originalEmit.call(this.systemEventService['emitter'], eventType, payload);
};
},
pauseEventsForRoom(roomId: string) {
if (!this.isInitialized) this.initialize();
console.log(`🟠 Setting up pause for events in room: ${roomId}`);
this.pausedEvents.set(roomId, []);
},
releaseEventsForRoom(roomId: string) {
const events = this.pausedEvents.get(roomId) || [];
this.pausedEvents.delete(roomId);
console.log(`🟢 Releasing ${events.length} events for room ${roomId}`);
events.forEach(({ eventType, payload }) => {
console.log(` Releasing event: ${eventType}`, payload);
this.originalEmit.call(this.systemEventService['emitter'], eventType, payload);
});
},
releaseAllEvents() {
for (const roomId of this.pausedEvents.keys()) {
this.releaseEventsForRoom(roomId);
}
},
reset() {
if (!this.isInitialized) return;
this.systemEventService['emitter'].emit = this.originalEmit;
this.pausedEvents.clear();
this.isInitialized = false;
}
};