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
|
# Sources
|
||||||
target_sources(${DUSK_TARGET_NAME}
|
target_sources(${DUSK_TARGET_NAME}
|
||||||
PRIVATE
|
PRIVATE
|
||||||
networkedclient.c
|
networkedserverclient.c
|
||||||
networkedserver.c
|
networkedserver.c
|
||||||
)
|
)
|
@ -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);
|
||||||
|
@ -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;
|
@ -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);
|
@ -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,
|
||||||
|
@ -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");
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user