#pragma once #include #include #include "../liana/server.h" #include "../liana/list.h" #ifdef CAMU_HAVE_PORTAL #include "../portal/src/search.h" #endif #include "user.h" #include "resource.h" struct camu_server_node { struct nn_rpc_connection *conn; }; struct camu_server_client { struct nn_rpc_connection *conn; struct camu_user *user; }; struct camu_server_sink { struct nn_rpc_connection *conn; str name; struct camu_server *server; }; struct camu_server { struct nn_event_loop *loop; str addr; struct nn_multiplex_socket multi; struct nn_rpc server; array(struct camu_user *) users; array(struct camu_server_node *) nodes; array(struct camu_server_client *) clients; array(struct camu_server_sink *) sinks; array(struct lia_list *) lists; struct { struct lia_server server; array(struct camu_resource *) resources; } data; #ifdef CAMU_HAVE_PORTAL struct camu_portal_bridge bridge; struct camu_post_cache cache; #endif void (*meta_callback)(void *, u8, struct lia_list_entry *entry); // @TEMP void *userdata; }; void camu_server_init(struct camu_server *server, struct nn_event_loop *loop); bool camu_server_listen(struct camu_server *server, u8 type, str *addr, u16 port); void camu_server_bind_direct(struct camu_server *server); void camu_server_close(struct camu_server *server); void camu_server_free(struct camu_server *server); // Local compat. void camu_server_local_add(struct camu_server *server, struct nn_packet *packet);