Program Listing for File client.h

Return to documentation for file (server/client/client.h)

#ifndef CLIENT_H_
    #define CLIENT_H_

    #include "utils/resizable_array.h"
    #include "server.h"

typedef struct client_state_s {
    resizable_array_t input;
    resizable_array_t output;
    inventory_t inv;
    uint8_t team_id;
    uint8_t x;
    uint8_t y;
    uint8_t tier;
    uint8_t orientation;
    uint32_t id;
    bool is_in_incantation;
    int fd;
    size_t in_buff_idx;
    size_t out_buff_idx;
} client_state_t;

typedef enum {
    OR_NORTH = 0,
    OR_EAST = 1,
    OR_SOUTH = 2,
    OR_WEST = 3,
} orientation_t;

enum {
    TEAM_ID_SERVER = 0,
    TEAM_ID_UNASSIGNED = 1,
    TEAM_ID_GRAPHIC = 2
};

void add_client(server_t *srv);
void remove_client(server_t *srv, uint32_t idx);
void write_client(server_t *srv, uint32_t idx);
void read_client(server_t *srv, uint32_t idx);

void append_to_output(server_t *srv, client_state_t *client, const char *msg);
[[gnu::format(printf, 3, 4)]]
void vappend_to_output(
    server_t *srv, client_state_t *client, const char *fmt, ...);

[[gnu::format(printf, 2, 3)]]
void send_to_guis(server_t *srv, const char *fmt, ...);

bool handle_team(server_t *srv, client_state_t *client,
    char *split[static COMMAND_WORD_COUNT]);

static inline
client_state_t *client_from_id(server_t *srv, uint32_t id)
{
    for (size_t i = 0; i < srv->cm.count; i++)
        if (srv->cm.clients[i].id == id)
            return &srv->cm.clients[i];
    return nullptr;
}

char *serialize_inventory(inventory_t *inv);

#endif /* !CLIENT_H_ */