#ifndef NETWORK_H #define NETWORK_H #include struct client; typedef enum { PACKET_ERROR = 0, PACKET_REGISTER = 1, PACKET_AUTHENTICATE = 2, PACKET_JOIN = 3, PACKET_TEXT = 4, PACKET_LEAVE = 5, PACKET_OK = 6, PACKET_DM_OPEN = 7, PACKET_DM_ROOM = 8, PACKET_CREATE_ROOM = 9, PACKET_DELETE_ROOM = 10, PACKET_ROOM_CREATED = 11, PACKET_LIST_ROOMS = 12, PACKET_ROOM_LIST = 13 } packet_type; typedef enum { ERR_UNKNOWN = 0, ERR_INVALID_PACKET = 1, ERR_NOT_AUTHENTICATED = 2, ERR_ALREADY_REGISTERED = 3, ERR_INVALID_CREDENTIALS = 4, ERR_REGISTRATION_DISABLED = 5, ERR_DATABASE = 5, ERR_USER_NOT_FOUND = 7, ERR_ACCESS_DENIED = 8, ERR_ROOM_NOT_FOUND = 9, ERR_ROOM_NAME_TAKEN = 10, ERR_NOT_ROOM_OWNER = 11 } error_code; struct packet_header { uint16_t size; uint8_t type; } __attribute__((packed)); struct packet_register { char username[20]; char password[100]; }; struct packet_auth { char username[20]; char password[100]; }; struct packet_join { uint64_t room_id; }; struct packet_leave { uint64_t room_id; }; struct packet_text { uint64_t room_id; char message[]; }; struct packet_error { uint8_t code; }; struct packet_text_broadcast { uint64_t room_id; char username[32]; char message[]; }; struct packet_dm_open { char username[20]; }; struct packet_dm_room { uint64_t room_id; }; struct packet_create_room { char name[32]; }; struct packet_delete_room { uint64_t room_id; }; struct packet_room_created { uint64_t room_id; char name[32]; }; struct room_list_entry { uint64_t room_id; char name[32]; char owner[20]; }; struct packet_room_list { uint32_t count; struct room_list_entry rooms[]; }; int network_init(void); void network_shutdown(void); void network_handle_data(struct client *client, const char *data, size_t len); void network_client_add(struct client *client); void network_client_remove(struct client *client); #endif