0.3.0: Serverliste und BSO-Konten
- Heartbeat an die Website, Abmelden beim Beenden (--private, --public-address, --description, --master) - Spiel-Tickets pruefen (Signatur der Website), Name aus dem Konto, --no-auth fuer LAN - IPv4 und IPv6, Protokoll 2 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+19
-6
@@ -4,30 +4,42 @@ using System.Net.Sockets;
|
||||
using BSO.Net;
|
||||
using BSO.Server;
|
||||
|
||||
// BSO.Server [--port 7777] [--name "Mein Server"] [--max 8] [--bot]
|
||||
// BSO.Server [--port 7777] [--name "Mein Server"] [--description "..."] [--max 8] [--bot]
|
||||
// [--private] [--public-address host] [--master https://bso.mbm.wtf] [--no-auth]
|
||||
// BSO.Server --probe host[:port] (Test: verbindet sich wie die Mod und zeigt, was ankommt)
|
||||
|
||||
int port = Protocol.DefaultPort, max = 8;
|
||||
string name = "BSO Server", probe = null;
|
||||
bool bot = false;
|
||||
string name = "BSO Server", description = "", probe = null, publicAddress = null, master = MasterClient.DefaultUrl;
|
||||
bool bot = false, listed = true, auth = true;
|
||||
for (int i = 0; i < args.Length; i++)
|
||||
{
|
||||
switch (args[i])
|
||||
{
|
||||
case "--port": port = int.Parse(args[++i]); break;
|
||||
case "--name": name = args[++i]; break;
|
||||
case "--description": description = args[++i]; break;
|
||||
case "--max": max = int.Parse(args[++i]); break;
|
||||
case "--bot": bot = true; break;
|
||||
case "--private": listed = false; break; // nicht in der Serverliste
|
||||
case "--public-address": publicAddress = args[++i]; break; // Adresse fuer die Liste (hinter NAT/Proxy)
|
||||
case "--master": master = args[++i]; break; // andere Website (Tests: http://localhost:5080)
|
||||
case "--no-auth": auth = false; break; // ohne BSO-Konto (LAN, Tests)
|
||||
case "--probe": probe = args[++i]; break;
|
||||
default:
|
||||
Console.WriteLine("BSO.Server [--port 7777] [--name \"Name\"] [--max 8] [--bot] | --probe host[:port]");
|
||||
Console.WriteLine("BSO.Server [--port 7777] [--name \"Name\"] [--description \"...\"] [--max 8] [--bot] [--private]\n" +
|
||||
" [--public-address host] [--master url] [--no-auth] | --probe host[:port]");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (probe != null) return Probe(probe);
|
||||
|
||||
var server = new GameServer(port, name, max);
|
||||
var server = new GameServer(port, name, max) { RequireAccount = auth };
|
||||
var masterClient = new MasterClient(master, server, port, listed, publicAddress, description);
|
||||
server.Master = masterClient;
|
||||
if (auth) masterClient.LoadTicketKeyAsync().Wait();
|
||||
else GameServer.Log("--no-auth: Spieler brauchen kein BSO-Konto, Namen sind frei waehlbar");
|
||||
masterClient.Start();
|
||||
if (bot) server.AddBot();
|
||||
GameServer.Log("Befehle: help, status, bot, kick <id>, stop");
|
||||
|
||||
@@ -50,6 +62,7 @@ while (running)
|
||||
}
|
||||
Thread.Sleep(5);
|
||||
}
|
||||
masterClient.Stop();
|
||||
server.Stop();
|
||||
GameServer.Log("Server beendet");
|
||||
return 0;
|
||||
@@ -63,7 +76,7 @@ static int Probe(string target)
|
||||
if (!tcp.ConnectAsync(hp[0], p).Wait(5000)) { Console.WriteLine("Keine Verbindung zu " + target); return 2; }
|
||||
var conn = new Connection(tcp);
|
||||
conn.Send(MsgType.Info, null);
|
||||
conn.Send(MsgType.Hello, Wire.Build(w => { w.Write(Protocol.Version); w.Write("probe"); w.Write("Probe"); }));
|
||||
conn.Send(MsgType.Hello, Wire.Build(w => { w.Write(Protocol.Version); w.Write("probe"); w.Write("Probe"); w.Write(Environment.GetEnvironmentVariable("BSO_PROBE_TICKET") ?? ""); }));
|
||||
conn.Send(MsgType.Ping, Wire.Build(w => w.Write(Stopwatch.GetTimestamp())));
|
||||
// Eigene Position, damit der Testbot losfaehrt
|
||||
var me = new PlayerState { Mode = PlayerMode.InBus, X = 70000, Y = 30000, Z = 760 };
|
||||
|
||||
Reference in New Issue
Block a user