From b0c6c2bac4d8b18f667ca322a6aff172ce7e8439 Mon Sep 17 00:00:00 2001 From: Anonymous275 Date: Mon, 4 May 2020 01:17:16 +0300 Subject: [PATCH] lots of work --- src/Network/ClientHandler.cpp | 8 +++--- src/Network/DataParser.cpp | 13 +++++---- src/Network/Server.cpp | 16 +++++------ src/Network/enet.hpp | 9 +++---- src/Network/functions.cpp | 2 +- src/Settings.hpp | 4 +-- src/config.cpp | 38 +++++++++++++++----------- src/heartbeat.cpp | 3 +-- src/logger.cpp | 30 +++------------------ src/logger.h | 2 +- src/main.cpp | 50 +++++++++++------------------------ 11 files changed, 68 insertions(+), 107 deletions(-) diff --git a/src/Network/ClientHandler.cpp b/src/Network/ClientHandler.cpp index cab3b4a..af3cbe9 100644 --- a/src/Network/ClientHandler.cpp +++ b/src/Network/ClientHandler.cpp @@ -34,7 +34,7 @@ void UpdatePlayers(ENetHost *server, ENetPeer*peer){ } void OnDisconnect(ENetHost *server,ENetPeer*peer,bool Timed){ - std::string Packet = "Od:" + std::to_string(peer->serverVehicleID[0]); + std::string Packet = "Od:" + std::to_string(peer->PlayerID); SendToAll(server,peer, Packet,false,true); if(Timed)Packet = "L"+peer->Name+" Timed out!"; else Packet = "L"+peer->Name+" Left the server!"; @@ -47,8 +47,8 @@ void OnDisconnect(ENetHost *server,ENetPeer*peer,bool Timed){ void OnConnect(ENetHost *server,ENetPeer*peer){ Respond("NR",peer); - peer->serverVehicleID[0] = FindID(server,peer); ///TODO: WHAT IF IT IS THE SECOND VEHICLE? - std::string ID = "P" + std::to_string(peer->serverVehicleID[0]); + peer->PlayerID = FindID(server,peer); ///TODO: WHAT IF IT IS THE SECOND VEHICLE? + std::string ID = "P" + std::to_string(peer->PlayerID); Respond(ID,peer); - if(Debug)debug(peer->Name + " ID : " + std::to_string(peer->serverVehicleID[0])); + if(Debug)debug(peer->Name + " ID : " + std::to_string(peer->PlayerID)); } diff --git a/src/Network/DataParser.cpp b/src/Network/DataParser.cpp index 2d8a49f..f971935 100644 --- a/src/Network/DataParser.cpp +++ b/src/Network/DataParser.cpp @@ -1,12 +1,11 @@ /// /// Created by Anonymous275 on 4/2/2020 /// - +#include #include -#include "enet.hpp" -#include -#include #include +#include +#include "enet.hpp" #include "../logger.h" #include "../Settings.hpp" @@ -20,7 +19,7 @@ void FindAndSync(ENetPeer*peer,ENetHost*server,int VehID){ for (int i = 0; i < server->connectedPeers; i++) { ENetClient = &server->peers[i]; if (ENetClient != peer){ - if(ENetClient->serverVehicleID[0] == VehID){ + if(ENetClient->PlayerID == VehID){ /////mark Respond(ENetClient->VehicleData,peer); } } @@ -34,7 +33,7 @@ void VehicleParser(std::string Packet,ENetPeer*peer,ENetHost*server){ switch(Code){ //Spawned Destroyed Switched/Moved NotFound Reset case 's': if(Data.at(0) == '0'){ - Packet = "Os:"+peer->Role+":"+peer->Name+":"+std::to_string(peer->serverVehicleID[0])+Packet.substr(4); + Packet = "Os:"+peer->Role+":"+peer->Name+":"+std::to_string(peer->PlayerID)+Packet.substr(4); peer->VehicleData = Packet; } SendToAll(server,peer,Packet,true,true); @@ -44,7 +43,7 @@ void VehicleParser(std::string Packet,ENetPeer*peer,ENetHost*server){ ID = stoi(Packet.substr(3)); } peer->VehicleData.clear(); - if(ID != -1 && ID == peer->serverVehicleID[0]){ + if(ID != -1 && ID == peer->PlayerID){ SendToAll(server,peer,Packet,true,true); } break; diff --git a/src/Network/Server.cpp b/src/Network/Server.cpp index 2215373..f871e7d 100644 --- a/src/Network/Server.cpp +++ b/src/Network/Server.cpp @@ -9,25 +9,23 @@ #include "../logger.h" #include "../Settings.hpp" -void ParseData(ENetPacket*packet,ENetPeer*peer,ENetHost *server); //Data Parser +void ParseData(ENetPacket*packet,ENetPeer*peer,ENetHost *server); void OnDisconnect(ENetHost *server,ENetPeer*peer,bool Timed); void OnConnect(ENetHost *server,ENetPeer*peer); ENetPacket* packet; int PlayerCount = 0; int FindID(ENetHost *server,ENetPeer*peer){ - int OpenID = 1, *p; + int OpenID = 1; bool Found; do { Found = true; for (int i = 0; i < server->connectedPeers; i++) { if (&server->peers[i] != peer) { - for(p=server->peers[i].serverVehicleID; p<(&server->peers[i].serverVehicleID)[1]; p++){ - if(*p == OpenID) { - Found = false; - OpenID++; - break; - } + if(server->peers[i].PlayerID == OpenID) { + Found = false; + OpenID++; + break; } } } @@ -39,7 +37,7 @@ int FindID(ENetHost *server,ENetPeer*peer){ void host_server(ENetHost *server) { ENetEvent event; PlayerCount = server->connectedPeers; - while (enet_host_service(server, &event, 2) > 0) { + while (enet_host_service(server, &event, 1) > 0) { switch (event.type) { case ENET_EVENT_TYPE_CONNECT: printf("A new client connected from %x:%u.\n", event.peer->address.host, event.peer->address.port); diff --git a/src/Network/enet.hpp b/src/Network/enet.hpp index 00cda96..8d24c29 100644 --- a/src/Network/enet.hpp +++ b/src/Network/enet.hpp @@ -35,10 +35,9 @@ #ifndef ENET_INCLUDE_H #define ENET_INCLUDE_H -#include -#include -#include -#include +#include +#include +#include #define ENET_VERSION_MAJOR 2 #define ENET_VERSION_MINOR 2 @@ -640,7 +639,7 @@ typedef struct _ENetPeer { std::string DID; std::string Role = "USER"; std::string VehicleData; - int gameVehicleID[10] = {0}; //added By Anonymous275 + int PlayerID; int serverVehicleID[10] = {0}; //added By Anonymous275 ENetPeerState state; ENetChannel * channels; diff --git a/src/Network/functions.cpp b/src/Network/functions.cpp index 644c456..4497886 100644 --- a/src/Network/functions.cpp +++ b/src/Network/functions.cpp @@ -14,4 +14,4 @@ std::vector Split(const std::string& String,const std::string& deli } Val.push_back(s); return Val; -} +} \ No newline at end of file diff --git a/src/Settings.hpp b/src/Settings.hpp index 4052c9e..cb432b2 100644 --- a/src/Settings.hpp +++ b/src/Settings.hpp @@ -5,8 +5,8 @@ extern bool Private; extern bool Debug; extern int MaxPlayers; -extern int UDPPort; -extern int TCPPort; +extern int Port; +extern int MaxCars; extern int PlayerCount; extern std::string MapName; extern std::string ServerName; diff --git a/src/config.cpp b/src/config.cpp index edf1e2c..83cfd9c 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -11,10 +11,14 @@ void GenerateConfig(); string RemoveComments(const string& Line); string convertToString(char* a, int size); void SetValues(const string& Line, int Index); -void SetMainValues(bool,int,int,int,string,string,string); -bool D; -int P,FP,MP; -string M,S,F; +string MapName = "/levels/gridmap/level.json"; +string ServerName = "BeamMP Server"; +string Resource = "Resources"; +bool Private = false; +bool Debug = false; +int MaxPlayers = 10; +int Port = 30814; +int MaxCars = 1; //Generates or Reads Config void ParseConfig(){ @@ -31,7 +35,6 @@ void ParseConfig(){ index++; } } - SetMainValues(D,P,FP,MP,M,S,F); //gives the values to Main }else{ info("Config Not Found Generating A new One"); GenerateConfig(); @@ -45,7 +48,7 @@ void SetValues(const string& Line, int Index) { int i = 0, state = 0; char Data[50] = ""; bool Switch = false; - if (Index > 4) { Switch = true; } + if (Index > 5)Switch = true; for (char c : Line) { if (Switch) { if (c == '\"') { state++; } @@ -67,19 +70,21 @@ void SetValues(const string& Line, int Index) { string::size_type sz; bool Boolean = (convertToString(Data,i-1).find("true") != string::npos);//searches for "true" switch (Index){ - case 1 : - D = Boolean;//checks and sets the Debug Value + case 1 : Debug = Boolean;//checks and sets the Debug Value break; - case 2 : P = stoi(Data, &sz);//sets the Port + case 2 : Private = Boolean;//checks and sets the Private Value break; - case 3 : FP = stoi(Data, &sz);//sets the TCP File Port + case 3 : Port = stoi(Data, &sz);//sets the Port break; - case 4 : MP = stoi(Data, &sz); //sets the Max Amount of player + case 4 : MaxCars = stoi(Data, &sz);//sets the Max Car amount break; - case 5 : M = Data; //Map + case 5 : MaxPlayers = stoi(Data, &sz); //sets the Max Amount of player break; - case 6 : S = Data; //Name - case 7 : F = Data; //File name + case 6 : MapName = Data; //Map + break; + case 7 : ServerName = Data; //Name + break; + case 8 : Resource = Data; //File name } } @@ -91,8 +96,9 @@ void GenerateConfig(){ FileStream.open ("Server.cfg"); FileStream << "# This is the BeamMP Server Configuration File\n" "Debug = false # true or false to enable debug console output\n" - "Port = 30814 # Port to run the server on\n" - "FilePort = 30814 # Port to transfer Files\n" + "Private = false # Private?\n" + "Port = 30814 # Port to run the server on UDP and TCP\n" + "Cars = 1 # Max cars for every player\n" "MaxPlayers = 10 # Maximum Amount of Clients\n" "Map = \"/levels/gridmap/info.json\" # Default Map\n" "Name = \"BeamMP New Server\" # Server Name\n" diff --git a/src/heartbeat.cpp b/src/heartbeat.cpp index bfb291d..1cda2a1 100644 --- a/src/heartbeat.cpp +++ b/src/heartbeat.cpp @@ -21,7 +21,7 @@ void Heartbeat() while(true) { PostHTTP("https://beamng-mp.com/heartbeat","uuid="+UUID+"&players="+to_string(PlayerCount)+"&maxplayers="+to_string(MaxPlayers)+"&port=" - + to_string(UDPPort) + "&map=" + MapName + "&private="+State+"&version="+ServerVersion+"&clientversion="+ClientVersion+"&name="+ServerName); + + to_string(Port) + "&map=" + MapName + "&private="+State+"&version="+ServerVersion+"&clientversion="+ClientVersion+"&name="+ServerName); std::this_thread::sleep_for (std::chrono::seconds(5)); } } @@ -29,7 +29,6 @@ void Heartbeat() void HeartbeatInit() { - /// Make initial connection to backend services to get UUID, then call Heartbeat() std::thread HB(Heartbeat); HB.detach(); } diff --git a/src/logger.cpp b/src/logger.cpp index e6dc1d1..63e42b2 100644 --- a/src/logger.cpp +++ b/src/logger.cpp @@ -6,28 +6,13 @@ #include #include "logger.h" #include -void addToLog(basic_string Data); +void addToLog(const std::string& Data); using namespace std; int loggerlevel; -void setLoggerLevel(char level_string[]) { - if (!strcmp(level_string, "ALL")) - loggerlevel = 0; - - if (!strcmp(level_string, "DEBUG")) - loggerlevel = 1; - - if (!strcmp(level_string, "INFO")) - loggerlevel = 2; - - if (!strcmp(level_string, "WARN")) - loggerlevel = 3; - - if (!strcmp(level_string, "ERROR")) - loggerlevel = 4; - - if (!strcmp(level_string, "OFF")) - loggerlevel = 5; +void setLoggerLevel(int level) { + //0 ALL 1 DEBUG 2 INFO 3 WARN 4 ERROR 5 OFF + loggerlevel = level; } stringstream getDate() { @@ -75,13 +60,6 @@ stringstream getDate() { } - - - - - - - void info(const std::string& toPrint) { if (loggerlevel <= 2){ cout << getDate().str() << "[INFO] " << toPrint << endl; diff --git a/src/logger.h b/src/logger.h index 7118a7f..6429a40 100644 --- a/src/logger.h +++ b/src/logger.h @@ -9,7 +9,7 @@ using namespace std; extern int loggerlevel; stringstream getDate(); -void setLoggerLevel(char level_string[]); +void setLoggerLevel(int level); void info(const std::string& toPrint); void warn(const std::string& toPrint); void error(const std::string& toPrint); diff --git a/src/main.cpp b/src/main.cpp index 4fe51af..b4f1bb9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5,26 +5,18 @@ #include #include #include -#include "logger.h" #include #include +#include "logger.h" +#include "Settings.hpp" using namespace std; void DebugData(); void LogInit(); void ParseConfig(); +void addToLog(const string& Data); void ServerMain(int Port, int MaxClients); -bool Debug = false; -void addToLog(basic_string Data); void HeartbeatInit(); - -string MapName = "/levels/gridmap/level.json"; -bool Private = false; -int MaxPlayers = 10; -int UDPPort = 30814; -int TCPPort = 30814; -string ServerName = "BeamMP Server"; -string Resource = "Resources"; string ServerVersion = "0.1"; string ClientVersion = "0.21"; void HandleResources(const std::string& path); @@ -35,35 +27,25 @@ int main() { ParseConfig(); HandleResources(Resource); HeartbeatInit(); - if(Debug){ //checks if debug is on - DebugData(); //Prints Debug Data - } - setLoggerLevel("ALL"); - std::thread TCPThread(TCPMain,TCPPort); + if(Debug)DebugData(); + setLoggerLevel(0); //0 for all + std::thread TCPThread(TCPMain,Port); TCPThread.detach(); - ServerMain(UDPPort, MaxPlayers); + ServerMain(Port, MaxPlayers); } void DebugData(){ - cout << "Debug : true" << endl; - cout << "Port : " << UDPPort << endl; - cout << "TCP Port : " << TCPPort << endl; - cout << "MaxPlayers : " << MaxPlayers << endl; - cout << "MapName : " << MapName << endl; - cout << "ServerName : " << ServerName << endl; - cout << "File : " << Resource << endl; + debug(string("Debug : ") + (Debug?"true":"false")); + debug(string("Private : ") + (Private?"true":"false")); + debug("Port : " + to_string(Port)); + debug("Max Cars : " + to_string(MaxCars)); + debug("MaxPlayers : " + to_string(MaxPlayers)); + debug("MapName : " + MapName); + debug("ServerName : " + ServerName ); + debug("File : " + Resource); } -void SetMainValues(bool D, int P, int FP,int MP,string Name,string serverName,string filename){ - Debug = D; - UDPPort = P; - TCPPort = FP; - MapName = Name; - ServerName = serverName; - MaxPlayers = MP; - Resource = filename; -} void LogInit(){ ofstream LFS; @@ -71,7 +53,7 @@ void LogInit(){ LFS.close(); } -void addToLog(basic_string Data){ +void addToLog(const string& Data){ ofstream LFS; LFS.open ("Server.log", std::ios_base::app); LFS << Data.c_str();