42 lines
1.2 KiB
TypeScript
42 lines
1.2 KiB
TypeScript
import type { SfuSessionDescriptor, SfuSessionState } from './types';
|
|
|
|
type StoredSfuSession = SfuSessionDescriptor & {
|
|
updatedAt: string;
|
|
};
|
|
|
|
export class SfuSessionRegistry {
|
|
private readonly sessions = new Map<string, StoredSfuSession>();
|
|
|
|
get(streamSessionId: string): SfuSessionDescriptor | null {
|
|
const found = this.sessions.get(streamSessionId);
|
|
if (!found) return null;
|
|
const { updatedAt: _updatedAt, ...descriptor } = found;
|
|
return descriptor;
|
|
}
|
|
|
|
set(session: SfuSessionDescriptor): SfuSessionDescriptor {
|
|
const now = new Date().toISOString();
|
|
this.sessions.set(session.streamSessionId, { ...session, updatedAt: now });
|
|
return session;
|
|
}
|
|
|
|
updateState(streamSessionId: string, state: SfuSessionState): SfuSessionDescriptor | null {
|
|
const existing = this.sessions.get(streamSessionId);
|
|
if (!existing) return null;
|
|
|
|
const next: StoredSfuSession = {
|
|
...existing,
|
|
state,
|
|
updatedAt: new Date().toISOString(),
|
|
};
|
|
this.sessions.set(streamSessionId, next);
|
|
const { updatedAt: _updatedAt, ...descriptor } = next;
|
|
return descriptor;
|
|
}
|
|
|
|
list(): SfuSessionDescriptor[] {
|
|
return Array.from(this.sessions.values()).map(({ updatedAt: _updatedAt, ...descriptor }) => descriptor);
|
|
}
|
|
}
|
|
|