Merge branch 'serverlist' into 'develop'

[Download] Add serverlist info
This commit is contained in:
/dev/root 2018-12-03 22:26:29 +01:00
commit c654c9817a
4 changed files with 44 additions and 0 deletions

View File

@ -465,6 +465,33 @@ namespace Components
nc->flags |= MG_F_SEND_AND_CLOSE; nc->flags |= MG_F_SEND_AND_CLOSE;
} }
void Download::ServerlistHandler(mg_connection* nc, int ev, void* /*ev_data*/)
{
// Only handle http requests
if (ev != MG_EV_HTTP_REQUEST) return;
std::vector<json11::Json> servers;
// Build server list
for (auto& node : Node::GetNodes())
{
if (node.isValid())
{
servers.push_back(json11::Json{ node });
}
}
mg_printf(nc,
"HTTP/1.1 200 OK\r\n"
"Content-Type: application/json\r\n"
"Connection: close\r\n"
"Access-Control-Allow-Origin: *\r\n"
"\r\n"
"%s", json11::Json(servers).dump().data());
nc->flags |= MG_F_SEND_AND_CLOSE;
}
void Download::MapHandler(mg_connection *nc, int ev, void* ev_data) void Download::MapHandler(mg_connection *nc, int ev, void* ev_data)
{ {
// Only handle http requests // Only handle http requests
@ -819,6 +846,7 @@ namespace Components
mg_register_http_endpoint(nc, "/list", Download::ListHandler); mg_register_http_endpoint(nc, "/list", Download::ListHandler);
mg_register_http_endpoint(nc, "/map", Download::MapHandler); mg_register_http_endpoint(nc, "/map", Download::MapHandler);
mg_register_http_endpoint(nc, "/file/", Download::FileHandler); mg_register_http_endpoint(nc, "/file/", Download::FileHandler);
mg_register_http_endpoint(nc, "/serverlist", Download::ServerlistHandler);
mg_set_protocol_http_websocket(nc); mg_set_protocol_http_websocket(nc);
} }

View File

@ -217,6 +217,7 @@ namespace Components
static void EventHandler(mg_connection *nc, int ev, void *ev_data); static void EventHandler(mg_connection *nc, int ev, void *ev_data);
static void ListHandler(mg_connection *nc, int ev, void *ev_data); static void ListHandler(mg_connection *nc, int ev, void *ev_data);
static void MapHandler(mg_connection *nc, int ev, void *ev_data); static void MapHandler(mg_connection *nc, int ev, void *ev_data);
static void ServerlistHandler(mg_connection *nc, int ev, void *ev_data);
static void FileHandler(mg_connection *nc, int ev, void *ev_data); static void FileHandler(mg_connection *nc, int ev, void *ev_data);
static void InfoHandler(mg_connection *nc, int ev, void *ev_data); static void InfoHandler(mg_connection *nc, int ev, void *ev_data);
static void DownloadHandler(mg_connection *nc, int ev, void *ev_data); static void DownloadHandler(mg_connection *nc, int ev, void *ev_data);

View File

@ -50,6 +50,11 @@ namespace Components
this->lastRequest.reset(); this->lastRequest.reset();
} }
json11::Json Node::Entry::to_json() const
{
return this->address.getString();
}
void Node::LoadNodeRemotePreset() void Node::LoadNodeRemotePreset()
{ {
std::string nodes = Utils::Cache::GetFile("/iw4/nodes.txt"); std::string nodes = Utils::Cache::GetFile("/iw4/nodes.txt");
@ -153,6 +158,13 @@ namespace Components
Node::Nodes.push_back(node); Node::Nodes.push_back(node);
} }
std::vector<Node::Entry> Node::GetNodes()
{
std::lock_guard<std::recursive_mutex> _(Node::Mutex);
return Node::Nodes;
}
void Node::RunFrame() void Node::RunFrame()
{ {
if (Dedicated::IsEnabled() && Dvar::Var("sv_lanOnly").get<bool>()) return; if (Dedicated::IsEnabled() && Dvar::Var("sv_lanOnly").get<bool>()) return;
@ -264,6 +276,7 @@ namespace Components
Node::Nodes.push_back(entry); Node::Nodes.push_back(entry);
} }
} }
void Node::SendList(Network::Address address) void Node::SendList(Network::Address address)
{ {
Proto::Node::List list; Proto::Node::List list;

View File

@ -35,12 +35,14 @@ namespace Components
void sendRequest(); void sendRequest();
void reset(); void reset();
json11::Json to_json() const;
}; };
Node(); Node();
~Node(); ~Node();
static void Add(Network::Address address); static void Add(Network::Address address);
static std::vector<Entry> GetNodes();
static void RunFrame(); static void RunFrame();
static void Synchronize(); static void Synchronize();