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_ */