summaryrefslogtreecommitdiff
path: root/src/modules/rkt
diff options
context:
space:
mode:
authorVito Caputo <vcaputo@pengaru.com>2023-07-05 20:11:21 -0700
committerVito Caputo <vcaputo@pengaru.com>2023-07-05 20:11:21 -0700
commita96a3c4b6d59451a92540440db724274421e86e5 (patch)
treec0fb07f3b7be6a29d70934446c34a2edd7ccdc94 /src/modules/rkt
parentaaa646fef2c7b1af8ec2374033b2a9c87f170768 (diff)
modules/rkt: basic support for Rocket reconnects
This changes things so rkt won't exit with an error @ startup if RocketEditor isn't already listening. It also tolerates RocketEditor going away, and will show a "OFFLINE" overlay status text should that happen w/connect=on. Some status text has also been added to the "EXIT SCENE" 99999 scene for both the RocketEditor connection and the scener enabled/disabled status. No indicator yet for if scener has a connection though, only if it's listening or not via listen=on.
Diffstat (limited to 'src/modules/rkt')
-rw-r--r--src/modules/rkt/rkt.c41
-rw-r--r--src/modules/rkt/rkt.h1
2 files changed, 33 insertions, 9 deletions
diff --git a/src/modules/rkt/rkt.c b/src/modules/rkt/rkt.c
index d8bab4b..ab9d460 100644
--- a/src/modules/rkt/rkt.c
+++ b/src/modules/rkt/rkt.c
@@ -181,13 +181,18 @@ static int rkt_pipe_update(void *context, til_stream_pipe_t *pipe, const void *o
static void rkt_update_rocket(rkt_context_t *ctxt, unsigned ticks)
{
+ rkt_setup_t *s = (rkt_setup_t *)ctxt->til_module_context.setup;
+
if (!ctxt->paused)
ctxt->rocket_row += ((double)(ticks - ctxt->last_ticks)) * ctxt->rows_per_ms;
ctxt->last_ticks = ticks;
- /* ctxt->rocket_row needs to be updated */
- sync_update(ctxt->sync_device, ctxt->rocket_row, &rkt_sync_cb, ctxt);
+ if (!s->connect)
+ return;
+
+ if (!ctxt->connected || sync_update(ctxt->sync_device, ctxt->rocket_row, &rkt_sync_cb, ctxt) < 0)
+ ctxt->connected = !sync_tcp_connect(ctxt->sync_device, s->host, s->port);
}
@@ -212,11 +217,8 @@ static til_module_context_t * rkt_create_context(const til_module_t *module, til
if (!ctxt->sync_device)
return til_module_context_free(&ctxt->til_module_context);
- if (s->connect) {
- /* XXX: it'd be better if we just reconnected periodically instead of hard failing */
- if (sync_tcp_connect(ctxt->sync_device, s->host, s->port))
- return til_module_context_free(&ctxt->til_module_context);
- }
+ if (s->connect && !sync_tcp_connect(ctxt->sync_device, s->host, s->port))
+ ctxt->connected = 1;
ctxt->scene_track = sync_get_trackf(ctxt->sync_device, "%s:scene", setup->path);
if (!ctxt->scene_track)
@@ -283,10 +285,12 @@ static void rkt_render_fragment(til_module_context_t *context, til_stream_t *str
/* 99999 is treated as an "end of sequence" scene, but only honored when connect=off (player mode) */
til_stream_end(stream);
} else {
- txt_t *msg = txt_newf("%s: %s @ %u",
+ txt_t *msg = txt_newf("%s: %s @ %u [%s] [%s]",
context->setup->path,
scene == 99999 ? "EXIT SCENE" : "NO SCENE",
- scene);
+ scene,
+ ((rkt_setup_t *)context->setup)->connect ? (ctxt->connected ? "ONLINE" : "OFFLINE") : "PLAYER",
+ ctxt->scener ? "SCENER" : "NOSCENER");
/* TODO: creating/destroying this every frame is dumb, but
* as this is a diagnostic it's not so important.
@@ -304,6 +308,25 @@ static void rkt_render_fragment(til_module_context_t *context, til_stream_t *str
});
txt_free(msg);
}
+
+ if (scene < ctxt->n_scenes &&
+ scene != 999999 &&
+ ((rkt_setup_t *)context->setup)->connect && !ctxt->connected) {
+ txt_t *msg = txt_newf("OFFLINE");
+
+ /* TODO: as mentioned above, creating/destroying this every frame is dumb,
+ * will revisit the status text in the future. Not a huge priority since
+ * none of this should be active in "production" playback mode.
+ */
+ txt_render_fragment(msg, *fragment_ptr, 0xffffffff,
+ 0, 0,
+ (txt_align_t){
+ .horiz = TXT_HALIGN_LEFT,
+ .vert = TXT_VALIGN_TOP,
+ });
+
+ txt_free(msg);
+ }
}
}
diff --git a/src/modules/rkt/rkt.h b/src/modules/rkt/rkt.h
index b06c6a4..ae0fa64 100644
--- a/src/modules/rkt/rkt.h
+++ b/src/modules/rkt/rkt.h
@@ -21,6 +21,7 @@ typedef struct rkt_context_t {
double rocket_row;
unsigned last_ticks;
unsigned paused:1;
+ unsigned connected:1; /* currently connected to the RocketEditor */
size_t n_scenes;
rkt_scene_t *scenes;
unsigned scene; /* current scene (usually driven by the scene track data,
© All Rights Reserved