lots of work

This commit is contained in:
Anonymous275 2020-05-04 01:17:16 +03:00
parent 2d360610fc
commit b0c6c2bac4
11 changed files with 68 additions and 107 deletions

View File

@ -34,7 +34,7 @@ void UpdatePlayers(ENetHost *server, ENetPeer*peer){
} }
void OnDisconnect(ENetHost *server,ENetPeer*peer,bool Timed){ 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); SendToAll(server,peer, Packet,false,true);
if(Timed)Packet = "L"+peer->Name+" Timed out!"; if(Timed)Packet = "L"+peer->Name+" Timed out!";
else Packet = "L"+peer->Name+" Left the server!"; 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){ void OnConnect(ENetHost *server,ENetPeer*peer){
Respond("NR",peer); Respond("NR",peer);
peer->serverVehicleID[0] = FindID(server,peer); ///TODO: WHAT IF IT IS THE SECOND VEHICLE? peer->PlayerID = FindID(server,peer); ///TODO: WHAT IF IT IS THE SECOND VEHICLE?
std::string ID = "P" + std::to_string(peer->serverVehicleID[0]); std::string ID = "P" + std::to_string(peer->PlayerID);
Respond(ID,peer); 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));
} }

View File

@ -1,12 +1,11 @@
/// ///
/// Created by Anonymous275 on 4/2/2020 /// Created by Anonymous275 on 4/2/2020
/// ///
#include <set>
#include <string> #include <string>
#include "enet.hpp"
#include <vector>
#include <iostream>
#include <thread> #include <thread>
#include <iostream>
#include "enet.hpp"
#include "../logger.h" #include "../logger.h"
#include "../Settings.hpp" #include "../Settings.hpp"
@ -20,7 +19,7 @@ void FindAndSync(ENetPeer*peer,ENetHost*server,int VehID){
for (int i = 0; i < server->connectedPeers; i++) { for (int i = 0; i < server->connectedPeers; i++) {
ENetClient = &server->peers[i]; ENetClient = &server->peers[i];
if (ENetClient != peer){ if (ENetClient != peer){
if(ENetClient->serverVehicleID[0] == VehID){ if(ENetClient->PlayerID == VehID){ /////mark
Respond(ENetClient->VehicleData,peer); 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 switch(Code){ //Spawned Destroyed Switched/Moved NotFound Reset
case 's': case 's':
if(Data.at(0) == '0'){ 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; peer->VehicleData = Packet;
} }
SendToAll(server,peer,Packet,true,true); SendToAll(server,peer,Packet,true,true);
@ -44,7 +43,7 @@ void VehicleParser(std::string Packet,ENetPeer*peer,ENetHost*server){
ID = stoi(Packet.substr(3)); ID = stoi(Packet.substr(3));
} }
peer->VehicleData.clear(); peer->VehicleData.clear();
if(ID != -1 && ID == peer->serverVehicleID[0]){ if(ID != -1 && ID == peer->PlayerID){
SendToAll(server,peer,Packet,true,true); SendToAll(server,peer,Packet,true,true);
} }
break; break;

View File

@ -9,25 +9,23 @@
#include "../logger.h" #include "../logger.h"
#include "../Settings.hpp" #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 OnDisconnect(ENetHost *server,ENetPeer*peer,bool Timed);
void OnConnect(ENetHost *server,ENetPeer*peer); void OnConnect(ENetHost *server,ENetPeer*peer);
ENetPacket* packet; ENetPacket* packet;
int PlayerCount = 0; int PlayerCount = 0;
int FindID(ENetHost *server,ENetPeer*peer){ int FindID(ENetHost *server,ENetPeer*peer){
int OpenID = 1, *p; int OpenID = 1;
bool Found; bool Found;
do { do {
Found = true; Found = true;
for (int i = 0; i < server->connectedPeers; i++) { for (int i = 0; i < server->connectedPeers; i++) {
if (&server->peers[i] != peer) { if (&server->peers[i] != peer) {
for(p=server->peers[i].serverVehicleID; p<(&server->peers[i].serverVehicleID)[1]; p++){ if(server->peers[i].PlayerID == OpenID) {
if(*p == OpenID) { Found = false;
Found = false; OpenID++;
OpenID++; break;
break;
}
} }
} }
} }
@ -39,7 +37,7 @@ int FindID(ENetHost *server,ENetPeer*peer){
void host_server(ENetHost *server) { void host_server(ENetHost *server) {
ENetEvent event; ENetEvent event;
PlayerCount = server->connectedPeers; PlayerCount = server->connectedPeers;
while (enet_host_service(server, &event, 2) > 0) { while (enet_host_service(server, &event, 1) > 0) {
switch (event.type) { switch (event.type) {
case ENET_EVENT_TYPE_CONNECT: case ENET_EVENT_TYPE_CONNECT:
printf("A new client connected from %x:%u.\n", event.peer->address.host, event.peer->address.port); printf("A new client connected from %x:%u.\n", event.peer->address.host, event.peer->address.port);

View File

@ -35,10 +35,9 @@
#ifndef ENET_INCLUDE_H #ifndef ENET_INCLUDE_H
#define ENET_INCLUDE_H #define ENET_INCLUDE_H
#include <stdlib.h> #include <cstdlib>
#include <stdbool.h> #include <cstdint>
#include <stdint.h> #include <ctime>
#include <time.h>
#define ENET_VERSION_MAJOR 2 #define ENET_VERSION_MAJOR 2
#define ENET_VERSION_MINOR 2 #define ENET_VERSION_MINOR 2
@ -640,7 +639,7 @@ typedef struct _ENetPeer {
std::string DID; std::string DID;
std::string Role = "USER"; std::string Role = "USER";
std::string VehicleData; std::string VehicleData;
int gameVehicleID[10] = {0}; //added By Anonymous275 int PlayerID;
int serverVehicleID[10] = {0}; //added By Anonymous275 int serverVehicleID[10] = {0}; //added By Anonymous275
ENetPeerState state; ENetPeerState state;
ENetChannel * channels; ENetChannel * channels;

View File

@ -14,4 +14,4 @@ std::vector<std::string> Split(const std::string& String,const std::string& deli
} }
Val.push_back(s); Val.push_back(s);
return Val; return Val;
} }

View File

@ -5,8 +5,8 @@
extern bool Private; extern bool Private;
extern bool Debug; extern bool Debug;
extern int MaxPlayers; extern int MaxPlayers;
extern int UDPPort; extern int Port;
extern int TCPPort; extern int MaxCars;
extern int PlayerCount; extern int PlayerCount;
extern std::string MapName; extern std::string MapName;
extern std::string ServerName; extern std::string ServerName;

View File

@ -11,10 +11,14 @@ void GenerateConfig();
string RemoveComments(const string& Line); string RemoveComments(const string& Line);
string convertToString(char* a, int size); string convertToString(char* a, int size);
void SetValues(const string& Line, int Index); void SetValues(const string& Line, int Index);
void SetMainValues(bool,int,int,int,string,string,string); string MapName = "/levels/gridmap/level.json";
bool D; string ServerName = "BeamMP Server";
int P,FP,MP; string Resource = "Resources";
string M,S,F; bool Private = false;
bool Debug = false;
int MaxPlayers = 10;
int Port = 30814;
int MaxCars = 1;
//Generates or Reads Config //Generates or Reads Config
void ParseConfig(){ void ParseConfig(){
@ -31,7 +35,6 @@ void ParseConfig(){
index++; index++;
} }
} }
SetMainValues(D,P,FP,MP,M,S,F); //gives the values to Main
}else{ }else{
info("Config Not Found Generating A new One"); info("Config Not Found Generating A new One");
GenerateConfig(); GenerateConfig();
@ -45,7 +48,7 @@ void SetValues(const string& Line, int Index) {
int i = 0, state = 0; int i = 0, state = 0;
char Data[50] = ""; char Data[50] = "";
bool Switch = false; bool Switch = false;
if (Index > 4) { Switch = true; } if (Index > 5)Switch = true;
for (char c : Line) { for (char c : Line) {
if (Switch) { if (Switch) {
if (c == '\"') { state++; } if (c == '\"') { state++; }
@ -67,19 +70,21 @@ void SetValues(const string& Line, int Index) {
string::size_type sz; string::size_type sz;
bool Boolean = (convertToString(Data,i-1).find("true") != string::npos);//searches for "true" bool Boolean = (convertToString(Data,i-1).find("true") != string::npos);//searches for "true"
switch (Index){ switch (Index){
case 1 : case 1 : Debug = Boolean;//checks and sets the Debug Value
D = Boolean;//checks and sets the Debug Value
break; break;
case 2 : P = stoi(Data, &sz);//sets the Port case 2 : Private = Boolean;//checks and sets the Private Value
break; break;
case 3 : FP = stoi(Data, &sz);//sets the TCP File Port case 3 : Port = stoi(Data, &sz);//sets the Port
break; 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; break;
case 5 : M = Data; //Map case 5 : MaxPlayers = stoi(Data, &sz); //sets the Max Amount of player
break; break;
case 6 : S = Data; //Name case 6 : MapName = Data; //Map
case 7 : F = Data; //File name break;
case 7 : ServerName = Data; //Name
break;
case 8 : Resource = Data; //File name
} }
} }
@ -91,8 +96,9 @@ void GenerateConfig(){
FileStream.open ("Server.cfg"); FileStream.open ("Server.cfg");
FileStream << "# This is the BeamMP Server Configuration File\n" FileStream << "# This is the BeamMP Server Configuration File\n"
"Debug = false # true or false to enable debug console output\n" "Debug = false # true or false to enable debug console output\n"
"Port = 30814 # Port to run the server on\n" "Private = false # Private?\n"
"FilePort = 30814 # Port to transfer Files\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" "MaxPlayers = 10 # Maximum Amount of Clients\n"
"Map = \"/levels/gridmap/info.json\" # Default Map\n" "Map = \"/levels/gridmap/info.json\" # Default Map\n"
"Name = \"BeamMP New Server\" # Server Name\n" "Name = \"BeamMP New Server\" # Server Name\n"

View File

@ -21,7 +21,7 @@ void Heartbeat()
while(true) while(true)
{ {
PostHTTP("https://beamng-mp.com/heartbeat","uuid="+UUID+"&players="+to_string(PlayerCount)+"&maxplayers="+to_string(MaxPlayers)+"&port=" 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)); std::this_thread::sleep_for (std::chrono::seconds(5));
} }
} }
@ -29,7 +29,6 @@ void Heartbeat()
void HeartbeatInit() void HeartbeatInit()
{ {
/// Make initial connection to backend services to get UUID, then call Heartbeat()
std::thread HB(Heartbeat); std::thread HB(Heartbeat);
HB.detach(); HB.detach();
} }

View File

@ -6,28 +6,13 @@
#include <fstream> #include <fstream>
#include "logger.h" #include "logger.h"
#include <string> #include <string>
void addToLog(basic_string<char> Data); void addToLog(const std::string& Data);
using namespace std; using namespace std;
int loggerlevel; int loggerlevel;
void setLoggerLevel(char level_string[]) { void setLoggerLevel(int level) {
if (!strcmp(level_string, "ALL")) //0 ALL 1 DEBUG 2 INFO 3 WARN 4 ERROR 5 OFF
loggerlevel = 0; loggerlevel = level;
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;
} }
stringstream getDate() { stringstream getDate() {
@ -75,13 +60,6 @@ stringstream getDate() {
} }
void info(const std::string& toPrint) { void info(const std::string& toPrint) {
if (loggerlevel <= 2){ if (loggerlevel <= 2){
cout << getDate().str() << "[INFO] " << toPrint << endl; cout << getDate().str() << "[INFO] " << toPrint << endl;

View File

@ -9,7 +9,7 @@
using namespace std; using namespace std;
extern int loggerlevel; extern int loggerlevel;
stringstream getDate(); stringstream getDate();
void setLoggerLevel(char level_string[]); void setLoggerLevel(int level);
void info(const std::string& toPrint); void info(const std::string& toPrint);
void warn(const std::string& toPrint); void warn(const std::string& toPrint);
void error(const std::string& toPrint); void error(const std::string& toPrint);

View File

@ -5,26 +5,18 @@
#include <iostream> #include <iostream>
#include <string> #include <string>
#include <fstream> #include <fstream>
#include "logger.h"
#include <chrono> #include <chrono>
#include <thread> #include <thread>
#include "logger.h"
#include "Settings.hpp"
using namespace std; using namespace std;
void DebugData(); void DebugData();
void LogInit(); void LogInit();
void ParseConfig(); void ParseConfig();
void addToLog(const string& Data);
void ServerMain(int Port, int MaxClients); void ServerMain(int Port, int MaxClients);
bool Debug = false;
void addToLog(basic_string<char> Data);
void HeartbeatInit(); 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 ServerVersion = "0.1";
string ClientVersion = "0.21"; string ClientVersion = "0.21";
void HandleResources(const std::string& path); void HandleResources(const std::string& path);
@ -35,35 +27,25 @@ int main() {
ParseConfig(); ParseConfig();
HandleResources(Resource); HandleResources(Resource);
HeartbeatInit(); HeartbeatInit();
if(Debug){ //checks if debug is on if(Debug)DebugData();
DebugData(); //Prints Debug Data setLoggerLevel(0); //0 for all
} std::thread TCPThread(TCPMain,Port);
setLoggerLevel("ALL");
std::thread TCPThread(TCPMain,TCPPort);
TCPThread.detach(); TCPThread.detach();
ServerMain(UDPPort, MaxPlayers); ServerMain(Port, MaxPlayers);
} }
void DebugData(){ void DebugData(){
cout << "Debug : true" << endl; debug(string("Debug : ") + (Debug?"true":"false"));
cout << "Port : " << UDPPort << endl; debug(string("Private : ") + (Private?"true":"false"));
cout << "TCP Port : " << TCPPort << endl; debug("Port : " + to_string(Port));
cout << "MaxPlayers : " << MaxPlayers << endl; debug("Max Cars : " + to_string(MaxCars));
cout << "MapName : " << MapName << endl; debug("MaxPlayers : " + to_string(MaxPlayers));
cout << "ServerName : " << ServerName << endl; debug("MapName : " + MapName);
cout << "File : " << Resource << endl; 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(){ void LogInit(){
ofstream LFS; ofstream LFS;
@ -71,7 +53,7 @@ void LogInit(){
LFS.close(); LFS.close();
} }
void addToLog(basic_string<char> Data){ void addToLog(const string& Data){
ofstream LFS; ofstream LFS;
LFS.open ("Server.log", std::ios_base::app); LFS.open ("Server.log", std::ios_base::app);
LFS << Data.c_str(); LFS << Data.c_str();