Add IP field to client information and display client IP in the server tab's connected client list

This commit is contained in:
Adam Honse 2020-05-07 00:51:43 -05:00
parent 6bfc9dd9db
commit 3ad0986ae7
4 changed files with 56 additions and 4 deletions

View file

@ -5,6 +5,9 @@
#include <sys/ioctl.h>
#include <netinet/tcp.h>
#include <sys/types.h>
#include <arpa/inet.h>
#else
#include <ws2tcpip.h>
#endif
#include <memory.h>
#include <errno.h>
@ -40,6 +43,35 @@ bool NetworkServer::GetOnline()
return server_online;
}
unsigned int NetworkServer::GetNumClients()
{
return ServerClients.size();
}
const char * NetworkServer::GetClientString(unsigned int client_num)
{
if(client_num < ServerClients.size())
{
return ServerClients[client_num]->client_string.c_str();
}
else
{
return "";
}
}
const char * NetworkServer::GetClientIP(unsigned int client_num)
{
if(client_num < ServerClients.size())
{
return ServerClients[client_num]->client_ip;
}
else
{
return "";
}
}
void NetworkServer::SetPort(unsigned short new_port)
{
if(server_online == false)
@ -158,7 +190,9 @@ void NetworkServer::ConnectionThreadFunction()
/*-------------------------------------------------*\
| Accept the client connection |
\*-------------------------------------------------*/
client_info->client_sock = accept_select(server_sock, NULL, NULL);
struct sockaddr_in client_addr;
socklen_t client_addr_len = sizeof(client_addr);
client_info->client_sock = accept_select(server_sock, (struct sockaddr *)&client_addr, &client_addr_len);
if(client_info->client_sock < 0)
{
@ -176,6 +210,10 @@ void NetworkServer::ConnectionThreadFunction()
ioctlsocket(client_info->client_sock, FIONBIO, &arg);
setsockopt(client_info->client_sock, IPPROTO_TCP, TCP_NODELAY, &yes, sizeof(yes));
inet_ntop(AF_INET, &client_addr.sin_addr, client_info->client_ip, INET_ADDRSTRLEN);
client_info->client_string = "Client";
//Start a listener thread for the new client socket
client_info->client_listen_thread = new std::thread(&NetworkServer::ListenThreadFunction, this, client_info);

View file

@ -11,6 +11,7 @@ struct NetworkClientInfo
SOCKET client_sock;
std::thread * client_listen_thread;
std::string client_string;
char client_ip[INET_ADDRSTRLEN];
};
class NetworkServer
@ -21,7 +22,8 @@ public:
unsigned short GetPort();
bool GetOnline();
unsigned int GetNumClients();
std::string GetClientString(unsigned int client_num);
const char * GetClientString(unsigned int client_num);
const char * GetClientIP(unsigned int client_num);
void SetPort(unsigned short new_port);

View file

@ -36,6 +36,18 @@ void OpenRGBServerInfoPage::UpdateInfo()
ui->ServerStopButton->setEnabled(false);
ui->ServerPortValue->setEnabled(true);
}
ui->ServerClientTree->clear();
ui->ServerClientTree->setColumnCount(2);
for(unsigned int client_idx = 0; client_idx < network_server->GetNumClients(); client_idx++)
{
QTreeWidgetItem * new_item = new QTreeWidgetItem();
new_item->setText(0, network_server->GetClientIP(client_idx));
new_item->setText(1, network_server->GetClientString(client_idx));
ui->ServerClientTree->addTopLevelItem(new_item);
}
}
void Ui::OpenRGBServerInfoPage::on_ServerStartButton_clicked()

View file

@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>500</width>
<width>664</width>
<height>300</height>
</rect>
</property>
@ -56,7 +56,7 @@
</widget>
</item>
<item row="2" column="0" colspan="4">
<widget class="QTreeWidget" name="treeWidget">
<widget class="QTreeWidget" name="ServerClientTree">
<column>
<property name="text">
<string notr="true">1</string>