summaryrefslogtreecommitdiff
path: root/src/fruits/cmsrv
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2025-11-30 14:32:51 -0500
committerAndrew Opalach <andrew@akon.city> 2025-11-30 14:32:51 -0500
commitc8412bbedae0fce38db96833732e8ce904721e4c (patch)
tree4611046186c714513d042966ce97825df0fecf9e /src/fruits/cmsrv
parent0d6d13425015d78606232874498327cabcb0e4e2 (diff)
downloadcamu-c8412bbedae0fce38db96833732e8ce904721e4c.tar.gz
camu-c8412bbedae0fce38db96833732e8ce904721e4c.tar.bz2
camu-c8412bbedae0fce38db96833732e8ce904721e4c.zip
Build cleanup and fixes from sink testing
Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/fruits/cmsrv')
-rw-r--r--src/fruits/cmsrv/cmsrv.c18
-rw-r--r--src/fruits/cmsrv/meson.build8
-rw-r--r--src/fruits/cmsrv/ui.c6
-rw-r--r--src/fruits/cmsrv/ui.h1
4 files changed, 22 insertions, 11 deletions
diff --git a/src/fruits/cmsrv/cmsrv.c b/src/fruits/cmsrv/cmsrv.c
index ef66be8..babd5ef 100644
--- a/src/fruits/cmsrv/cmsrv.c
+++ b/src/fruits/cmsrv/cmsrv.c
@@ -1,8 +1,7 @@
-#define CMSRV_LOCAL_SOCKET
-#define CMSRV_USE_UI
-
+#define AL_LOG_SECTION "cmsrv"
#include <al/log.h>
#include <nnwt/common.h>
+#define CMSRV_LOCAL_SOCKET
#ifdef CMSRV_LOCAL_SOCKET
#include <nnwt/line_processor.h>
#endif
@@ -15,9 +14,9 @@
#include "../../cache/handlers/cdio.h"
#endif
-#include "../common.h"
-
+#ifdef CMSRV_USE_UI
#include "ui.h"
+#endif
struct cmsrv {
struct nn_event_loop loop;
@@ -186,8 +185,13 @@ s32 main(s32 argc, char *argv[])
nn_signal_start(&s.quit_signal);
signal(SIGINT, sigint_handler);
+ str addr = al_str_c("127.0.0.1");
+ char *CMSRV_IP = getenv("CMSRV_IP");
+ if (CMSRV_IP) addr = al_str_cr(CMSRV_IP);
+ log_info("Serving from %.*s.", al_str_x(&addr));
+
camu_server_init(&s.server, &s.loop);
- if (!camu_server_listen(&s.server, CAMU_TEST_TYPE, &CAMU_TEST_ADDR, CAMU_PORT)) {
+ if (!camu_server_listen(&s.server, NNWT_SOCKET_TCP, &addr, CAMU_PORT)) {
return EXIT_FAILURE;
}
@@ -198,7 +202,7 @@ s32 main(s32 argc, char *argv[])
s.local.cli.userdata = &s;
nn_line_processor_init(&s.local.cli, &al_str_c("\n"));
nn_line_processor_open_socket(&s.local.cli, &s.local.sock);
- if (nn_socket_bind(&s.local.sock, &CAMU_TEST_CONTROL_PATH, 0) && nn_socket_listen(&s.local.sock)) {
+ if (nn_socket_bind(&s.local.sock, &al_str_c("/tmp/camu_control"), 0) && nn_socket_listen(&s.local.sock)) {
nn_line_processor_run(&s.local.cli, &s.loop);
}
#endif
diff --git a/src/fruits/cmsrv/meson.build b/src/fruits/cmsrv/meson.build
index b12d00d..bfeabe0 100644
--- a/src/fruits/cmsrv/meson.build
+++ b/src/fruits/cmsrv/meson.build
@@ -2,14 +2,14 @@ cmsrv_src = ['cmsrv.c']
cmsrv_deps = [common_deps, server]
cmsrv_args = []
-use_tui = true
-if use_tui
+if use_tuis
cmsrv_src += ['ui.c']
cmsrv_deps += [notcurses_core]
+ cmsrv_args += ['-DCMSRV_USE_UI']
endif
if is_windows and not is_msvc
- cmsrv_args += ['-static', '-static-libgcc', '-static-libstdc++', '-municode', '-mwindows']
+ cmsrv_args += ['-static', '-static-libgcc', '-static-libstdc++', '-mwindows', '-municode']
endif
-executable('cmsrv', cmsrv_src, dependencies: cmsrv_deps, link_args: cmsrv_args, install: true)
+executable('cmsrv', cmsrv_src, dependencies: cmsrv_deps, c_args: cmsrv_args, link_args: cmsrv_args, install: true)
diff --git a/src/fruits/cmsrv/ui.c b/src/fruits/cmsrv/ui.c
index d96c09d..afbee58 100644
--- a/src/fruits/cmsrv/ui.c
+++ b/src/fruits/cmsrv/ui.c
@@ -29,6 +29,7 @@ bool cmsrv_ui_init(struct cmsrv_ui *ui, struct camu_server *server)
ncplane_set_userptr(stdplane, ui);
ui->pending_layout = true;
al_array_init(ui->log.messages);
+ nn_mutex_init(&ui->log.lock);
return true;
}
@@ -51,7 +52,9 @@ void cmsrv_ui_set_pane(struct cmsrv_ui *ui, u8 pane)
void cmsrv_ui_push_message(struct cmsrv_ui *ui, char *message)
{
+ nn_mutex_lock(&ui->log.lock);
al_array_push(ui->log.messages, message);
+ nn_mutex_unlock(&ui->log.lock);
}
static void layout_log(struct cmsrv_ui *ui, struct ncplane *parent)
@@ -80,6 +83,7 @@ static void render_log(struct cmsrv_ui *ui)
u32 max_width = ncplane_dim_x(n) - 2;
u32 max_height = ncplane_dim_y(n) - 2;
+ nn_mutex_lock(&ui->log.lock);
u32 size = ui->log.messages.count;
if (size > max_height) {
u32 index = size - max_height;
@@ -97,6 +101,7 @@ static void render_log(struct cmsrv_ui *ui)
// messages will have wide characters.
ncplane_putstr_yx(n, y, x, al_array_at(ui->log.messages, i));
}
+ nn_mutex_unlock(&ui->log.lock);
u64 c = 0;
ncchannels_set_fg_default(&c);
@@ -251,4 +256,5 @@ void cmsrv_ui_close(struct cmsrv_ui *ui)
al_free(message);
}
al_array_free(ui->log.messages);
+ nn_mutex_destroy(&ui->log.lock);
}
diff --git a/src/fruits/cmsrv/ui.h b/src/fruits/cmsrv/ui.h
index ebf7c1a..3615d3b 100644
--- a/src/fruits/cmsrv/ui.h
+++ b/src/fruits/cmsrv/ui.h
@@ -19,6 +19,7 @@ struct cmsrv_ui {
struct {
struct ncplane *n;
array(char *) messages;
+ struct nn_mutex lock;
} log;
struct {
struct ncplane *n;