diff --git a/.gitignore b/.gitignore index 93ce8ed..f1b50de 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,7 @@ out/ #Clion Files cmake-build-debug/ +cmake-build-release/ # Build results [Dd]ebug/ [Dd]ebugPublic/ diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..66d2284 --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +BeamMP-Server \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 00ebf0d..d8e2a02 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.15) -project(BeamNG-MP-Server) +project(BeamMP-Server) set(CMAKE_CXX_STANDARD 14) -add_executable(BeamNG-MP-Server src/main.cpp src/logger.cpp src/config.cpp src/Network/Server.cpp src/Network/enet.h src/Network/DataParser.cpp src/heartbeat.cpp src/heartbeat.h src/Network/ClientHandler.cpp) -target_link_libraries(BeamNG-MP-Server winmm ws2_32) \ No newline at end of file +add_executable(BeamMP-Server src/main.cpp src/logger.cpp src/config.cpp src/Network/Server.cpp src/Network/enet.h src/Network/DataParser.cpp src/heartbeat.cpp src/heartbeat.h src/Network/ClientHandler.cpp src/Network/functions.cpp) +target_link_libraries(BeamMP-Server winmm ws2_32) \ No newline at end of file diff --git a/src/Network/DataParser.cpp b/src/Network/DataParser.cpp index cbb27e8..7a2f8a8 100644 --- a/src/Network/DataParser.cpp +++ b/src/Network/DataParser.cpp @@ -3,23 +3,30 @@ // #include "enet.h" #include +#include +#include #include "../logger.h" -using namespace std; -char Name[20] = ""; -void ParseData(ENetPacket*packet,ENetPeer*peer){ //here we will parse the data - enet_uint8* Data = packet->data; +std::vector Split(const std::string& String,const std::string& delimiter); +void OnConnect(ENetPeer*peer,const std::string& data); + +void ParseData(ENetPacket*packet,ENetPeer*peer){ //here we will parse the data + std::string Packet = (char*)packet->data; + int off = stoi(Packet.substr(0, 2)); + std::string header = Packet.substr(2, off - 2), data = Packet.substr(off); + std::vector split; + + if(!header.empty()) { + std::cout << header << " header size : " << header.size() << std::endl; + split = Split(header, ":"); //1st is reliable - 2nd is Code - 3rd is VehID + } + if(!data.empty()){ + switch (stoi(split.at(1))){ + case 2000: + OnConnect(peer,data); + break; + } + //std::cout << data << std::endl; + } - cout << "Data : " << packet->data << std::endl; - cout << "Size : " << strlen(reinterpret_cast(packet->data)) << std::endl; - /*if(strcmp((char*)peer->Name,"Client information")==0){ //Checks if the Client has no name - sprintf(Name,"%s",Data); - peer->Name = (void *)Name; - char Info[100]; - sprintf(Info,"Client Name is %s ID : %u\n",Name,peer->connectID); //ID System - info(Info); //Logs the data - peer->serverVehicleID = (int)peer->connectID; //test to see if it works - sprintf(Info,"%s ServerVehicleID : %d GameVehicleID : %d",Name,peer->serverVehicleID,peer->gameVehicleID[0]); - info(Info); - }*/ } \ No newline at end of file diff --git a/src/Network/Server.cpp b/src/Network/Server.cpp index b1f189c..69dd8bf 100644 --- a/src/Network/Server.cpp +++ b/src/Network/Server.cpp @@ -5,11 +5,11 @@ #define ENET_IMPLEMENTATION #include "enet.h" #include -#include +#include #include "../logger.h" + void ParseData(ENetPacket*packet,ENetPeer*peer); //Data Parser -void NameRequest(ENetPeer*peer); -void SendToAll(ENetHost *server,ENetEvent event); + ENetPacket* packet; @@ -20,13 +20,10 @@ void host_server(ENetHost *server) { case ENET_EVENT_TYPE_CONNECT: printf("A new client connected from %x:%u.\n", event.peer->address.host, event.peer->address.port); //Help xD //the data should be the client info could be name for now it's Client information - NameRequest(event.peer); event.peer->Name = (void *)"Client information"; event.peer->gameVehicleID[0] = 15; event.peer->serverVehicleID = 17; - SendToAll(server,event); - break; case ENET_EVENT_TYPE_RECEIVE: @@ -38,12 +35,12 @@ void host_server(ENetHost *server) { case ENET_EVENT_TYPE_DISCONNECT: printf ("%s disconnected.\n", (char *)event.peer->Name); // Reset the peer's client information. - event.peer->Name = NULL; + event.peer->Name = nullptr; break; case ENET_EVENT_TYPE_DISCONNECT_TIMEOUT: printf ("%s timed out.\n", (char *)event.peer->Name); - event.peer->Name = NULL; + event.peer->Name = nullptr; break; case ENET_EVENT_TYPE_NONE: break; @@ -66,7 +63,7 @@ void ServerMain(int Port, int MaxClients) { //create a server info("starting server with a maximum of " + to_string(MaxClients) + " Clients..."); server = enet_host_create(&address, MaxClients, 2, 0, 0); - if (server == NULL) { + if (server == nullptr) { error("An error occurred while trying to create a server host."); return; } diff --git a/src/Network/functions.cpp b/src/Network/functions.cpp new file mode 100644 index 0000000..cd14dc3 --- /dev/null +++ b/src/Network/functions.cpp @@ -0,0 +1,30 @@ +/// +/// Created by Anonymous275 on 4/1/2020 +/// +#include "enet.h" +#include +#include "../logger.h" + +std::vector Split(const std::string& String,const std::string& delimiter){ + std::vector Val; + size_t pos = 0; + std::string token,s = String; + while ((pos = s.find(delimiter)) != std::string::npos) { + token = s.substr(0, pos); + Val.push_back(token); + s.erase(0, pos + delimiter.length()); + } + Val.push_back(s); + return Val; +} + +void OnConnect(ENetPeer*peer,const std::string& data){ + std::vector Data = Split(data,":"); + if(strcmp((char*)peer->Name,"Client information")==0){ //Checks if the Client has no name + peer->Name = (void *)Data.at(0).c_str(); + char Info[100]; + info("Client Name is " + Data.at(0) + " ID : " + std::to_string(peer->connectID)); //ID System //Logs the data + peer->serverVehicleID = (int)peer->connectID; //test to see if it works + info(Data.at(0)+" ServerVehicleID : "+std::to_string(peer->serverVehicleID)+" GameVehicleID : " + std::to_string(peer->gameVehicleID[0])); + } +} diff --git a/src/config.cpp b/src/config.cpp index 5fdbb4c..c664522 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -2,7 +2,6 @@ // Created by Anonymous275 on 1/28/2020. // -#include "main.h" #include #include #include diff --git a/src/logger.cpp b/src/logger.cpp index 727280a..0f59f17 100644 --- a/src/logger.cpp +++ b/src/logger.cpp @@ -5,6 +5,7 @@ #include #include "logger.h" +#include void addToLog(basic_string Data); using namespace std; int loggerlevel; @@ -81,14 +82,14 @@ stringstream getDate() { -void info(basic_string toPrint) { +void info(const std::string& toPrint) { if (loggerlevel <= 2){ cout << getDate().str() << "[INFO] " << toPrint << endl; addToLog(getDate().str() + "[INFO] " + toPrint + "\n"); } } -void error(basic_string toPrint) { +void error(const std::string& toPrint) { if (loggerlevel <= 4) { cout << getDate().str() << "[ERROR] " << toPrint << endl; addToLog(getDate().str() + "[ERROR] " + toPrint + "\n"); @@ -96,7 +97,7 @@ void error(basic_string toPrint) { } -void warn(basic_string toPrint) { +void warn(const std::string& toPrint) { if (loggerlevel <= 3) { cout << getDate().str() << "[WARN] " << toPrint << endl; addToLog(getDate().str() + "[WARN] " + toPrint + "\n"); @@ -104,7 +105,7 @@ void warn(basic_string toPrint) { } -void debug(basic_string toPrint) { +void debug(const std::string& toPrint) { if (loggerlevel <= 1) { cout << getDate().str() << "[DEBUG] " << toPrint << endl; addToLog(getDate().str() + "[DEBUG] " + toPrint + "\n"); diff --git a/src/logger.h b/src/logger.h index e1a0c76..9db46b3 100644 --- a/src/logger.h +++ b/src/logger.h @@ -10,7 +10,7 @@ using namespace std; extern int loggerlevel; stringstream getDate(); void setLoggerLevel(char level_string[]); -void info(basic_string toPrint); -void warn(basic_string toPrint); -void error(basic_string toPrint); -void debug(basic_string toPrint); +void info(const std::string& toPrint); +void warn(const std::string& toPrint); +void error(const std::string& toPrint); +void debug(const std::string& toPrint); diff --git a/src/main.cpp b/src/main.cpp index 07d7ba4..9992e85 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2,7 +2,6 @@ // Created by Anonymous275 on 28.01.2020. // -#include "main.h" #include #include #include diff --git a/src/main.h b/src/main.h deleted file mode 100644 index 013772b..0000000 --- a/src/main.h +++ /dev/null @@ -1,12 +0,0 @@ -// -// Created by Anonymous275 on 28.01.2020. -// - -#ifndef BEAMNG_MP_SERVER_MAIN_H -#define BEAMNG_MP_SERVER_MAIN_H - -class main { - -}; - -#endif //BEAMNG_MP_SERVER_MAIN_H