diff --git a/NetworkServer.cpp b/NetworkServer.cpp index f9f8c676..44bae69b 100644 --- a/NetworkServer.cpp +++ b/NetworkServer.cpp @@ -5,6 +5,9 @@ #include #include #include +#include +#else +#include #endif #include #include @@ -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); diff --git a/NetworkServer.h b/NetworkServer.h index 10506fcc..f930d339 100644 --- a/NetworkServer.h +++ b/NetworkServer.h @@ -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); diff --git a/qt/OpenRGBServerInfoPage.cpp b/qt/OpenRGBServerInfoPage.cpp index c6b68bb5..daf9b642 100644 --- a/qt/OpenRGBServerInfoPage.cpp +++ b/qt/OpenRGBServerInfoPage.cpp @@ -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() diff --git a/qt/OpenRGBServerInfoPage.ui b/qt/OpenRGBServerInfoPage.ui index b7d53447..3b382ad5 100644 --- a/qt/OpenRGBServerInfoPage.ui +++ b/qt/OpenRGBServerInfoPage.ui @@ -6,7 +6,7 @@ 0 0 - 500 + 664 300 @@ -56,7 +56,7 @@ - + 1