From a6d104090ef752126766ef237db1ff1dc6b966f0 Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Mon, 7 Apr 2025 12:37:15 -0400 Subject: cmc cleanup and testing - Add waveform drawing notes. Signed-off-by: Andrew Opalach --- src/server/server.c | 90 +++++++++++++++++++++++++++++++---------------------- 1 file changed, 53 insertions(+), 37 deletions(-) (limited to 'src/server') diff --git a/src/server/server.c b/src/server/server.c index d7ff702..467067a 100644 --- a/src/server/server.c +++ b/src/server/server.c @@ -23,23 +23,12 @@ static struct camu_user *get_user_by_username(struct camu_server *server, str *u { struct camu_user *user; al_array_foreach(server->users, i, user) { - if (al_str_eq(&user->name, username)) { - return user; - } - } - return NULL; -} - -static struct camu_server_client *get_client_by_connection(struct camu_server *server, struct nn_rpc_connection *conn) -{ - struct camu_server_client *client; - al_array_foreach(server->clients, i, client) { - if (client->conn == conn) return client; + if (al_str_eq(&user->name, username)) return user; } return NULL; } -static struct lia_list *get_list_from_name(struct camu_server *server, str *name) +static struct lia_list *get_list_by_name(struct camu_server *server, str *name) { struct lia_list *list; al_array_foreach(server->lists, i, list) { @@ -48,7 +37,7 @@ static struct lia_list *get_list_from_name(struct camu_server *server, str *name return NULL; } -static struct camu_server_sink *get_sink_from_name(struct camu_server *server, str *name) +static struct camu_server_sink *get_sink_by_name(struct camu_server *server, str *name) { struct camu_server_sink *sink; al_array_foreach(server->sinks, i, sink) { @@ -57,6 +46,15 @@ static struct camu_server_sink *get_sink_from_name(struct camu_server *server, s return NULL; } +static struct camu_server_client *get_client_by_connection(struct camu_server *server, struct nn_rpc_connection *conn) +{ + struct camu_server_client *client; + al_array_foreach(server->clients, i, client) { + if (client->conn == conn) return client; + } + return NULL; +} + static void write_list_entry(struct lia_list_entry *entry, struct nn_packet *packet) { nn_packet_write_u32(packet, entry->id); @@ -107,7 +105,7 @@ static bool identify_callback(void *userdata, struct nn_rpc_connection *conn, struct camu_server_node *node = al_alloc_object(struct camu_server_node); node->conn = conn; al_array_push(server->nodes, node); - info("New node."); + log_info("New node."); break; } case CAMU_CLIENT: { @@ -123,7 +121,7 @@ static bool identify_callback(void *userdata, struct nn_rpc_connection *conn, } client->user = user; al_array_push(server->clients, client); - info("User \"%.*s\" logged in.", al_str_x(&user->name)); + log_info("User \"%.*s\" logged in.", al_str_x(&user->name)); write_initial_user_state(server, user, rpacket); break; } @@ -136,7 +134,7 @@ static bool identify_callback(void *userdata, struct nn_rpc_connection *conn, sink->server = server; al_array_push(server->sinks, sink); handle_toggle_sink(server, &al_str_c("default"), sink, true); - info("New sink."); + log_info("New sink."); break; } } @@ -201,7 +199,7 @@ static void list_sink_callback(void *userdata, u8 op, struct lia_list_entry *ent void handle_toggle_sink(struct camu_server *server, str *name, struct camu_server_sink *sink, bool enable) { - struct lia_list *list = get_list_from_name(server, name); + struct lia_list *list = get_list_by_name(server, name); if (!list) return; if (enable) lia_list_add_sink(list, list_sink_callback, sink); else lia_list_remove_sink(list, sink); @@ -236,6 +234,18 @@ static void node_callback(void *userdata, u8 op, u64 duration) process_pending(resource); } +static void send_clients_added_entry(struct camu_server *server, struct lia_list *list, struct lia_list_entry *entry) +{ + struct camu_server_client *client; + al_array_foreach(server->clients, i, client) { + struct nn_packet *packet = nn_rpc_get_packet(client->conn->rpc, CAMU_CLIENT_META); + nn_packet_write_u8(packet, LIANA_META_ADDED_ENTRY); + nn_packet_write_str(packet, &list->name); + write_list_entry(entry, packet); + nn_rpc_connection_command(client->conn, packet, NULL, NULL); + } +} + static void send_clients_current_changed(struct camu_server *server, struct lia_list *list, struct lia_list_entry *entry) { struct camu_server_client *client; @@ -249,14 +259,18 @@ static void send_clients_current_changed(struct camu_server *server, struct lia_ } } -static void send_clients_added_entry(struct camu_server *server, struct lia_list *list, struct lia_list_entry *entry) +static void send_clients_order_changed(struct camu_server *server, struct lia_list *list) { struct camu_server_client *client; al_array_foreach(server->clients, i, client) { struct nn_packet *packet = nn_rpc_get_packet(client->conn->rpc, CAMU_CLIENT_META); - nn_packet_write_u8(packet, LIANA_META_ADDED_ENTRY); + nn_packet_write_u8(packet, LIANA_META_ORDER_CHANGED); nn_packet_write_str(packet, &list->name); - write_list_entry(entry, packet); + nn_packet_write_u32(packet, list->entries.count); + struct lia_list_entry *entry; + al_array_foreach(list->entries, i, entry) { + nn_packet_write_u32(packet, entry->id); + } nn_rpc_connection_command(client->conn, packet, NULL, NULL); } } @@ -284,7 +298,7 @@ static struct cch_entry *entry_from_post(struct camu_server *server, struct camu } } if (!entry) { - error("Failed to load post media %.*s %u.", al_str_x(&post->unique_id), index); + log_error("Failed to load post media %.*s %u.", al_str_x(&post->unique_id), index); return NULL; } entry->handler->maybe_spawn_worker(entry->handler, 0); @@ -408,25 +422,27 @@ static void list_callback(void *userdata, u8 op, struct lia_list_entry *entry, v if (server->meta_callback) { server->meta_callback(server->userdata, *(u8 *)opaque, entry); } + struct lia_list *list = entry->list; switch (*(u8 *)opaque) { - case LIANA_META_CURRENT_CHANGED: - info("Now playing: %ls.", entry->name.data); - send_clients_current_changed(server, entry->list, entry); - break; case LIANA_META_ADDED_ENTRY: - send_clients_added_entry(server, entry->list, entry); + send_clients_added_entry(server, list, entry); break; case LIANA_META_REMOVED_ENTRY: break; + case LIANA_META_CURRENT_CHANGED: + log_info("Now playing: %ls.", entry->name.data); + send_clients_current_changed(server, list, entry); + break; + case LIANA_META_ORDER_CHANGED: + send_clients_order_changed(server, list); + break; case LIANA_META_ENTRY_PAUSED: break; case LIANA_META_ENTRY_SEEKED: - send_clients_entry_seeked(server, entry->list, entry); + send_clients_entry_seeked(server, list, entry); break; case LIANA_META_ENTRY_ERRORED: - error("Failed to load: %ls.", entry->name.data); - break; - case LIANA_META_ORDER_CHANGED: + log_error("Failed to load: %ls.", entry->name.data); break; } break; @@ -502,7 +518,7 @@ static bool client_command_callback(void *userdata, struct nn_rpc_connection *co case CAMU_CLIENT_TOGGLE_SINK: { str name; nn_packet_read_str(packet, &name); - struct camu_server_sink *sink = get_sink_from_name(server, &name); + struct camu_server_sink *sink = get_sink_by_name(server, &name); if (!sink) goto out; nn_packet_read_str(packet, &name); // list name. bool enable = nn_packet_read_bool(packet); @@ -557,7 +573,7 @@ static void simple_search_portal_callback(void *userdata0, void *userdata1, stru return; } // No return is the error case. - warn("Failed to process simple search request."); + log_warn("Failed to process simple search request."); resource->load = LIANA_ENTRY_ERRORED; } #endif @@ -656,7 +672,7 @@ static bool list_action_callback(void *userdata, struct nn_rpc_connection *conn, str name; nn_packet_read_str(packet, &name); - struct lia_list *list = get_list_from_name(server, &name); + struct lia_list *list = get_list_by_name(server, &name); if (!list) goto out; u8 op = nn_packet_read_u8(packet); @@ -748,7 +764,7 @@ static void connection_closed_callback(void *userdata, struct nn_rpc_connection struct camu_server_node *node; al_array_foreach(server->nodes, i, node) { if (node->conn == conn) { - info("Node removed."); + log_info("Node removed."); cleanup_node(node); al_array_remove_at(server->nodes, i); break; @@ -758,7 +774,7 @@ static void connection_closed_callback(void *userdata, struct nn_rpc_connection struct camu_server_client *client; al_array_foreach(server->clients, i, client) { if (client->conn == conn) { - info("User \"%.*s\" logged out.", al_str_x(&client->user->name)); + log_info("User \"%.*s\" logged out.", al_str_x(&client->user->name)); cleanup_client(client); al_array_remove_at(server->clients, i); break; @@ -768,7 +784,7 @@ static void connection_closed_callback(void *userdata, struct nn_rpc_connection struct camu_server_sink *sink; al_array_foreach(server->sinks, i, sink) { if (sink->conn == conn) { - info("Sink removed."); + log_info("Sink removed."); struct lia_list *list; al_array_foreach(server->lists, j, list) { lia_list_remove_sink(list, sink); -- cgit v1.2.3-101-g0448