Merge branch 'serverlist' into 'develop'
[Download] Add serverlist info
This commit is contained in:
commit
c654c9817a
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
|
@ -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();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user