Changed networkedclient to networkedserverclient

This commit is contained in:
2025-04-09 14:36:28 -05:00
parent a04014c054
commit 6c71debd05
10 changed files with 63 additions and 43 deletions

12
src/client/CMakeLists.txt Normal file
View File

@ -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

0
src/client/client.c Normal file
View File

8
src/client/client.h Normal file
View File

@ -0,0 +1,8 @@
/**
* Copyright (c) 2025 Dominic Masters
*
* This software is released under the MIT License.
* https://opensource.org/licenses/MIT
*/
#pragma once

View File

@ -6,6 +6,6 @@
# Sources # Sources
target_sources(${DUSK_TARGET_NAME} target_sources(${DUSK_TARGET_NAME}
PRIVATE PRIVATE
networkedclient.c networkedserverclient.c
networkedserver.c networkedserver.c
) )

View File

@ -183,7 +183,7 @@ void * networkedServerThread(void *arg) {
.state = SERVER_CLIENT_STATE_ACCEPTING .state = SERVER_CLIENT_STATE_ACCEPTING
}; };
packetDisconnectCreate(&packet, PACKET_DISCONNECT_REASON_SERVER_FULL); packetDisconnectCreate(&packet, PACKET_DISCONNECT_REASON_SERVER_FULL);
networkedClientWritePacket(&tempClient, &packet); networkedServerClientWritePacket(&tempClient, &packet);
if(errorCheck()) errorPrint(); if(errorCheck()) errorPrint();
consolePrint("Client %i disconnected: Server full."); consolePrint("Client %i disconnected: Server full.");
close(clientSocket); close(clientSocket);

View File

