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
target_sources(${DUSK_TARGET_NAME}
PRIVATE
networkedclient.c
networkedserverclient.c
networkedserver.c
)

View File

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

View File

@ -11,7 +11,7 @@
#include "console/console.h"
#include <sys/socket.h>
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;

View File

@ -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);
void * networkedServerClientThread(void *arg);

View File

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

View File

@ -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");
}

View File

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