mirror of
https://github.com/SantaSpeen/BeamMP-Server.git
synced 2025-08-18 12:45:36 +00:00
lots of work
This commit is contained in:
parent
2d360610fc
commit
b0c6c2bac4
@ -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));
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
}
|
}
|
@ -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;
|
||||||
|
@ -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"
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
|
50
src/main.cpp
50
src/main.cpp
@ -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();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user