-
Notifications
You must be signed in to change notification settings - Fork 13.3k
Expand file tree
/
Copy pathTransportWrapper.ts
More file actions
55 lines (48 loc) · 1.79 KB
/
TransportWrapper.ts
File metadata and controls
55 lines (48 loc) · 1.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import type { CallAnswer, CallHangupReason } from '../definition';
import type { IMediaSignalLogger } from '../definition/logger';
import type {
MediaSignalTransport,
ClientMediaSignalType,
ClientMediaSignalBody,
GenericClientMediaSignal,
ClientMediaSignal,
ClientMediaSignalError,
} from '../definition/signals';
export class MediaSignalTransportWrapper {
constructor(
public readonly contractId: string,
private sendSignalFn: MediaSignalTransport<ClientMediaSignal>,
private logger?: IMediaSignalLogger,
) {}
public sendToServer<T extends ClientMediaSignalType>(callId: string, type: T, signal: ClientMediaSignalBody<T>) {
this.logger?.debug('MediaSignalTransportWrapper.sendToServer', type);
return this.sendSignal({
...(type !== 'register' && { callId }),
contractId: this.contractId,
type,
...signal,
} as GenericClientMediaSignal<T>);
}
public sendError(callId: string, { errorType, errorCode, negotiationId, critical, errorDetails }: Partial<ClientMediaSignalError>) {
this.sendToServer(callId, 'error', {
errorType: errorType || 'other',
...(errorCode && { errorCode }),
...(negotiationId && { negotiationId }),
...(critical ? { critical } : { critical: false }),
...(errorDetails && { errorDetails }),
});
}
public answer(callId: string, answer: CallAnswer) {
return this.sendToServer(callId, 'answer', { answer });
}
public hangup(callId: string, reason: CallHangupReason) {
return this.sendToServer(callId, 'hangup', { reason });
}
public requestRenegotiation(callId: string, oldNegotiationId: string) {
return this.sendToServer(callId, 'negotiation-needed', { oldNegotiationId });
}
public sendSignal(signal: ClientMediaSignal): void {
this.logger?.debug('MediaSignalTransportWrapper.sendSignal', signal);
this.sendSignalFn(signal);
}
}