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){
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));
}

View File

@ -1,12 +1,11 @@
///
/// Created by Anonymous275 on 4/2/2020
///
#include <set>
#include <string>
#include "enet.hpp"
#include <vector>
#include <iostream>
#include <thread>
#include <iostream>
#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;

View File

@ -9,28 +9,26 @@
#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) {
if(server->peers[i].PlayerID == OpenID) {
Found = false;
OpenID++;
break;
}
}
}
}
}while (!Found);
return OpenID;
}
@ -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);

View File

@ -35,10 +35,9 @@
#ifndef ENET_INCLUDE_H
#define ENET_INCLUDE_H
#include <stdlib.h>
#include <stdbool.h>
#include <stdint.h>
#include <time.h>
#include <cstdlib>
#include <cstdint>
#include <ctime>
#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;

View File

@ -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;

View File

@ -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"

View File

@ -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();
}

View File

@ -6,28 +6,13 @@
#include <fstream>
#include "logger.h"
#include <string>
void addToLog(basic_string<char> 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;

View File

@ -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);

View File

@ -5,26 +5,18 @@
#include <iostream>
#include <string>
#include <fstream>
#include "logger.h"
#include <chrono>
#include <thread>
#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<char> 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<char> Data){
void addToLog(const string& Data){
ofstream LFS;
LFS.open ("Server.log", std::ios_base::app);
LFS << Data.c_str();