Changed networkedclient to networkedserverclient
This commit is contained in:
12
src/client/CMakeLists.txt
Normal file
12
src/client/CMakeLists.txt
Normal 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
0
src/client/client.c
Normal file
8
src/client/client.h
Normal file
8
src/client/client.h
Normal 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
|
@ -6,6 +6,6 @@
|
||||
# Sources
|
||||
target_sources(${DUSK_TARGET_NAME}
|
||||
PRIVATE
|
||||
networkedclient.c
|
||||
networkedserverclient.c
|
||||
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);
|
||||
|
@ -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;
|
@ -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);
|
@ -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,
|
||||
|
@ -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");
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
|
Reference in New Issue
Block a user