summaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2024-10-27 15:50:21 -0400
committerAndrew Opalach <andrew@akon.city> 2024-10-27 15:50:21 -0400
commit72eb0c6381f9406a4e45d23f65373d4936770433 (patch)
tree13e1303372f858a69bfa5324f0aa9d17428fc43a /src/server
parent831f260ba2f6bc89f0451f6cc628bd131913a363 (diff)
downloadcamu-72eb0c6381f9406a4e45d23f65373d4936770433.tar.gz
camu-72eb0c6381f9406a4e45d23f65373d4936770433.tar.bz2
camu-72eb0c6381f9406a4e45d23f65373d4936770433.zip
More synced list, another vcr fix
Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/server')
-rw-r--r--src/server/list.c58
-rw-r--r--src/server/list.h5
-rw-r--r--src/server/resource.h13
-rw-r--r--src/server/server.c98
-rw-r--r--src/server/server.h9
5 files changed, 100 insertions, 83 deletions
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 <al/log.h>
#include <al/lib.h>
-#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;