Add IP field to client information and display client IP in the server tab's connected client list
This commit is contained in:
parent
6bfc9dd9db
commit
3ad0986ae7
4 changed files with 56 additions and 4 deletions
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue