diff --git a/lib/obs_manager.gd b/lib/obs_manager.gd index 47e1ba0b..63880882 100644 --- a/lib/obs_manager.gd +++ b/lib/obs_manager.gd @@ -1,18 +1,34 @@ extends Node -var obs: NoOBSWS signal obs_ready() signal obs_disconnect() signal stream_state_changed(state: bool) signal input_state_changed(input_name: String, state: bool) signal scene_changed(scene_name: String, scene_uuid: String) + +static var _log: TwitchLogger = TwitchLogger.new(&"ObsManager", true, true) + +var obs: NoOBSWS +var _reconnect: bool = false + # Called when the node enters the scene tree for the first time. func _ready() -> void: obs = NoOBSWS.new() add_child(obs) obs.event_received.connect(_handle_websock_events) - obs.connection_ready.connect(obs_ready.emit) + obs.connection_ready.connect(func(): + _reconnect = false + obs_ready.emit() + _log.i("Connected to OBS WebSocket server.") + ) obs.connection_closed_clean.connect(_handle_disconnect) + obs.connection_failed.connect(func(): + _log.i("Failed to connect to server.") + if Globals.settings.obs_reconnect: + await get_tree().create_timer(15).timeout + _reconnect = true + connect_to_host() + ) func is_open() -> bool: return obs.is_open() @@ -23,11 +39,14 @@ func connect_to_host() -> void: Globals.settings.obs_pass != ""): return + _log.i("%s to OBS WebSocket server..." % "Reconnecting" if _reconnect else "Connecting") + if _reconnect: _reconnect = false obs.connect_to_obsws(Globals.settings.obs_port, Globals.settings.obs_host, Globals.settings.obs_pass) -func _handle_disconnect(reason: int, message: String) -> void: +func _handle_disconnect(_reason: int, _message: String) -> void: obs_disconnect.emit() if Globals.settings.obs_reconnect: + _reconnect = true connect_to_host() func _handle_websock_events(event: NoOBSWS.Message) -> void: