Clean up comment formatting in NetworkServer.cpp

This commit is contained in:
Adam Honse 2024-03-25 17:50:32 -05:00
parent 94684a0a78
commit 9215ae0514

View file

@ -75,9 +75,9 @@ void NetworkServer::ClientInfoChanged()
{
ClientInfoChangeMutex.lock();
/*-------------------------------------------------*\
/*---------------------------------------------------------*\
| Client info has changed, call the callbacks |
\*-------------------------------------------------*/
\*---------------------------------------------------------*/
for(unsigned int callback_idx = 0; callback_idx < ClientInfoChangeCallbacks.size(); callback_idx++)
{
ClientInfoChangeCallbacks[callback_idx](ClientInfoChangeCallbackArgs[callback_idx]);
@ -88,10 +88,10 @@ void NetworkServer::ClientInfoChanged()
void NetworkServer::DeviceListChanged()
{
/*-------------------------------------------------*\
| Indicate to the clients that the controller list |
| has changed |
\*-------------------------------------------------*/
/*---------------------------------------------------------*\
| Indicate to the clients that the controller list has |
| changed |
\*---------------------------------------------------------*/
for(unsigned int client_idx = 0; client_idx < ServerClients.size(); client_idx++)
{
SendRequest_DeviceListChanged(ServerClients[client_idx]->client_sock);
@ -102,9 +102,9 @@ void NetworkServer::ServerListeningChanged()
{
ServerListeningChangeMutex.lock();
/*-------------------------------------------------*\
/*---------------------------------------------------------*\
| Server state has changed, call the callbacks |
\*-------------------------------------------------*/
\*---------------------------------------------------------*/
for(unsigned int callback_idx = 0; callback_idx < ServerListeningChangeCallbacks.size(); callback_idx++)
{
ServerListeningChangeCallbacks[callback_idx](ServerListeningChangeCallbackArgs[callback_idx]);
@ -230,15 +230,18 @@ void NetworkServer::StartServer()
{
int err;
struct addrinfo hints, *res, *result;
//Start a TCP server and launch threads
/*---------------------------------------------------------*\
| Start a TCP server and launch threads |
\*---------------------------------------------------------*/
char port_str[6];
snprintf(port_str, 6, "%d", port_num);
socket_count = 0;
/*-------------------------------------------------*\
/*---------------------------------------------------------*\
| Windows requires WSAStartup before using sockets |
\*-------------------------------------------------*/
\*---------------------------------------------------------*/
#ifdef WIN32
if(WSAStartup(MAKEWORD(2, 2), &wsa) != NO_ERROR)
{
@ -260,9 +263,9 @@ void NetworkServer::StartServer()
return;
}
/*-------------------------------------------------*\
/*---------------------------------------------------------*\
| Create a server socket for each address returned. |
\*-------------------------------------------------*/
\*---------------------------------------------------------*/
for(res = result; res && socket_count < MAXSOCK; res = res->ai_next)
{
server_sock[socket_count] = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
@ -274,9 +277,9 @@ void NetworkServer::StartServer()
return;
}
/*-------------------------------------------------*\
/*---------------------------------------------------------*\
| Bind the server socket |
\*-------------------------------------------------*/
\*---------------------------------------------------------*/
if(bind(server_sock[socket_count], res->ai_addr, res->ai_addrlen) == SOCKET_ERROR)
{
if(errno == EADDRINUSE)
@ -301,8 +304,10 @@ void NetworkServer::StartServer()
}
else
{
// could be a linux specific error
// https://man7.org/linux/man-pages/man2/bind.2.html
/*---------------------------------------------------------*\
| errno could be a Linux specific error, see: |
| https://man7.org/linux/man-pages/man2/bind.2.html |
\*---------------------------------------------------------*/
printf("Error: Could not bind network socket, error code:%d\n", errno);
}
@ -310,9 +315,9 @@ void NetworkServer::StartServer()
return;
}
/*-------------------------------------------------*\
/*---------------------------------------------------------*\
| Set socket options - no delay |
\*-------------------------------------------------*/
\*---------------------------------------------------------*/
setsockopt(server_sock[socket_count], IPPROTO_TCP, TCP_NODELAY, &yes, sizeof(yes));
socket_count += 1;
@ -321,9 +326,9 @@ void NetworkServer::StartServer()
freeaddrinfo(result);
server_online = true;
/*-------------------------------------------------*\
/*---------------------------------------------------------*\
| Start the connection thread |
\*-------------------------------------------------*/
\*---------------------------------------------------------*/
for(int curr_socket = 0; curr_socket < socket_count; curr_socket++)
{
ConnectionThread[curr_socket] = new std::thread(&NetworkServer::ConnectionThreadFunction, this, curr_socket);
@ -364,29 +369,31 @@ void NetworkServer::StopServer()
socket_count = 0;
/*-------------------------------------------------*\
/*---------------------------------------------------------*\
| Client info has changed, call the callbacks |
\*-------------------------------------------------*/
\*---------------------------------------------------------*/
ClientInfoChanged();
}
void NetworkServer::ConnectionThreadFunction(int socket_idx)
{
//This thread handles client connections
/*---------------------------------------------------------*\
| This thread handles client connections |
\*---------------------------------------------------------*/
printf("Network connection thread started on port %hu\n", GetPort());
while(server_online == true)
{
/*-------------------------------------------------*\
/*---------------------------------------------------------*\
| Create new socket for client connection |
\*-------------------------------------------------*/
\*---------------------------------------------------------*/
NetworkClientInfo * client_info = new NetworkClientInfo();
/*-------------------------------------------------*\
| Listen for incoming client connection on the |
| server socket. This call blocks until a |
| connection is established |
\*-------------------------------------------------*/
/*---------------------------------------------------------*\
| Listen for incoming client connection on the server |
| socket. This call blocks until a connection is |
| established |
\*---------------------------------------------------------*/
if(listen(server_sock[socket_idx], 10) < 0)
{
printf("Connection thread closed\r\n");
@ -398,9 +405,9 @@ void NetworkServer::ConnectionThreadFunction(int socket_idx)
server_listening = true;
ServerListeningChanged();
/*-------------------------------------------------*\
/*---------------------------------------------------------*\
| Accept the client connection |
\*-------------------------------------------------*/
\*---------------------------------------------------------*/
client_info->client_sock = accept_select(server_sock[socket_idx]);
if(client_info->client_sock < 0)
@ -414,17 +421,17 @@ void NetworkServer::ConnectionThreadFunction(int socket_idx)
return;
}
/*-------------------------------------------------*\
| Get the new client socket and store it in the |
| clients vector |
\*-------------------------------------------------*/
/*---------------------------------------------------------*\
| Get the new client socket and store it in the clients |
| vector |
\*---------------------------------------------------------*/
u_long arg = 0;
ioctlsocket(client_info->client_sock, FIONBIO, &arg);
setsockopt(client_info->client_sock, IPPROTO_TCP, TCP_NODELAY, &yes, sizeof(yes));
/*-------------------------------------------------*\
/*---------------------------------------------------------*\
| Discover the remote hosts IP |
\*-------------------------------------------------*/
\*---------------------------------------------------------*/
struct sockaddr_storage tmp_addr;
char ipstr[INET6_ADDRSTRLEN];
socklen_t len;
@ -444,19 +451,23 @@ void NetworkServer::ConnectionThreadFunction(int socket_idx)
client_info->client_ip = ipstr;
}
/* We need to lock before the thread could possibly finish */
/*---------------------------------------------------------*\
| We need to lock before the thread could possibly finish |
\*---------------------------------------------------------*/
ServerClientsMutex.lock();
//Start a listener thread for the new client socket
/*---------------------------------------------------------*\
| Start a listener thread for the new client socket |
\*---------------------------------------------------------*/
client_info->client_listen_thread = new std::thread(&NetworkServer::ListenThreadFunction, this, client_info);
client_info->client_listen_thread->detach();
ServerClients.push_back(client_info);
ServerClientsMutex.unlock();
/*-------------------------------------------------*\
/*---------------------------------------------------------*\
| Client info has changed, call the callbacks |
\*-------------------------------------------------*/
\*---------------------------------------------------------*/
ClientInfoChanged();
}
@ -476,8 +487,8 @@ int NetworkServer::accept_select(int sockfd)
timeout.tv_sec = TCP_TIMEOUT_SECONDS;
timeout.tv_usec = 0;
FD_ZERO(&set); /* clear the set */
FD_SET(sockfd, &set); /* add our file descriptor to the set */
FD_ZERO(&set);
FD_SET(sockfd, &set);
int rv = select(sockfd + 1, &set, NULL, NULL, &timeout);
@ -491,7 +502,6 @@ int NetworkServer::accept_select(int sockfd)
}
else
{
// socket has something to read
return(accept(sockfd, NULL, NULL));
}
}
@ -507,8 +517,8 @@ int NetworkServer::recv_select(SOCKET s, char *buf, int len, int flags)
timeout.tv_sec = TCP_TIMEOUT_SECONDS;
timeout.tv_usec = 0;
FD_ZERO(&set); /* clear the set */
FD_SET(s, &set); /* add our file descriptor to the set */
FD_ZERO(&set);
FD_SET(s, &set);
int rv = select(s + 1, &set, NULL, NULL, &timeout);
@ -522,7 +532,6 @@ int NetworkServer::recv_select(SOCKET s, char *buf, int len, int flags)
}
else
{
// socket has something to read
return(recv(s, buf, len, flags));
}
}
@ -533,14 +542,19 @@ void NetworkServer::ListenThreadFunction(NetworkClientInfo * client_info)
SOCKET client_sock = client_info->client_sock;
printf("Network server started\n");
//This thread handles messages received from clients
/*---------------------------------------------------------*\
| This thread handles messages received from clients |
\*---------------------------------------------------------*/
while(server_online == true)
{
NetPacketHeader header;
int bytes_read = 0;
char * data = NULL;
//Read first byte of magic
/*---------------------------------------------------------*\
| Read first byte of magic |
\*---------------------------------------------------------*/
bytes_read = recv_select(client_sock, &header.pkt_magic[0], 1, 0);
if(bytes_read <= 0)
@ -548,13 +562,17 @@ void NetworkServer::ListenThreadFunction(NetworkClientInfo * client_info)
goto listen_done;
}
//Test first character of magic - 'O'
/*---------------------------------------------------------*\
| Test first character of magic - 'O' |
\*---------------------------------------------------------*/
if(header.pkt_magic[0] != 'O')
{
continue;
}
//Read second byte of magic
/*---------------------------------------------------------*\
| Read second byte of magic |
\*---------------------------------------------------------*/
bytes_read = recv_select(client_sock, &header.pkt_magic[1], 1, 0);
if(bytes_read <= 0)
@ -562,13 +580,17 @@ void NetworkServer::ListenThreadFunction(NetworkClientInfo * client_info)
goto listen_done;
}
//Test second character of magic - 'R'
/*---------------------------------------------------------*\
| Test second character of magic - 'R' |
\*---------------------------------------------------------*/
if(header.pkt_magic[1] != 'R')
{
continue;
}
//Read third byte of magic
/*---------------------------------------------------------*\
| Read third byte of magic |
\*---------------------------------------------------------*/
bytes_read = recv_select(client_sock, &header.pkt_magic[2], 1, 0);
if(bytes_read <= 0)
@ -576,13 +598,17 @@ void NetworkServer::ListenThreadFunction(NetworkClientInfo * client_info)
goto listen_done;
}
//Test third character of magic - 'G'
/*---------------------------------------------------------*\
| Test third character of magic - 'G' |
\*---------------------------------------------------------*/
if(header.pkt_magic[2] != 'G')
{
continue;
}
//Read fourth byte of magic
/*---------------------------------------------------------*\
| Read fourth byte of magic |
\*---------------------------------------------------------*/
bytes_read = recv_select(client_sock, &header.pkt_magic[3], 1, 0);
if(bytes_read <= 0)
@ -590,13 +616,18 @@ void NetworkServer::ListenThreadFunction(NetworkClientInfo * client_info)
goto listen_done;
}
//Test fourth character of magic - 'B'
/*---------------------------------------------------------*\
| Test fourth character of magic - 'B' |
\*---------------------------------------------------------*/
if(header.pkt_magic[3] != 'B')
{
continue;
}
//If we get to this point, the magic is correct. Read the rest of the header
/*---------------------------------------------------------*\
| If we get to this point, the magic is correct. Read the |
| rest of the header |
\*---------------------------------------------------------*/
bytes_read = 0;
do
{
@ -613,7 +644,9 @@ void NetworkServer::ListenThreadFunction(NetworkClientInfo * client_info)
} while(bytes_read != sizeof(header) - sizeof(header.pkt_magic));
//Header received, now receive the data
/*---------------------------------------------------------*\
| Header received, now receive the data |
\*---------------------------------------------------------*/
if(header.pkt_size > 0)
{
bytes_read = 0;
@ -635,7 +668,10 @@ void NetworkServer::ListenThreadFunction(NetworkClientInfo * client_info)
} while ((unsigned int)bytes_read < header.pkt_size);
}
//Entire request received, select functionality based on request ID
/*---------------------------------------------------------*\
| Entire request received, select functionality based on |
| request ID |
\*---------------------------------------------------------*/
switch(header.pkt_id)
{
case NET_PACKET_ID_REQUEST_CONTROLLER_COUNT:
@ -869,9 +905,9 @@ listen_done:
ServerClientsMutex.unlock();
/*-------------------------------------------------*\
/*---------------------------------------------------------*\
| Client info has changed, call the callbacks |
\*-------------------------------------------------*/
\*---------------------------------------------------------*/
ClientInfoChanged();
}
@ -900,9 +936,9 @@ void NetworkServer::ProcessRequest_ClientProtocolVersion(SOCKET client_sock, uns
}
ServerClientsMutex.unlock();
/*-------------------------------------------------*\
/*---------------------------------------------------------*\
| Client info has changed, call the callbacks |
\*-------------------------------------------------*/
\*---------------------------------------------------------*/
ClientInfoChanged();
}
@ -919,9 +955,9 @@ void NetworkServer::ProcessRequest_ClientString(SOCKET client_sock, unsigned int
}
ServerClientsMutex.unlock();
/*-------------------------------------------------*\
/*---------------------------------------------------------*\
| Client info has changed, call the callbacks |
\*-------------------------------------------------*/
\*---------------------------------------------------------*/
ClientInfoChanged();
}