@ -11,7 +11,7 @@
#include "console/console.h" #include "console/console.h"
#include <sys/socket.h> #include <sys/socket.h>
errorret_t networkedClientAccept( errorret_t networkedServerClientAccept(
serverclient_t *client, serverclient_t *client,
const serverclientaccept_t accept const serverclientaccept_t accept
) { ) {
@ -33,7 +33,7 @@ errorret_t networkedClientAccept(
int32_t ret = pthread_create( int32_t ret = pthread_create(
&client->networked.thread, &client->networked.thread,
NULL, NULL,
networkedClientThread, networkedServerClientThread,
client client
); );
if(ret != 0) { if(ret != 0) {
@ -49,14 +49,14 @@ errorret_t networkedClientAccept(
&client->networked.timeout, &client->networked.timeout,
sizeof(client->networked.timeout) sizeof(client->networked.timeout)
) < 0) { ) < 0) {
networkedClientCloseOnThread(client, "Failed to set socket timeout"); networkedServerClientCloseOnThread(client, "Failed to set socket timeout");
return error("Failed to set socket timeout"); return error("Failed to set socket timeout");
} }
return ERROR_OK; return ERROR_OK;
} }
void networkedClientClose(serverclient_t *client) { void networkedServerClientClose(serverclient_t *client) {
assertIsMainThread("Server client close must be on main thread."); assertIsMainThread("Server client close must be on main thread.");
assertNotNull(client, "Client is NULL"); assertNotNull(client, "Client is NULL");
assertTrue( assertTrue(
@ -88,7 +88,7 @@ void networkedClientClose(serverclient_t *client) {
consolePrint("Client %d disconnected.", client->networked.socket); consolePrint("Client %d disconnected.", client->networked.socket);
} }
void networkedClientCloseOnThread( void networkedServerClientCloseOnThread(
serverclient_t *client, serverclient_t *client,
const char_t *reason const char_t *reason
) { ) {
@ -112,7 +112,7 @@ void networkedClientCloseOnThread(
pthread_exit(NULL); pthread_exit(NULL);
} }
ssize_t networkedClientRead( ssize_t networkedServerClientRead(
serverclient_t * client, serverclient_t * client,
uint8_t *buffer, uint8_t *buffer,
const size_t len const size_t len
@ -136,7 +136,7 @@ ssize_t networkedClientRead(
return recv(client->networked.socket, buffer, len, 0); return recv(client->networked.socket, buffer, len, 0);
} }
errorret_t networkedClientWrite( errorret_t networkedServerClientWrite(
serverclient_t * client, serverclient_t * client,
const uint8_t *data, const uint8_t *data,
const size_t len const size_t len
@ -158,7 +158,7 @@ errorret_t networkedClientWrite(
return ERROR_OK; return ERROR_OK;
} }
errorret_t networkedClientWritePacket( errorret_t networkedServerClientWritePacket(
serverclient_t * client, serverclient_t * client,
const packet_t *packet const packet_t *packet
) { ) {
@ -172,10 +172,10 @@ errorret_t networkedClientWritePacket(
size_t fullSize = sizeof(packet_t) - sizeof(packet->data) + packet->length; size_t fullSize = sizeof(packet_t) - sizeof(packet->data) + packet->length;
assertTrue(fullSize <= sizeof(packet_t), "Packet size is too large (2)"); 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"); assertNotNull(arg, "Client is NULL");
assertNotMainThread("Client thread must not be main thread"); assertNotMainThread("Client thread must not be main thread");
@ -199,37 +199,37 @@ void * networkedClientThread(void *arg) {
// the server version. // the server version.
{ {
const char_t *expecting = "DUSK|"DUSK_VERSION; const char_t *expecting = "DUSK|"DUSK_VERSION;
read = networkedClientRead(client, buffer, sizeof(buffer)); read = networkedServerClientRead(client, buffer, sizeof(buffer));
if(read <= 0) { if(read <= 0) {
packetDisconnectCreate(&packet, PACKET_DISCONNECT_REASON_INVALID_VERSION); packetDisconnectCreate(&packet, PACKET_DISCONNECT_REASON_INVALID_VERSION);
err = networkedClientWritePacket(client, &packet); err = networkedServerClientWritePacket(client, &packet);
networkedClientCloseOnThread(client, "Failed to receive version"); networkedServerClientCloseOnThread(client, "Failed to receive version");
return NULL; return NULL;
} }
buffer[read] = '\0'; // Null-terminate the string buffer[read] = '\0'; // Null-terminate the string
if(strncmp(buffer, expecting, strlen(expecting)) != 0) { if(strncmp(buffer, expecting, strlen(expecting)) != 0) {
packetDisconnectCreate(&packet, PACKET_DISCONNECT_REASON_INVALID_VERSION); packetDisconnectCreate(&packet, PACKET_DISCONNECT_REASON_INVALID_VERSION);
err = networkedClientWritePacket(client, &packet); err = networkedServerClientWritePacket(client, &packet);
networkedClientCloseOnThread(client, "Invalid version"); networkedServerClientCloseOnThread(client, "Invalid version");
return NULL; return NULL;
} }
} }
// Send DUSK back! // Send DUSK back!
packetWelcomeCreate(&packet); packetWelcomeCreate(&packet);
err = networkedClientWritePacket(client, &packet); err = networkedServerClientWritePacket(client, &packet);
if(err != ERROR_OK) { if(err != ERROR_OK) {
networkedClientCloseOnThread(client, "Failed to send welcome message"); networkedServerClientCloseOnThread(client, "Failed to send welcome message");
return NULL; return NULL;
} }
client->state = SERVER_CLIENT_STATE_CONNECTED; client->state = SERVER_CLIENT_STATE_CONNECTED;
while(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) { if(read <= 0) {
networkedClientCloseOnThread(client, "Failed to receive data"); networkedServerClientCloseOnThread(client, "Failed to receive data");
break; break;
} }
@ -238,7 +238,7 @@ void * networkedClientThread(void *arg) {
if(SERVER.state != SERVER_STATE_RUNNING) { if(SERVER.state != SERVER_STATE_RUNNING) {
networkedClientCloseOnThread(client, "Server is shutting down"); networkedServerClientCloseOnThread(client, "Server is shutting down");
break; break;
} }
} }
@ -247,7 +247,7 @@ void * networkedClientThread(void *arg) {
&packet, &packet,
PACKET_DISCONNECT_REASON_SERVER_SHUTDOWN PACKET_DISCONNECT_REASON_SERVER_SHUTDOWN
); );
networkedClientWritePacket(client, &packet); networkedServerClientWritePacket(client, &packet);
if(errorCheck()) errorPrint(); if(errorCheck()) errorPrint();
client->state = SERVER_CLIENT_STATE_DISCONNECTED; client->state = SERVER_CLIENT_STATE_DISCONNECTED;

View File

@ -13,40 +13,40 @@ typedef struct serverclientaccept_s serverclientaccept_t;
typedef struct { typedef struct {
int32_t socket; int32_t socket;
} networkedclientaccept_t; } networkedserverclientaccept_t;
typedef struct { typedef struct {
int32_t socket; int32_t socket;
pthread_t thread; pthread_t thread;
struct timeval timeout; 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 client Pointer to the server client structure.
* @param accept Accept structure containing client information. * @param accept Accept structure containing client information.
* @return Error code indicating success or failure. * @return Error code indicating success or failure.
*/ */
errorret_t networkedClientAccept( errorret_t networkedServerClientAccept(
serverclient_t *client, serverclient_t *client,
const serverclientaccept_t accept 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. * @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 client Pointer to the server client structure.
* @param reason Reason for closing the connection. * @param reason Reason for closing the connection.
*/ */
void networkedClientCloseOnThread( void networkedServerClientCloseOnThread(
serverclient_t *client, serverclient_t *client,
const char_t *reason const char_t *reason
); );
@ -59,7 +59,7 @@ void networkedClientCloseOnThread(
* @param len Max length of the buffer. * @param len Max length of the buffer.
* @return Number of bytes received. 0 or less indicates an error. * @return Number of bytes received. 0 or less indicates an error.
*/ */
ssize_t networkedClientRead( ssize_t networkedServerClientRead(
serverclient_t * client, serverclient_t * client,
uint8_t *buffer, uint8_t *buffer,
const size_t len const size_t len
@ -73,7 +73,7 @@ ssize_t networkedClientRead(
* @param len Length of the data to send. * @param len Length of the data to send.
* @return Error code indicating success or failure. * @return Error code indicating success or failure.
*/ */
errorret_t networkedClientWrite( errorret_t networkedServerClientWrite(
serverclient_t * client, serverclient_t * client,
const uint8_t *data, const uint8_t *data,
const size_t len const size_t len
@ -86,15 +86,15 @@ errorret_t networkedClientWrite(
* @param packet Pointer to the packet to send. * @param packet Pointer to the packet to send.
* @return Error code indicating success or failure. * @return Error code indicating success or failure.
*/ */
errorret_t networkedClientWritePacket( errorret_t networkedServerClientWritePacket(
serverclient_t * client, serverclient_t * client,
const packet_t *packet 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. * @param arg Pointer to the server client structure.
* @return NULL. * @return NULL.
*/ */
void * networkedClientThread(void *arg); void * networkedServerClientThread(void *arg);

View File

@ -9,7 +9,7 @@
#include "serverclient.h" #include "serverclient.h"
#include "server/networked/networkedserver.h" #include "server/networked/networkedserver.h"
#define SERVER_MAX_CLIENTS 1 #define SERVER_MAX_CLIENTS 32
typedef enum { typedef enum {
SERVER_STATE_STOPPED, SERVER_STATE_STOPPED,

View File

@ -22,8 +22,7 @@ errorret_t serverClientAccept(
switch(accept.server->type) { switch(accept.server->type) {
case SERVER_TYPE_NETWORKED: case SERVER_TYPE_NETWORKED:
return networkedClientAccept(client, accept); return networkedServerClientAccept(client, accept);
break;
default: default:
assertUnreachable("Unknown server type"); assertUnreachable("Unknown server type");
@ -37,8 +36,9 @@ void serverClientClose(serverclient_t *client) {
switch(client->server->type) { switch(client->server->type) {
case SERVER_TYPE_NETWORKED: case SERVER_TYPE_NETWORKED:
networkedClientClose(client); networkedServerClientClose(client);
break; break;
default: default:
assertUnreachable("Unknown server type"); assertUnreachable("Unknown server type");
} }

View File

@ -7,7 +7,7 @@
#pragma once #pragma once
#include "server/packet/packet.h" #include "server/packet/packet.h"
#include "server/networked/networkedclient.h" #include "server/networked/networkedserverclient.h"
typedef struct server_s server_t; typedef struct server_s server_t;
@ -21,7 +21,7 @@ typedef enum {
typedef struct serverclientaccept_s { typedef struct serverclientaccept_s {
server_t *server; server_t *server;
union { union {
networkedclientaccept_t networked; networkedserverclientaccept_t networked;
}; };
} serverclientaccept_t; } serverclientaccept_t;
@ -29,7 +29,7 @@ typedef struct serverclient_s {
server_t *server; server_t *server;
serverclientstate_t state; serverclientstate_t state;
union { union {
networkedclient_t networked; networkedserverclient_t networked;
}; };
} serverclient_t; } serverclient_t;