From 72eb0c6381f9406a4e45d23f65373d4936770433 Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Sun, 27 Oct 2024 15:50:21 -0400 Subject: More synced list, another vcr fix Signed-off-by: Andrew Opalach --- src/server/list.c | 58 ++++++++++++++++++++++++++++++ src/server/list.h | 5 +++ src/server/resource.h | 13 +++++++ src/server/server.c | 98 ++++++++++++--------------------------------------- src/server/server.h | 9 +---- 5 files changed, 100 insertions(+), 83 deletions(-) create mode 100644 src/server/resource.h (limited to 'src/server') diff --git a/src/server/list.c b/src/server/list.c index 8ff123c..e3565d0 100644 --- a/src/server/list.c +++ b/src/server/list.c @@ -1,4 +1,62 @@ +#include "../libsink/common.h" +#include "../server/common.h" + #include "list.h" +#include "server.h" + +void camu_list_callback(void *userdata, u8 op, struct lia_list_entry *entry) +{ + struct camu_server *server = (struct camu_server *)userdata; + (void)server; + (void)op; + (void)entry; +} + +void camu_list_sink_callback(void *userdata, u8 op, struct lia_list_entry *entry, s32 sequence, struct lia_timing *timing) +{ + struct camu_server_sink *sink = (struct camu_server_sink *)userdata; + switch (op) { + case LIANA_SINK_SET: + case LIANA_SINK_BUFFER: + case LIANA_SINK_BUFFER_AND_QUEUE: { + struct camu_server_resource *resource = (struct camu_server_resource *)entry->opaque; + struct aki_packet *packet = aki_rpc_get_packet(sink->conn->rpc, CAMU_SINK_SET); + aki_packet_write_u8(packet, op); + aki_packet_write_str(packet, &sink->server->addr); + aki_packet_write_u16(packet, CAMU_PORT); + aki_packet_write_u16(packet, resource->node->id); + aki_packet_write_s32(packet, sequence); + aki_packet_write_u64(packet, timing->at); + aki_packet_write_u64(packet, timing->seek_pos); + aki_packet_write_u8(packet, timing->pause); + aki_packet_write_bool(packet, timing->ended); + aki_rpc_connection_command(sink->conn, packet, NULL, NULL); + break; + } + case LIANA_SINK_UNSET: { + struct aki_packet *packet = aki_rpc_get_packet(sink->conn->rpc, CAMU_SINK_SET); + aki_packet_write_u8(packet, op); + aki_rpc_connection_command(sink->conn, packet, NULL, NULL); + break; + } + case LIANA_SINK_PAUSE: { + struct aki_packet *packet = aki_rpc_get_packet(sink->conn->rpc, CAMU_SINK_PAUSE); + aki_packet_write_s32(packet, sequence); + aki_packet_write_u64(packet, timing->at); + aki_packet_write_u8(packet, timing->pause); + aki_rpc_connection_command(sink->conn, packet, NULL, NULL); + break; + } + case LIANA_SINK_SEEK: { + struct aki_packet *packet = aki_rpc_get_packet(sink->conn->rpc, CAMU_SINK_SEEK); + aki_packet_write_s32(packet, sequence); + aki_packet_write_u64(packet, timing->at); + aki_packet_write_u64(packet, timing->seek_pos); + aki_rpc_connection_command(sink->conn, packet, NULL, NULL); + break; + } + } +} void camu_list_init(struct camu_list *list, str *name) { diff --git a/src/server/list.h b/src/server/list.h index f3e52e6..e472024 100644 --- a/src/server/list.h +++ b/src/server/list.h @@ -2,10 +2,15 @@ #include "../liana/list.h" +#include "resource.h" + struct camu_list { str name; struct lia_list impl; }; +void camu_list_callback(void *userdata, u8 op, struct lia_list_entry *entry); +void camu_list_sink_callback(void *userdata, u8 op, struct lia_list_entry *entry, s32 sequence, struct lia_timing *timing); + void camu_list_init(struct camu_list *list, str *name); void camu_list_free(struct camu_list *list); diff --git a/src/server/resource.h b/src/server/resource.h new file mode 100644 index 0000000..c1cf619 --- /dev/null +++ b/src/server/resource.h @@ -0,0 +1,13 @@ +#pragma once + +#include "../cache/entry.h" +#include "../liana/server.h" +#include "../portal/src/post.h" + +struct camu_server_resource { + str unique_id; + struct camu_post *post; + struct cch_entry *entry; + struct lia_node *node; + u64 duration; +}; diff --git a/src/server/server.c b/src/server/server.c index 49ea234..d7f8bc9 100644 --- a/src/server/server.c +++ b/src/server/server.c @@ -1,8 +1,6 @@ #include #include -#include "../libsink/common.h" - #include "server.h" #include "common.h" #include "list.h" @@ -19,54 +17,31 @@ static struct camu_user *get_user_by_username(struct camu_server *server, str *u return NULL; } -static void list_sink_callback(void *userdata, u8 op, struct lia_list_entry *entry, s32 sequence, struct lia_timing *timing) +static struct camu_server_client *get_client_by_connection(struct camu_server *server, struct aki_rpc_connection *conn) { - struct camu_server_sink *sink = (struct camu_server_sink *)userdata; - switch (op) { - case CAMU_SINK_CLEAR: { - struct aki_packet *packet = aki_rpc_get_packet(sink->conn->rpc, CAMU_SINK_SET); - aki_packet_write_u8(packet, op); - aki_rpc_connection_command(sink->conn, packet, NULL, NULL); - break; - } - case CAMU_SINK_SET: - case CAMU_SINK_BUFFER: - case CAMU_SINK_BUFFER_AND_QUEUE: { - struct camu_server_resource *resource = (struct camu_server_resource *)entry->opaque; - struct aki_packet *packet = aki_rpc_get_packet(sink->conn->rpc, CAMU_SINK_SET); - aki_packet_write_u8(packet, op); - aki_packet_write_str(packet, &sink->server->addr); - aki_packet_write_u16(packet, CAMU_PORT); - aki_packet_write_u16(packet, resource->node->id); - aki_packet_write_s32(packet, sequence); - aki_packet_write_u64(packet, timing->at); - aki_packet_write_u64(packet, timing->seek_pos); - aki_packet_write_u8(packet, timing->pause); - aki_rpc_connection_command(sink->conn, packet, NULL, NULL); - break; - } - case CAMU_SINK_PAUSE: { - struct aki_packet *packet = aki_rpc_get_packet(sink->conn->rpc, CAMU_SINK_PAUSE); - aki_packet_write_s32(packet, sequence); - aki_packet_write_u64(packet, timing->at); - aki_packet_write_u8(packet, timing->pause); - aki_rpc_connection_command(sink->conn, packet, NULL, NULL); - break; - } - case CAMU_SINK_SEEK: { - struct aki_packet *packet = aki_rpc_get_packet(sink->conn->rpc, CAMU_SINK_SEEK); - aki_packet_write_s32(packet, sequence); - aki_packet_write_u64(packet, timing->at); - aki_packet_write_u64(packet, timing->seek_pos); - aki_rpc_connection_command(sink->conn, packet, NULL, NULL); - break; + struct camu_server_client *client; + al_array_foreach(server->clients, i, client) { + if (client->conn == conn) return client; } - case CAMU_SINK_DURATION: { - struct camu_server_resource *resource = (struct camu_server_resource *)entry->opaque; - (void)resource; - break; + return NULL; +} + +static struct camu_list *get_list_from_name(struct camu_server *server, str *name) +{ + struct camu_list *list; + al_array_foreach(server->lists, i, list) { + if (al_str_eq(&list->name, name)) return list; } + return NULL; +} + +static struct camu_server_sink *get_sink_from_name(struct camu_server *server, str *name) +{ + struct camu_server_sink *sink; + al_array_foreach(server->sinks, i, sink) { + if (al_str_eq(&sink->name, name)) return sink; } + return NULL; } static bool identify_command_callback(void *userdata, struct aki_rpc_connection *conn, @@ -109,7 +84,7 @@ static bool identify_command_callback(void *userdata, struct aki_rpc_connection sink->server = server; al_array_push(server->sinks, sink); struct camu_list *list = al_array_at(server->lists, 0); - lia_list_add_sink(&list->impl, list_sink_callback, sink); + lia_list_add_sink(&list->impl, camu_list_sink_callback, sink); al_log_info("server", "New sink."); break; } @@ -119,33 +94,6 @@ static bool identify_command_callback(void *userdata, struct aki_rpc_connection return true; } -static struct camu_server_client *get_client_by_connection(struct camu_server *server, struct aki_rpc_connection *conn) -{ - struct camu_server_client *client; - al_array_foreach(server->clients, i, client) { - if (client->conn == conn) return client; - } - return NULL; -} - -static struct camu_list *get_list_from_name(struct camu_server *server, str *name) -{ - struct camu_list *list; - al_array_foreach(server->lists, i, list) { - if (al_str_eq(&list->name, name)) return list; - } - return NULL; -} - -static struct camu_server_sink *get_sink_from_name(struct camu_server *server, str *name) -{ - struct camu_server_sink *sink; - al_array_foreach(server->sinks, i, sink) { - if (al_str_eq(&sink->name, name)) return sink; - } - return NULL; -} - static bool client_command_command_callback(void *userdata, struct aki_rpc_connection *conn, struct aki_packet *packet, struct aki_packet *rpacket) { @@ -171,7 +119,7 @@ static bool client_command_command_callback(void *userdata, struct aki_rpc_conne struct camu_list *list = get_list_from_name(server, &name); aki_packet_read_str(packet, &name); struct camu_server_sink *sink = get_sink_from_name(server, &name); - lia_list_add_sink(&list->impl, list_sink_callback, sink); + lia_list_add_sink(&list->impl, camu_list_sink_callback, sink); break; } } diff --git a/src/server/server.h b/src/server/server.h index 528f08a..6246f79 100644 --- a/src/server/server.h +++ b/src/server/server.h @@ -7,6 +7,7 @@ #include "../liana/server.h" #include "user.h" +#include "resource.h" #include "local_compat.h" struct camu_server_node { @@ -24,14 +25,6 @@ struct camu_server_sink { struct camu_server *server; }; -struct camu_server_resource { - str unique_id; - struct camu_post *post; - struct cch_entry *entry; - struct lia_node *node; - u64 duration; -}; - struct camu_server { struct aki_event_loop *loop; str addr; -- cgit v1.2.3-101-g0448