dusk/src/server/serverclient.h

64 lines
1.5 KiB
C

/**
* Copyright (c) 2025 Dominic Masters
*
* This software is released under the MIT License.
* https://opensource.org/licenses/MIT
*/
#pragma once
#include "packet/packet.h"
#include "server/networked/networkedserverclient.h"
#include "packet/packetqueue.h"
typedef struct server_s server_t;
typedef enum {
SERVER_CLIENT_STATE_DISCONNECTED,
SERVER_CLIENT_STATE_ACCEPTING,
SERVER_CLIENT_STATE_CONNECTED,
SERVER_CLIENT_STATE_DISCONNECTING,
} serverclientstate_t;
typedef struct serverclientaccept_s {
server_t *server;
union {
networkedserverclientaccept_t networked;
};
} serverclientaccept_t;
typedef struct serverclient_s {
server_t *server;
serverclientstate_t state;
packetqueue_t packetQueue;
union {
networkedserverclient_t networked;
};
} serverclient_t;
/**
* Accepts an incoming connection from a server client.
*
* @param client Pointer to the server client structure.
* @param accept Accept structure containing client information.
* @return Error code indicating success or failure.
*/
errorret_t serverClientAccept(
serverclient_t *client,
const serverclientaccept_t accept
);
/**
* Handles the main thread updating of this server client. This is where all
* the packets will be handled and processed.
*
* @param client Pointer to the server client structure.
*/
void serverClientUpdate(serverclient_t *client);
/**
* Closes the connection to a server client. Waits for the thread to finish.
*
* @param client Pointer to the server client structure.
*/
void serverClientClose(serverclient_t *client);