summaryrefslogtreecommitdiff
path: root/src/server/server.h
blob: b1548f8fc8d1d9bf198fa0c64980aa8180226c91 (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
#pragma once

#include <nnwt/multiplex.h>
#include <nnwt/rpc2.h>

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