async run()

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`
      );
    }
  }