Fix discovery.
This commit is contained in:
parent
4765dd24fc
commit
8175888e1d
@ -1,29 +1,40 @@
|
|||||||
#include "..\..\STDInclude.hpp"
|
#include "..\..\STDInclude.hpp"
|
||||||
|
|
||||||
|
using namespace std::literals;
|
||||||
|
|
||||||
namespace Components
|
namespace Components
|
||||||
{
|
{
|
||||||
|
Discovery::Container Discovery::DiscoveryContainer = { false, false, nullptr };
|
||||||
|
|
||||||
void Discovery::Perform()
|
void Discovery::Perform()
|
||||||
{
|
{
|
||||||
static bool performing = false;
|
Discovery::DiscoveryContainer.Perform = true;
|
||||||
if (performing) return;
|
|
||||||
|
|
||||||
std::async([] ()
|
|
||||||
{
|
|
||||||
performing = true;
|
|
||||||
int start = Game::Com_Milliseconds();
|
|
||||||
|
|
||||||
Logger::Print("Starting local server discovery...\n");
|
|
||||||
|
|
||||||
//Network::BroadcastAll("discovery\n");
|
|
||||||
Network::BroadcastRange(28960, 38960, "discovery\n");
|
|
||||||
|
|
||||||
Logger::Print("Discovery sent within %dms, awaiting responses...\n", Game::Com_Milliseconds() - start);
|
|
||||||
performing = false;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Discovery::Discovery()
|
Discovery::Discovery()
|
||||||
{
|
{
|
||||||
|
Discovery::DiscoveryContainer.Perform = false;
|
||||||
|
Discovery::DiscoveryContainer.Terminate = false;
|
||||||
|
Discovery::DiscoveryContainer.Thread = new std::thread([] ()
|
||||||
|
{
|
||||||
|
while (!Discovery::DiscoveryContainer.Terminate)
|
||||||
|
{
|
||||||
|
if (Discovery::DiscoveryContainer.Perform)
|
||||||
|
{
|
||||||
|
int start = Game::Com_Milliseconds();
|
||||||
|
|
||||||
|
Logger::Print("Starting local server discovery...\n");
|
||||||
|
//Network::BroadcastAll("discovery\n");
|
||||||
|
Network::BroadcastRange(28960, 38960, "discovery\n");
|
||||||
|
Logger::Print("Discovery sent within %dms, awaiting responses...\n", Game::Com_Milliseconds() - start);
|
||||||
|
|
||||||
|
Discovery::DiscoveryContainer.Perform = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::this_thread::sleep_for(50ms);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
Network::Handle("discovery", [] (Network::Address address, std::string data)
|
Network::Handle("discovery", [] (Network::Address address, std::string data)
|
||||||
{
|
{
|
||||||
if (address.IsSelf()) return;
|
if (address.IsSelf()) return;
|
||||||
@ -52,7 +63,6 @@ namespace Components
|
|||||||
|
|
||||||
if (ServerList::IsOfflineList())
|
if (ServerList::IsOfflineList())
|
||||||
{
|
{
|
||||||
OutputDebugStringA("Inserting!");
|
|
||||||
ServerList::InsertRequest(address, true);
|
ServerList::InsertRequest(address, true);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -60,6 +70,14 @@ namespace Components
|
|||||||
|
|
||||||
Discovery::~Discovery()
|
Discovery::~Discovery()
|
||||||
{
|
{
|
||||||
|
Discovery::DiscoveryContainer.Perform = false;
|
||||||
|
Discovery::DiscoveryContainer.Terminate = true;
|
||||||
|
|
||||||
|
if (Discovery::DiscoveryContainer.Thread)
|
||||||
|
{
|
||||||
|
Discovery::DiscoveryContainer.Thread->join();
|
||||||
|
delete Discovery::DiscoveryContainer.Thread;
|
||||||
|
Discovery::DiscoveryContainer.Thread = nullptr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,5 +8,15 @@ namespace Components
|
|||||||
const char* GetName() { return "Discovery"; };
|
const char* GetName() { return "Discovery"; };
|
||||||
|
|
||||||
static void Perform();
|
static void Perform();
|
||||||
|
|
||||||
|
private:
|
||||||
|
struct Container
|
||||||
|
{
|
||||||
|
bool Perform;
|
||||||
|
bool Terminate;
|
||||||
|
std::thread* Thread;
|
||||||
|
};
|
||||||
|
|
||||||
|
static Container DiscoveryContainer;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -208,9 +208,6 @@ namespace Components
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove server from queue
|
|
||||||
ServerList::RefreshContainer.Servers.erase(i);
|
|
||||||
|
|
||||||
ServerInfo server;
|
ServerInfo server;
|
||||||
server.Hostname = info.Get("hostname");
|
server.Hostname = info.Get("hostname");
|
||||||
server.Mapname = info.Get("mapname");
|
server.Mapname = info.Get("mapname");
|
||||||
@ -224,6 +221,9 @@ namespace Components
|
|||||||
server.Ping = (Game::Com_Milliseconds() - i->SendTime);
|
server.Ping = (Game::Com_Milliseconds() - i->SendTime);
|
||||||
server.Addr = address;
|
server.Addr = address;
|
||||||
|
|
||||||
|
// Remove server from queue
|
||||||
|
ServerList::RefreshContainer.Servers.erase(i);
|
||||||
|
|
||||||
// Check if already inserted and remove
|
// Check if already inserted and remove
|
||||||
int k = 0;
|
int k = 0;
|
||||||
for (auto j = ServerList::GetList().begin(); j != ServerList::GetList().end(); j++, k++)
|
for (auto j = ServerList::GetList().begin(); j != ServerList::GetList().end(); j++, k++)
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
#include <locale>
|
#include <locale>
|
||||||
#include <regex>
|
#include <regex>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
#include <future>
|
#include <chrono>
|
||||||
|
|
||||||
#include <version.hpp>
|
#include <version.hpp>
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user