Track stream deaths in Raygun for troubleshooting

This commit is contained in:
Marks Polakovs 2020-05-05 20:39:34 +02:00
parent d7f06ac4fb
commit df73be6a91
3 changed files with 14 additions and 5 deletions

View file

@ -1,6 +1,8 @@
import SdpTransform from "sdp-transform"; import SdpTransform from "sdp-transform";
import * as later from "later"; import * as later from "later";
import raygun from "raygun4js";
import * as BroadcastState from "./state"; import * as BroadcastState from "./state";
import { Streamer, ConnectionStateEnum } from "./streamer"; import { Streamer, ConnectionStateEnum } from "./streamer";
@ -56,7 +58,10 @@ export class WebRTCStreamer extends Streamer {
console.log("WS created"); console.log("WS created");
} }
async stop(): Promise<void> { async stop(reason?: string): Promise<void> {
raygun("send", {
error: new Error("Connection stop due to " + reason)
});
if (this.ws) { if (this.ws) {
this.ws.close(); this.ws.close();
this.ws = null as any; this.ws = null as any;
@ -181,7 +186,7 @@ export class WebRTCStreamer extends Streamer {
// oo-er // oo-er
// server thinks we've lost connection // server thinks we've lost connection
// kill it on our end and trigger a reconnect // kill it on our end and trigger a reconnect
await this.stop(); await this.stop("server DIED");
await this.start(); await this.start();
this.unexpectedDeath = true; this.unexpectedDeath = true;
break; break;
@ -203,13 +208,16 @@ export class WebRTCStreamer extends Streamer {
...iceServers, ...iceServers,
], ],
}); });
this.pc.oniceconnectionstatechange = (e) => { this.pc.oniceconnectionstatechange = async (e) => {
if (!this.pc) { if (!this.pc) {
throw new Error( throw new Error(
"Received ICEConnectionStateChange but PC was null?????" "Received ICEConnectionStateChange but PC was null?????"
); );
} }
console.log("ICE Connection state change: " + this.pc.iceConnectionState); console.log("ICE Connection state change: " + this.pc.iceConnectionState);
if (this.pc.iceConnectionState === "failed") {
await this.stop("ICE failure");
}
this.onStateChange(this.mapStateToConnectionState()); this.onStateChange(this.mapStateToConnectionState());
}; };
this.stream.getAudioTracks().forEach((track) => this.pc!.addTrack(track)); this.stream.getAudioTracks().forEach((track) => this.pc!.addTrack(track));

View file

@ -144,7 +144,7 @@ export const registerForShow = (): AppThunk => async (dispatch, getState) => {
}) })
); );
if (streamer) { if (streamer) {
await streamer.stop(); await streamer.stop("ApiException " + e.message);
} }
} else { } else {
// let raygun handle it // let raygun handle it
@ -322,7 +322,7 @@ export const goOnAir = (): AppThunk => async (dispatch, getState) => {
export const stopStreaming = (): AppThunk => async (dispatch) => { export const stopStreaming = (): AppThunk => async (dispatch) => {
if (streamer) { if (streamer) {
await streamer.stop(); await streamer.stop("stopStreaming call");
streamer = null; streamer = null;
} else { } else {
console.warn("disconnect called with no streamer!"); console.warn("disconnect called with no streamer!");

View file

@ -306,3 +306,4 @@ export class AudioEngine extends ((EngineEmitter as unknown) as {
} }
export const audioEngine = new AudioEngine(); export const audioEngine = new AudioEngine();
(window as any).AE = audioEngine;