Add basic main() and server.properties reader
This commit is contained in:
parent
842e4a422a
commit
4488d8bcf2
|
@ -0,0 +1,51 @@
|
|||
#Minecraft server properties
|
||||
#(last boot timestamp)
|
||||
enable-jmx-monitoring=false
|
||||
rcon.port=25575
|
||||
level-seed=
|
||||
gamemode=survival
|
||||
enable-command-block=false
|
||||
enable-query=false
|
||||
generator-settings=
|
||||
level-name=world
|
||||
motd=A Minecraft Server
|
||||
query.port=25565
|
||||
pvp=true
|
||||
generate-structures=true
|
||||
difficulty=easy
|
||||
network-compression-threshold=256
|
||||
max-tick-time=60000
|
||||
max-players=20
|
||||
use-native-transport=true
|
||||
online-mode=true
|
||||
enable-status=true
|
||||
allow-flight=false
|
||||
broadcast-rcon-to-ops=true
|
||||
view-distance=10
|
||||
max-build-height=256
|
||||
server-ip=
|
||||
allow-nether=true
|
||||
server-port=25565
|
||||
enable-rcon=false
|
||||
sync-chunk-writes=true
|
||||
op-permission-level=4
|
||||
prevent-proxy-connections=false
|
||||
resource-pack=
|
||||
entity-broadcast-range-percentage=100
|
||||
rcon.password=
|
||||
player-idle-timeout=0
|
||||
force-gamemode=false
|
||||
rate-limit=0
|
||||
hardcore=false
|
||||
white-list=false
|
||||
broadcast-console-to-ops=true
|
||||
spawn-npcs=true
|
||||
spawn-animals=true
|
||||
snooper-enabled=true
|
||||
function-permission-level=2
|
||||
level-type=default
|
||||
spawn-monsters=true
|
||||
enforce-whitelist=false
|
||||
resource-pack-sha1=
|
||||
spawn-protection=16
|
||||
max-world-size=29999984
|
|
@ -0,0 +1,12 @@
|
|||
#include <stdio.h>
|
||||
#include "config/ServerProperties.h"
|
||||
|
||||
using namespace Feather;
|
||||
|
||||
int main()
|
||||
{
|
||||
ServerProperties properties("server.properties");
|
||||
printf("Starting server on port %d\n", properties.Get<int>("server-port"));
|
||||
|
||||
return 1;
|
||||
}
|
|
@ -0,0 +1,91 @@
|
|||
#include "ServerProperties.h"
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string_view>
|
||||
#include <algorithm>
|
||||
|
||||
#include "../util/StringUtil.h"
|
||||
|
||||
static const string STRING_TRUE("true");
|
||||
static const string STRING_FALSE("false");
|
||||
|
||||
namespace Feather
|
||||
{
|
||||
ServerProperties::ServerProperties(const char* path)
|
||||
{
|
||||
std::ifstream file;
|
||||
file.open(path);
|
||||
|
||||
printf("Reading %s...\n", path);
|
||||
if (file.is_open())
|
||||
{
|
||||
string line;
|
||||
while(std::getline(file, line))
|
||||
{
|
||||
// trip whitespace
|
||||
StringUtil::trim(line);
|
||||
|
||||
// skip comments
|
||||
if (line[0] == '#') continue;
|
||||
|
||||
// key=value
|
||||
size_t pos = line.find('=');
|
||||
|
||||
// java also accepts key:value
|
||||
if (pos == string::npos)
|
||||
pos = line.find(':');
|
||||
|
||||
if (pos == string::npos)
|
||||
continue;
|
||||
|
||||
string key = line.substr(0, pos);
|
||||
StringUtil::trim(key);
|
||||
string value = line.substr(pos + 1);
|
||||
StringUtil::trim(value);
|
||||
|
||||
properties.insert( {key, value} );
|
||||
}
|
||||
file.close();
|
||||
}
|
||||
|
||||
//for ( auto const& pair : properties )
|
||||
// std::cout << "[" << pair.first << "] = [" << pair.second << "]\n";
|
||||
|
||||
}
|
||||
|
||||
template <>
|
||||
string ServerProperties::Get<string>(string_view key)
|
||||
{
|
||||
return properties[string(key)];
|
||||
}
|
||||
|
||||
template <>
|
||||
bool ServerProperties::Get<bool>(string_view key)
|
||||
{
|
||||
string value = Get<string>(key);
|
||||
if (StringUtil::iequal(value, STRING_TRUE)) {
|
||||
return true;
|
||||
} else {
|
||||
// TODO: complain about non-bool
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
template <>
|
||||
int ServerProperties::Get<int>(string_view key)
|
||||
{
|
||||
return std::stoi(Get<string>(key));
|
||||
}
|
||||
|
||||
template <>
|
||||
long ServerProperties::Get<long>(string_view key)
|
||||
{
|
||||
return std::stol(Get<string>(key));
|
||||
}
|
||||
|
||||
template <>
|
||||
long long ServerProperties::Get<long long>(string_view key)
|
||||
{
|
||||
return std::stoll(Get<string>(key));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
|
||||
using std::string;
|
||||
using std::string_view;
|
||||
|
||||
namespace Feather
|
||||
{
|
||||
class ServerProperties
|
||||
{
|
||||
public:
|
||||
ServerProperties(const char* path);
|
||||
|
||||
template <typename T>
|
||||
T Get(string_view key);
|
||||
private:
|
||||
std::unordered_map<string, string> properties;
|
||||
};
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
#include <cctype>
|
||||
|
||||
namespace Feather::StringUtil
|
||||
{
|
||||
bool iequalc(char c1, char c2)
|
||||
{
|
||||
if (c1 == c2)
|
||||
return true;
|
||||
else if (std::toupper(c1) == std::toupper(c2))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,63 @@
|
|||
#include <algorithm>
|
||||
#include <cctype>
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
|
||||
using std::string;
|
||||
|
||||
namespace Feather::StringUtil
|
||||
{
|
||||
|
||||
bool iequalc(char c1, char c2);
|
||||
|
||||
// case insensitive string equal
|
||||
static inline bool iequal(string const& s1, string const& s2)
|
||||
{
|
||||
return s1.size() == s2.size() && std::equal(s1.begin(), s1.end(), s2.begin(), iequalc);
|
||||
}
|
||||
|
||||
// trim from start (in place)
|
||||
static inline void ltrim(string &s)
|
||||
{
|
||||
s.erase(s.begin(), std::find_if(s.begin(), s.end(), [](int ch) {
|
||||
return !std::isspace(ch);
|
||||
}));
|
||||
}
|
||||
|
||||
// trim from end (in place)
|
||||
static inline void rtrim(string &s)
|
||||
{
|
||||
s.erase(std::find_if(s.rbegin(), s.rend(), [](int ch) {
|
||||
return !std::isspace(ch);
|
||||
}).base(),
|
||||
s.end());
|
||||
}
|
||||
|
||||
// trim from both ends (in place)
|
||||
static inline void trim(string &s)
|
||||
{
|
||||
ltrim(s);
|
||||
rtrim(s);
|
||||
}
|
||||
|
||||
// trim from start (copying)
|
||||
static inline string ltrim_copy(string s)
|
||||
{
|
||||
ltrim(s);
|
||||
return s;
|
||||
}
|
||||
|
||||
// trim from end (copying)
|
||||
static inline string rtrim_copy(string s)
|
||||
{
|
||||
rtrim(s);
|
||||
return s;
|
||||
}
|
||||
|
||||
// trim from both ends (copying)
|
||||
static inline string trim_copy(string s)
|
||||
{
|
||||
trim(s);
|
||||
return s;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue