dusk/src/network/server/networked/networkedserverclient.h

111 lines
2.8 KiB
C

/**
* Copyright (c) 2025 Dominic Masters
*
* This software is released under the MIT License.
* https://opensource.org/licenses/MIT
*/
#pragma once
#include "error/error.h"
typedef struct serverclient_s serverclient_t;
typedef struct serverclientaccept_s serverclientaccept_t;
typedef struct {
int32_t socket;
} networkedserverclientaccept_t;
typedef struct {
int32_t socket;
pthread_t readThread;
pthread_t writeThread;
struct timeval timeout;
pthread_mutex_t readLock;
pthread_mutex_t writeLock;
} networkedserverclient_t;
/**
* Accepts an incoming connection from a networked 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 networkedServerClientAccept(
serverclient_t *client,
const serverclientaccept_t accept
);
/**
* Closes the connection to a networked server client. Waits for the thread to finish.
*
* @param client Pointer to the server client structure.
*/
void networkedServerClientClose(serverclient_t *client);
/**
* Closes the connection to a networked server client on the thread.
*
* @param client Pointer to the server client structure.
* @param reason Reason for closing the connection.
*/
void networkedServerClientCloseOnThread(
serverclient_t *client,
const char_t *reason
);
/**
* Receives data from a server client.
*
* @param client Pointer to the server client structure.
* @param buffer Pointer to the buffer to store received data.
* @param len Max length of the buffer.
* @return Number of bytes received. 0 or less indicates an error.
*/
ssize_t networkedServerClientRead(
const serverclient_t * client,
uint8_t *buffer,
const size_t len
);
/**
* Writes data to a server client.
*
* @param client Pointer to the server client structure.
* @param data Pointer to the data to send.
* @param len Length of the data to send.
* @return Error code indicating success or failure.
*/
errorret_t networkedServerClientWrite(
serverclient_t * client,
const uint8_t *data,
const size_t len
);
/**
* Writes a packet to a server client.
*
* @param client Pointer to the server client structure.
* @param packet Pointer to the packet to send.
* @return Error code indicating success or failure.
*/
errorret_t networkedServerClientWritePacket(
serverclient_t * client,
const packet_t *packet
);
/**
* Thread function for handling reading from a networked server client.
*
* @param arg Pointer to the server client structure.
* @return NULL.
*/
void * networkedServerClientReadThread(void *arg);
/**
* Thread function for handling writing to a networked server client.
*
* @param arg Pointer to the server client structure.
* @return NULL.
*/
void * networkedServerClientWriteThread(void *arg);