Don't tell the master server about local servers
This commit is contained in:
@@ -371,9 +371,9 @@ namespace OpenRA
|
||||
return modData.ObjectCreator.CreateObject<T>( name );
|
||||
}
|
||||
|
||||
public static void CreateServer(int port, string name, string map)
|
||||
public static void CreateServer(string name, string map, int port, bool advertiseOnline, int externalPort)
|
||||
{
|
||||
server = new Server.Server(IPAddress.Any, port, name, Settings.Game.Mods, map, modData);
|
||||
server = new Server.Server(IPAddress.Any, port, name, Settings.Game.Mods, map, advertiseOnline, externalPort, modData);
|
||||
}
|
||||
|
||||
public static void CreateLocalServer(string map)
|
||||
@@ -383,6 +383,8 @@ namespace OpenRA
|
||||
"Skirmish Game",
|
||||
Game.Settings.Game.Mods,
|
||||
map,
|
||||
false,
|
||||
0,
|
||||
modData);
|
||||
}
|
||||
|
||||
|
||||
@@ -38,6 +38,10 @@ namespace OpenRA.Server
|
||||
public Session lobbyInfo;
|
||||
public bool GameStarted = false;
|
||||
public string Name;
|
||||
public IPAddress Ip {get; private set;}
|
||||
public int Port {get; private set;}
|
||||
public int ExternalPort {get; private set;}
|
||||
public bool AdvertiseOnline {get; private set;}
|
||||
int randomSeed;
|
||||
|
||||
public ModData ModData;
|
||||
@@ -49,13 +53,17 @@ namespace OpenRA.Server
|
||||
shutdown = true;
|
||||
}
|
||||
|
||||
public Server(IPAddress ip, int port, string serverName, string[] mods, string map, ModData modData)
|
||||
public Server(IPAddress ip, int port, string serverName, string[] mods, string map, bool advertiseOnline, int externalPort, ModData modData)
|
||||
{
|
||||
Log.AddChannel("server", "server.log");
|
||||
Ip = ip;
|
||||
Port = port;
|
||||
ExternalPort = externalPort;
|
||||
listener = new TcpListener(ip, port);
|
||||
Name = serverName;
|
||||
randomSeed = (int)DateTime.Now.ToBinary();
|
||||
ModData = modData;
|
||||
AdvertiseOnline = advertiseOnline;
|
||||
|
||||
foreach (var trait in modData.Manifest.ServerTraits)
|
||||
ServerTraits.Add( modData.ObjectCreator.CreateObject<ServerTrait>(trait) );
|
||||
|
||||
@@ -88,7 +88,7 @@ namespace OpenRA.Mods.Cnc.Widgets
|
||||
Game.Settings.Save();
|
||||
|
||||
// Create and join the server
|
||||
Game.CreateServer(listenPort, name, map.Uid);
|
||||
Game.CreateServer(name, map.Uid, listenPort, advertiseOnline, externalPort);
|
||||
Widget.CloseWindow();
|
||||
CncConnectingLogic.Connect(IPAddress.Loopback.ToString(), Game.Settings.Server.ListenPort, onCreate, onExit);
|
||||
}
|
||||
|
||||
@@ -38,17 +38,13 @@ namespace OpenRA.Mods.RA.Server
|
||||
public void GameStarted(S server) { PingMasterServer(server); }
|
||||
|
||||
int lastPing = 0;
|
||||
// Todo: use the settings passed to the server instead
|
||||
bool isInternetServer = Game.Settings.Server.AdvertiseOnline;
|
||||
string masterServerUrl = Game.Settings.Server.MasterServer;
|
||||
int externalPort = Game.Settings.Server.ExternalPort;
|
||||
bool isInitialPing = true;
|
||||
|
||||
volatile bool isBusy;
|
||||
Queue<string> masterServerMessages = new Queue<string>();
|
||||
public void PingMasterServer(S server)
|
||||
{
|
||||
if (isBusy || !isInternetServer) return;
|
||||
if (isBusy || !server.AdvertiseOnline) return;
|
||||
|
||||
lastPing = Environment.TickCount;
|
||||
isBusy = true;
|
||||
@@ -64,8 +60,8 @@ namespace OpenRA.Mods.RA.Server
|
||||
{
|
||||
wc.Proxy = null;
|
||||
wc.DownloadData(
|
||||
masterServerUrl + url.F(
|
||||
externalPort, Uri.EscapeUriString(server.Name),
|
||||
Game.Settings.Server.MasterServer + url.F(
|
||||
server.ExternalPort, Uri.EscapeUriString(server.Name),
|
||||
server.GameStarted ? 2 : 1, // todo: post-game states, etc.
|
||||
server.lobbyInfo.Clients.Count,
|
||||
string.Join(",", Game.CurrentMods.Select(f => "{0}@{1}".F(f.Key, f.Value.Version)).ToArray()),
|
||||
|
||||
@@ -34,7 +34,7 @@ namespace OpenRA.Mods.RA.Widgets.Delegates
|
||||
settings.Server.ExternalPort = int.Parse(cs.GetWidget<TextFieldWidget>("EXTERNAL_PORT").Text);
|
||||
settings.Save();
|
||||
|
||||
Game.CreateServer(settings.Server.ListenPort, settings.Server.Name, map);
|
||||
Game.CreateServer(settings.Server.Name, map,settings.Server.ListenPort, settings.Server.AdvertiseOnline, settings.Server.ExternalPort);
|
||||
Game.JoinServer(IPAddress.Loopback.ToString(), settings.Server.ListenPort);
|
||||
return true;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user