diff --git a/src/index.ts b/src/index.ts index 77d754b..dfb2672 100644 --- a/src/index.ts +++ b/src/index.ts @@ -13,8 +13,6 @@ let inputs: Record = {}; let scenes: Record = {}; const settingsP: Promise = $MM.getSettings(); let settings: Settings; -let wsConnected = false; -let wsConnecting = false; const connect = async () => { settings = await settingsP; @@ -67,15 +65,7 @@ const registerListeners = () => { obs.on("ExitStarted", () => { disconnect(); - - (async () => { - while (!wsConnected) { - await new Promise(f => setTimeout(f, 1000)); - if (!wsConnecting) { - init(); - } - } - })(); + init(); }) }; @@ -159,10 +149,8 @@ const mapScenes = async () => { }); }; - function disconnect() { console.log("Disconnecting"); - wsConnected = false; obs.disconnect(); for (let k in inputs) { let s = inputs[k]; @@ -177,27 +165,35 @@ function disconnect() { const init = async () => { console.log("Initializing"); - obs.disconnect(); - inputs = {}; - scenes = {}; - - wsConnecting = true; - try { - $MM.setSettingsStatus("status", "Connecting..."); - - await connect(); - registerListeners(); - await Promise.all([mapSources(), mapScenes()]); - - $MM.setSettingsStatus("status", "Connected"); - wsConnected = true; - } catch (err: any) { - console.warn("OBS error:", err); - $MM.setSettingsStatus("status", err.description || err.message || err); + + let wsConnected = false; + while (!wsConnected) { + obs.disconnect(); + inputs = {}; + scenes = {}; + + try { + $MM.setSettingsStatus("status", "Connecting..."); + + await connect(); + registerListeners(); + await Promise.all([mapSources(), mapScenes()]); + + $MM.setSettingsStatus("status", "Connected"); + wsConnected = true; + } catch (err: any) { + console.warn("OBS error:", err); + $MM.setSettingsStatus("status", err.description || err.message || err); + + await delay(1000); + } } - wsConnecting = false; }; +const delay = (delayMs: number) => { + return new Promise(resolve => setTimeout(resolve, delayMs)); +} + $MM.onSettingsButtonPress("reconnect", init); init();