mirror of
https://github.com/BeamMP/BeamMP-Launcher.git
synced 2025-07-01 15:36:10 +00:00
Implement mod warning
This commit is contained in:
parent
2d43e11e96
commit
06db6d0341
@ -52,3 +52,5 @@ void TCPSend(const std::string& Data, uint64_t Sock);
|
||||
void TCPClientMain(const std::string& IP, int Port);
|
||||
void UDPClientMain(const std::string& IP, int Port);
|
||||
void TCPGameServer(const std::string& IP, int Port);
|
||||
bool SecurityWarning();
|
||||
void CoreSend(std::string data);
|
||||
|
@ -44,6 +44,26 @@ std::string UlStatus;
|
||||
std::string MStatus;
|
||||
bool ModLoaded;
|
||||
int ping = -1;
|
||||
SOCKET CoreSocket = -1;
|
||||
signed char confirmed = -1;
|
||||
|
||||
bool SecurityWarning() {
|
||||
confirmed = -1;
|
||||
CoreSend("WMODS_FOUND");
|
||||
|
||||
while (confirmed == -1)
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(10));
|
||||
|
||||
if (confirmed == 1)
|
||||
return true;
|
||||
|
||||
NetReset();
|
||||
Terminate = true;
|
||||
TCPTerminate = true;
|
||||
ping = -1;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void StartSync(const std::string& Data) {
|
||||
std::string IP = GetAddr(Data.substr(1, Data.find(':') - 1));
|
||||
@ -67,6 +87,15 @@ void StartSync(const std::string& Data) {
|
||||
info("Connecting to server");
|
||||
}
|
||||
|
||||
void CoreSend(std::string data) {
|
||||
if (CoreSocket != -1) {
|
||||
int res = send(CoreSocket, (data + "\n").c_str(), int(data.size()) + 1, 0);
|
||||
if (res < 0) {
|
||||
debug("(Core) send failed with error: " + std::to_string(WSAGetLastError()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool IsAllowedLink(const std::string& Link) {
|
||||
std::regex link_pattern(R"(https:\/\/(?:\w+)?(?:\.)?(?:beammp\.com|discord\.gg|patreon\.com\/BeamMP))");
|
||||
std::smatch link_match;
|
||||
@ -90,13 +119,6 @@ void Parse(std::string Data, SOCKET CSocket) {
|
||||
case 'C':
|
||||
ListOfMods.clear();
|
||||
StartSync(Data);
|
||||
while (ListOfMods.empty() && !Terminate) {
|
||||
std::this_thread::sleep_for(std::chrono::seconds(1));
|
||||
}
|
||||
if (ListOfMods == "-")
|
||||
Data = "L";
|
||||
else
|
||||
Data = "L" + ListOfMods;
|
||||
break;
|
||||
case 'O': // open default browser with URL
|
||||
if (IsAllowedLink(Data.substr(1))) {
|
||||
@ -189,6 +211,15 @@ void Parse(std::string Data, SOCKET CSocket) {
|
||||
Data = "N" + Login(Data.substr(Data.find(':') + 1));
|
||||
}
|
||||
break;
|
||||
case 'W':
|
||||
if (SubCode == 'Y') {
|
||||
confirmed = 1;
|
||||
} else if (SubCode == 'N') {
|
||||
confirmed = 0;
|
||||
}
|
||||
|
||||
Data.clear();
|
||||
break;
|
||||
default:
|
||||
Data.clear();
|
||||
break;
|
||||
@ -201,7 +232,7 @@ void Parse(std::string Data, SOCKET CSocket) {
|
||||
}
|
||||
}
|
||||
void GameHandler(SOCKET Client) {
|
||||
|
||||
CoreSocket = Client;
|
||||
int32_t Size, Temp, Rcv;
|
||||
char Header[10] = { 0 };
|
||||
do {
|
||||
|
@ -98,7 +98,7 @@ std::string Auth(SOCKET Sock) {
|
||||
|
||||
if (Res.empty() || Res == "-") {
|
||||
info("Didn't Receive any mods...");
|
||||
ListOfMods = "-";
|
||||
CoreSend("L");
|
||||
TCPSend("Done", Sock);
|
||||
info("Done!");
|
||||
return "";
|
||||
@ -229,6 +229,9 @@ void SyncResources(SOCKET Sock) {
|
||||
if (Ret.empty())
|
||||
return;
|
||||
|
||||
if (!SecurityWarning())
|
||||
return;
|
||||
|
||||
info("Checking Resources...");
|
||||
CheckForDir();
|
||||
|
||||
@ -246,9 +249,9 @@ void SyncResources(SOCKET Sock) {
|
||||
}
|
||||
}
|
||||
if (t.empty())
|
||||
ListOfMods = "-";
|
||||
CoreSend("L");
|
||||
else
|
||||
ListOfMods = t;
|
||||
CoreSend("L" + t);
|
||||
t.clear();
|
||||
for (auto FN = FNames.begin(), FS = FSizes.begin(); FN != FNames.end() && !Terminate; ++FN, ++FS) {
|
||||
auto pos = FN->find_last_of('/');
|
||||
|
Loading…
x
Reference in New Issue
Block a user