diff --git a/src/main/kotlin/net/eksb/obsdc/DBus.kt b/src/main/kotlin/net/eksb/obsdc/DBus.kt index cddf67d..bb77b9e 100644 --- a/src/main/kotlin/net/eksb/obsdc/DBus.kt +++ b/src/main/kotlin/net/eksb/obsdc/DBus.kt @@ -14,7 +14,7 @@ class DBus(private val q: Queue) { private val thread = thread( start = true, - isDaemon = false, + isDaemon = true, name = "dbus", ) { DBusConnectionBuilder.forSessionBus().build().use { dbus -> diff --git a/src/main/kotlin/net/eksb/obsdc/Main.kt b/src/main/kotlin/net/eksb/obsdc/Main.kt index d7fe2f6..e0cd3ea 100644 --- a/src/main/kotlin/net/eksb/obsdc/Main.kt +++ b/src/main/kotlin/net/eksb/obsdc/Main.kt @@ -7,7 +7,7 @@ object Main { @JvmStatic fun main(args: Array) { val q:BlockingQueue = LinkedBlockingQueue() - DBus(q) // forks non-daemon thread + DBus(q) // forks daemon thread ObsCommunity(q).run() // blocks } } \ No newline at end of file diff --git a/src/main/kotlin/net/eksb/obsdc/ObsCommunity.kt b/src/main/kotlin/net/eksb/obsdc/ObsCommunity.kt index 2ea30d3..fcbf17e 100644 --- a/src/main/kotlin/net/eksb/obsdc/ObsCommunity.kt +++ b/src/main/kotlin/net/eksb/obsdc/ObsCommunity.kt @@ -1,9 +1,11 @@ package net.eksb.obsdc import io.obswebsocket.community.client.OBSRemoteController +import io.obswebsocket.community.client.message.event.ui.StudioModeStateChangedEvent import org.slf4j.LoggerFactory import java.util.concurrent.BlockingQueue +// protocol docs: https://github.com/obsproject/obs-websocket/blob/master/docs/generated/protocol.md class ObsCommunity(private val q:BlockingQueue): AutoCloseable { private val controller = OBSRemoteController.builder() @@ -11,7 +13,17 @@ class ObsCommunity(private val q:BlockingQueue): AutoCloseable { .port(4455) .password("R3tRkVXhFofJ2wRF") // TODO put this in a file .autoConnect(false) - .lifecycle().onReady(::ready).and() + .connectionTimeout(3) + .lifecycle() + .onReady(::ready) + .onClose { code -> log.error("closed:${code}")} + .onControllerError { e -> log.error("controller error", e ) } + .onCommunicatorError { e -> log.error("comm error", e ) } + .onDisconnect { log.info("disconnected") } + .and() + .registerEventListener(StudioModeStateChangedEvent::class.java) { + log.info("studio mode state change: ${it}") + } .build() fun run() { @@ -23,21 +35,31 @@ class ObsCommunity(private val q:BlockingQueue): AutoCloseable { } private fun ready() { - while (true) { - val op: Op = q.take() // blocks - log.info("op: ${op}") - op(op) - } + log.info("ready") + val op: Op = q.take() // blocks + log.info("op: ${op}") + op(op) } private fun op(op:Op) { when(op) { + Op.SCENE_TEST -> { + controller.setCurrentProgramScene("test") { response -> + log.info("set scene response: ${response.isSuccessful}") + ready() + } + } Op.STUDIO_TRANSITION -> { controller.triggerStudioModeTransition { response -> // This does not get called? log.info("Response successful: ${response.isSuccessful}") + ready() } } + Op.TODO -> { + log.info("OP=TODO") + ready() + } } } @@ -45,6 +67,3 @@ class ObsCommunity(private val q:BlockingQueue): AutoCloseable { private val log = LoggerFactory.getLogger(ObsCommunity::class.java) } } - -// Move window: -// https://github.com/obsproject/obs-websocket/blob/master/docs/generated/protocol.md#setsceneitemtransform diff --git a/src/main/kotlin/net/eksb/obsdc/Op.kt b/src/main/kotlin/net/eksb/obsdc/Op.kt index 85eb8be..3d30c4f 100644 --- a/src/main/kotlin/net/eksb/obsdc/Op.kt +++ b/src/main/kotlin/net/eksb/obsdc/Op.kt @@ -2,5 +2,7 @@ package net.eksb.obsdc enum class Op { STUDIO_TRANSITION, + SCENE_TEST, + TODO, ; } \ No newline at end of file