diff --git a/src/client/CMakeLists.txt b/src/client/CMakeLists.txt new file mode 100644 index 0000000..e2217ee --- /dev/null +++ b/src/client/CMakeLists.txt @@ -0,0 +1,12 @@ +# Copyright (c) 2025 Dominic Masters +# +# This software is released under the MIT License. +# https://opensource.org/licenses/MIT + +# Sources +target_sources(${DUSK_TARGET_NAME} + PRIVATE + client.c +) + +# Subdirs \ No newline at end of file diff --git a/src/client/client.c b/src/client/client.c new file mode 100644 index 0000000..e69de29 diff --git a/src/client/client.h b/src/client/client.h new file mode 100644 index 0000000..35a89f9 --- /dev/null +++ b/src/client/client.h @@ -0,0 +1,8 @@ +/** + * Copyright (c) 2025 Dominic Masters + * + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT + */ + +#pragma once diff --git a/src/server/networked/CMakeLists.txt b/src/server/networked/CMakeLists.txt index 0825cb8..3d440ea 100644 --- a/src/server/networked/CMakeLists.txt +++ b/src/server/networked/CMakeLists.txt @@ -6,6 +6,6 @@ # Sources target_sources(${DUSK_TARGET_NAME} PRIVATE - networkedclient.c + networkedserverclient.c networkedserver.c ) \ No newline at end of file diff --git a/src/server/networked/networkedserver.c b/src/server/networked/networkedserver.c index a7d6f44..f75861f 100644 --- a/src/server/networked/networkedserver.c +++ b/src/server/networked/networkedserver.c @@ -183,7 +183,7 @@ void * networkedServerThread(void *arg) { .state = SERVER_CLIENT_STATE_ACCEPTING }; packetDisconnectCreate(&packet, PACKET_DISCONNECT_REASON_SERVER_FULL); - networkedClientWritePacket(&tempClient, &packet); + networkedServerClientWritePacket(&tempClient, &packet); if(errorCheck()) errorPrint(); consolePrint("Client %i disconnected: Server full."); close(clientSocket); diff --git a/src/server/networked/networkedclient.c b/src/server/networked/networkedserverclient.c similarity index 82% rename from src/server/networked/networkedclient.c rename to src/server/networked/networkedserverclient.c index 230ba75..7dea028 100644 --- a/src/server/networked/networkedclient.c +++ b/src/server/networked/networkedserverclient.c @@ -11,7 +11,7 @@ #include "console/console.h" #include -errorret_t networkedClientAccept( +errorret_t networkedServerClientAccept( serverclient_t *client, const serverclientaccept_t accept ) { @@ -33,7 +33,7 @@ errorret_t networkedClientAccept( int32_t ret = pthread_create( &client->networked.thread, NULL, - networkedClientThread, + networkedServerClientThread, client ); if(ret != 0) { @@ -49,14 +49,14 @@ errorret_t networkedClientAccept( &client->networked.timeout, sizeof(client->networked.timeout) ) < 0) { - networkedClientCloseOnThread(client, "Failed to set socket timeout"); + networkedServerClientCloseOnThread(client, "Failed to set socket timeout"); return error("Failed to set socket timeout"); } return ERROR_OK; } -void networkedClientClose(serverclient_t *client) { +void networkedServerClientClose(serverclient_t *client) { assertIsMainThread("Server client close must be on main thread."); assertNotNull(client, "Client is NULL"); assertTrue( @@ -88,7 +88,7 @@ void networkedClientClose(serverclient_t *client) { consolePrint("Client %d disconnected.", client->networked.socket); } -void networkedClientCloseOnThread( +void networkedServerClientCloseOnThread( serverclient_t *client, const char_t *reason ) { @@ -112,7 +112,7 @@ void networkedClientCloseOnThread( pthread_exit(NULL); } -ssize_t networkedClientRead( +ssize_t networkedServerClientRead( serverclient_t * client, uint8_t *buffer, const size_t len @@ -136,7 +136,7 @@ ssize_t networkedClientRead( return recv(client->networked.socket, buffer, len, 0); } -errorret_t networkedClientWrite( +errorret_t networkedServerClientWrite( serverclient_t * client, const uint8_t *data, const size_t len @@ -158,7 +158,7 @@ errorret_t networkedClientWrite( return ERROR_OK; } -errorret_t networkedClientWritePacket( +errorret_t networkedServerClientWritePacket( serverclient_t * client, const packet_t *packet ) { @@ -172,10 +172,10 @@ errorret_t networkedClientWritePacket( size_t fullSize = sizeof(packet_t) - sizeof(packet->data) + packet->length; assertTrue(fullSize <= sizeof(packet_t), "Packet size is too large (2)"); - return networkedClientWrite(client, (const uint8_t *)packet, fullSize); + return networkedServerClientWrite(client, (const uint8_t *)packet, fullSize); } -void * networkedClientThread(void *arg) { +void * networkedServerClientThread(void *arg) { assertNotNull(arg, "Client is NULL"); assertNotMainThread("Client thread must not be main thread"); @@ -199,37 +199,37 @@ void * networkedClientThread(void *arg) { // the server version. { const char_t *expecting = "DUSK|"DUSK_VERSION; - read = networkedClientRead(client, buffer, sizeof(buffer)); + read = networkedServerClientRead(client, buffer, sizeof(buffer)); if(read <= 0) { packetDisconnectCreate(&packet, PACKET_DISCONNECT_REASON_INVALID_VERSION); - err = networkedClientWritePacket(client, &packet); - networkedClientCloseOnThread(client, "Failed to receive version"); + err = networkedServerClientWritePacket(client, &packet); + networkedServerClientCloseOnThread(client, "Failed to receive version"); return NULL; } buffer[read] = '\0'; // Null-terminate the string if(strncmp(buffer, expecting, strlen(expecting)) != 0) { packetDisconnectCreate(&packet, PACKET_DISCONNECT_REASON_INVALID_VERSION); - err = networkedClientWritePacket(client, &packet); - networkedClientCloseOnThread(client, "Invalid version"); + err = networkedServerClientWritePacket(client, &packet); + networkedServerClientCloseOnThread(client, "Invalid version"); return NULL; } } // Send DUSK back! packetWelcomeCreate(&packet); - err = networkedClientWritePacket(client, &packet); + err = networkedServerClientWritePacket(client, &packet); if(err != ERROR_OK) { - networkedClientCloseOnThread(client, "Failed to send welcome message"); + networkedServerClientCloseOnThread(client, "Failed to send welcome message"); return NULL; } client->state = SERVER_CLIENT_STATE_CONNECTED; while(client->state == SERVER_CLIENT_STATE_CONNECTED) { - read = networkedClientRead(client, buffer, sizeof(buffer)); + read = networkedServerClientRead(client, buffer, sizeof(buffer)); if(read <= 0) { - networkedClientCloseOnThread(client, "Failed to receive data"); + networkedServerClientCloseOnThread(client, "Failed to receive data"); break; } @@ -238,7 +238,7 @@ void * networkedClientThread(void *arg) { if(SERVER.state != SERVER_STATE_RUNNING) { - networkedClientCloseOnThread(client, "Server is shutting down"); + networkedServerClientCloseOnThread(client, "Server is shutting down"); break; } } @@ -247,7 +247,7 @@ void * networkedClientThread(void *arg) { &packet, PACKET_DISCONNECT_REASON_SERVER_SHUTDOWN ); - networkedClientWritePacket(client, &packet); + networkedServerClientWritePacket(client, &packet); if(errorCheck()) errorPrint(); client->state = SERVER_CLIENT_STATE_DISCONNECTED; diff --git a/src/server/networked/networkedclient.h b/src/server/networked/networkedserverclient.h similarity index 74% rename from src/server/networked/networkedclient.h rename to src/server/networked/networkedserverclient.h index 6f5a896..d2a85ce 100644 --- a/src/server/networked/networkedclient.h +++ b/src/server/networked/networkedserverclient.h @@ -13,40 +13,40 @@ typedef struct serverclientaccept_s serverclientaccept_t; typedef struct { int32_t socket; -} networkedclientaccept_t; +} networkedserverclientaccept_t; typedef struct { int32_t socket; pthread_t thread; struct timeval timeout; -} networkedclient_t; +} networkedserverclient_t; /** - * Accepts an incoming connection from a networked client. + * 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 networkedClientAccept( +errorret_t networkedServerClientAccept( serverclient_t *client, const serverclientaccept_t accept ); /** - * Closes the connection to a networked client. Waits for the thread to finish. + * Closes the connection to a networked server client. Waits for the thread to finish. * * @param client Pointer to the server client structure. */ -void networkedClientClose(serverclient_t *client); +void networkedServerClientClose(serverclient_t *client); /** - * Closes the connection to a networked client on the thread. + * 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 networkedClientCloseOnThread( +void networkedServerClientCloseOnThread( serverclient_t *client, const char_t *reason ); @@ -59,7 +59,7 @@ void networkedClientCloseOnThread( * @param len Max length of the buffer. * @return Number of bytes received. 0 or less indicates an error. */ -ssize_t networkedClientRead( +ssize_t networkedServerClientRead( serverclient_t * client, uint8_t *buffer, const size_t len @@ -73,7 +73,7 @@ ssize_t networkedClientRead( * @param len Length of the data to send. * @return Error code indicating success or failure. */ -errorret_t networkedClientWrite( +errorret_t networkedServerClientWrite( serverclient_t * client, const uint8_t *data, const size_t len @@ -86,15 +86,15 @@ errorret_t networkedClientWrite( * @param packet Pointer to the packet to send. * @return Error code indicating success or failure. */ -errorret_t networkedClientWritePacket( +errorret_t networkedServerClientWritePacket( serverclient_t * client, const packet_t *packet ); /** - * Thread function for handling a networked client. + * Thread function for handling a networked server client. * * @param arg Pointer to the server client structure. * @return NULL. */ -void * networkedClientThread(void *arg); \ No newline at end of file +void * networkedServerClientThread(void *arg); \ No newline at end of file diff --git a/src/server/server.h b/src/server/server.h index 8d77bd9..13395ab 100644 --- a/src/server/server.h +++ b/src/server/server.h @@ -9,7 +9,7 @@ #include "serverclient.h" #include "server/networked/networkedserver.h" -#define SERVER_MAX_CLIENTS 1 +#define SERVER_MAX_CLIENTS 32 typedef enum { SERVER_STATE_STOPPED, diff --git a/src/server/serverclient.c b/src/server/serverclient.c index 5ebcb5e..9f54212 100644 --- a/src/server/serverclient.c +++ b/src/server/serverclient.c @@ -22,8 +22,7 @@ errorret_t serverClientAccept( switch(accept.server->type) { case SERVER_TYPE_NETWORKED: - return networkedClientAccept(client, accept); - break; + return networkedServerClientAccept(client, accept); default: assertUnreachable("Unknown server type"); @@ -37,8 +36,9 @@ void serverClientClose(serverclient_t *client) { switch(client->server->type) { case SERVER_TYPE_NETWORKED: - networkedClientClose(client); + networkedServerClientClose(client); break; + default: assertUnreachable("Unknown server type"); } diff --git a/src/server/serverclient.h b/src/server/serverclient.h index 1e2130e..bacad8f 100644 --- a/src/server/serverclient.h +++ b/src/server/serverclient.h @@ -7,7 +7,7 @@ #pragma once #include "server/packet/packet.h" -#include "server/networked/networkedclient.h" +#include "server/networked/networkedserverclient.h" typedef struct server_s server_t; @@ -21,7 +21,7 @@ typedef enum { typedef struct serverclientaccept_s { server_t *server; union { - networkedclientaccept_t networked; + networkedserverclientaccept_t networked; }; } serverclientaccept_t; @@ -29,7 +29,7 @@ typedef struct serverclient_s { server_t *server; serverclientstate_t state; union { - networkedclient_t networked; + networkedserverclient_t networked; }; } serverclient_t;