[Download]: Poll every 1000 msec, fix bug (#707)

This commit is contained in:
Edo 2023-01-09 08:37:56 +00:00 committed by GitHub
parent 90b124420f
commit 06e7f86a42
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 41 deletions

View File

@ -3,6 +3,10 @@
#include "GSC/Script.hpp" #include "GSC/Script.hpp"
// From Quake-III
#define ANGLE2SHORT(x) ((int)((x) * (USHRT_MAX + 1) / 360.0f) & USHRT_MAX)
#define SHORT2ANGLE(x) ((x)* (360.0f / (USHRT_MAX + 1)))
namespace Components namespace Components
{ {
std::vector<Bots::botData> Bots::BotNames; std::vector<Bots::botData> Bots::BotNames;
@ -280,6 +284,10 @@ namespace Components
userCmd.rightmove = g_botai[entnum].right; userCmd.rightmove = g_botai[entnum].right;
userCmd.weapon = g_botai[entnum].weapon; userCmd.weapon = g_botai[entnum].weapon;
userCmd.angles[0] = ANGLE2SHORT((cl->gentity->client->ps.viewangles[0] - cl->gentity->client->ps.delta_angles[0]));
userCmd.angles[1] = ANGLE2SHORT((cl->gentity->client->ps.viewangles[1] - cl->gentity->client->ps.delta_angles[1]));
userCmd.angles[2] = ANGLE2SHORT((cl->gentity->client->ps.viewangles[2] - cl->gentity->client->ps.delta_angles[2]));
Game::SV_ClientThink(cl, &userCmd); Game::SV_ClientThink(cl, &userCmd);
} }

View File

@ -604,44 +604,7 @@ namespace Components
} }
} }
static void HTMLHandler(mg_connection* c, mg_http_message* hm) static void EventHandler(mg_connection* c, const int ev, void* ev_data, [[maybe_unused]] void* fn_data)
{
auto url = "html" + std::string(hm->uri.ptr, hm->uri.len);
FileSystem::File file;
if (url.ends_with("/"))
{
url.append("index.html");
file = FileSystem::File(url);
}
else
{
file = FileSystem::File(url);
if (!file.exists())
{
url.append("/index.html");
file = FileSystem::File(url);
}
}
const auto mimeType = Utils::GetMimeType(url);
if (file.exists())
{
mg_printf(c, "%s", "HTTP/1.1 200 OK\r\n");
mg_printf(c, "Content-Type: %s\r\n", mimeType.data());
mg_printf(c, "Content-Length: %d\r\n", static_cast<int>(file.getBuffer().size()));
mg_printf(c, "%s", "Connection: close\r\n");
mg_printf(c, "%s", "\r\n");
mg_send(c, file.getBuffer().data(), file.getBuffer().size());
}
else
{
mg_http_reply(c, 404, "Content-Type: text/html\r\n", "404 - Not Found");
}
}
static void EventHandler(mg_connection* c, int ev, void* ev_data, [[maybe_unused]] void* fn_data)
{ {
if (ev != MG_EV_HTTP_MSG) if (ev != MG_EV_HTTP_MSG)
{ {
@ -649,7 +612,7 @@ namespace Components
} }
auto* hm = static_cast<mg_http_message*>(ev_data); auto* hm = static_cast<mg_http_message*>(ev_data);
std::string url(hm->uri.ptr, hm->uri.len); const std::string url(hm->uri.ptr, hm->uri.len);
if (url.starts_with("/info")) if (url.starts_with("/info"))
{ {
@ -672,8 +635,12 @@ namespace Components
} }
else else
{ {
HTMLHandler(c, hm); mg_http_serve_opts opts = { .root_dir = "iw4x/html" }; // Serve local dir
mg_http_serve_dir(c, hm, &opts);
} }
c->is_resp = FALSE; // This is important, the lack of this line of code will make the server die (in-game)
c->is_draining = TRUE;
} }
#pragma endregion #pragma endregion
@ -694,6 +661,7 @@ namespace Components
if (!nc) if (!nc)
{ {
Logger::PrintError(Game::CON_CHANNEL_ERROR, "Failed to bind TCP socket, mod download won't work!\n"); Logger::PrintError(Game::CON_CHANNEL_ERROR, "Failed to bind TCP socket, mod download won't work!\n");
Terminate = true;
} }
}); });
@ -705,7 +673,7 @@ namespace Components
while (!Terminate) while (!Terminate)
{ {
mg_mgr_poll(&Mgr, 100); mg_mgr_poll(&Mgr, 1000);
} }
}); });
} }