in src/task/OpenSignalingConnectionTask.ts [29:78]
async run(): Promise<void> {
const configuration = this.context.meetingSessionConfiguration;
this.context.signalingClient.openConnection(
new SignalingClientConnectionRequest(
configuration.urls.signalingURL,
configuration.credentials.joinToken
)
);
const startTimeMs = Date.now();
try {
await new Promise<void>((resolve, reject) => {
class WebSocketOpenInterceptor implements SignalingClientObserver, TaskCanceler {
constructor(private signalingClient: SignalingClient) {}
cancel(): void {
this.signalingClient.removeObserver(this);
reject(
new Error(
`OpenSignalingConnectionTask got canceled while waiting to open signaling connection`
)
);
}
handleSignalingClientEvent(event: SignalingClientEvent): void {
switch (event.type) {
case SignalingClientEventType.WebSocketOpen:
this.signalingClient.removeObserver(this);
resolve();
break;
case SignalingClientEventType.WebSocketFailed:
this.signalingClient.removeObserver(this);
reject(new Error('WebSocket connection failed'));
break;
}
}
}
const interceptor = new WebSocketOpenInterceptor(this.context.signalingClient);
this.context.signalingClient.registerObserver(interceptor);
this.taskCanceler = interceptor;
});
} catch (error) {
throw error;
} finally {
this.context.signalingOpenDurationMs = Math.round(Date.now() - startTimeMs);
this.logger.info(
`Opening signaling connection took ${this.context.signalingOpenDurationMs} ms`
);
}
}