summaryrefslogtreecommitdiff
path: root/src/liana/server.h
blob: bafe95b91fcd86a7683a69060eaa4ade24f38920 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#pragma once

#include <nnwt/event_loop.h>
#include <nnwt/packet_stream.h>
#include <nnwt/packet_pool.h>
#include <nnwt/signal.h>

#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);