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){
|
||||
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));
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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"
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
50
src/main.cpp
50
src/main.cpp
@ -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();
|
||||
|
Loading…
x
Reference in New Issue
Block a user