#pragma once #include #include #include #include #include "../cache/entry.h" //#define LIANA_SERVER_LOOP struct lia_node_connection { u32 id; struct nn_packet *packet; struct nn_packet_stream *stream; bool errored; bool disconnected; bool ref; struct lia_server_handler *handler; struct cch_handle handle; u64 seek_pos; struct nn_thread thread; struct nn_signal signal; struct nn_packet_pool pool; struct lia_node *node; }; enum { LIANA_NODE_DURATION = 0, LIANA_NODE_ERRORED }; struct lia_node { u32 id; struct cch_entry *entry; array(struct lia_node_connection *) requests; array(struct lia_node_connection *) connections; bool closed; u64 duration; struct lia_server *server; void (*callback)(void *, u8, void *); void *userdata; // Temporary copy-paste from node_connection. bool errored; struct lia_server_handler *handler; struct cch_handle handle; struct nn_thread thread; struct nn_signal signal; }; struct lia_server { struct nn_event_loop *loop; u32 increment; array(struct lia_node *) nodes; array(struct nn_packet_stream *) dormant_connections; }; bool lia_server_init(struct lia_server *server, struct nn_event_loop *loop); void lia_server_add_stream(struct lia_server *server, struct nn_packet_stream *stream); struct lia_node *lia_server_create_node(struct lia_server *server, struct cch_entry *entry); void lia_node_get_duration(struct lia_node *node); void lia_node_close(struct lia_node *node); void lia_server_close(struct lia_server *server); void lia_server_force_disconnect_nodes(struct lia_server *server); void lia_server_free(struct lia_server *server);