diff --git a/OpenRA.Game/Game.cs b/OpenRA.Game/Game.cs index 8874706fe8..9f24766de6 100755 --- a/OpenRA.Game/Game.cs +++ b/OpenRA.Game/Game.cs @@ -371,9 +371,9 @@ namespace OpenRA return modData.ObjectCreator.CreateObject( 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); } diff --git a/OpenRA.Game/Server/Server.cs b/OpenRA.Game/Server/Server.cs index d517d8ef9d..394e339943 100644 --- a/OpenRA.Game/Server/Server.cs +++ b/OpenRA.Game/Server/Server.cs @@ -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(trait) ); diff --git a/OpenRA.Mods.Cnc/Widgets/CncServerCreationLogic.cs b/OpenRA.Mods.Cnc/Widgets/CncServerCreationLogic.cs index 9b71eb21cf..73443e3799 100644 --- a/OpenRA.Mods.Cnc/Widgets/CncServerCreationLogic.cs +++ b/OpenRA.Mods.Cnc/Widgets/CncServerCreationLogic.cs @@ -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); } diff --git a/OpenRA.Mods.RA/ServerTraits/MasterServerPinger.cs b/OpenRA.Mods.RA/ServerTraits/MasterServerPinger.cs index 8959b6621d..1ef40be7c5 100644 --- a/OpenRA.Mods.RA/ServerTraits/MasterServerPinger.cs +++ b/OpenRA.Mods.RA/ServerTraits/MasterServerPinger.cs @@ -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 masterServerMessages = new Queue(); 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()), diff --git a/OpenRA.Mods.RA/Widgets/Delegates/CreateServerMenuDelegate.cs b/OpenRA.Mods.RA/Widgets/Delegates/CreateServerMenuDelegate.cs index 05c7f1b627..1f2a9dde82 100644 --- a/OpenRA.Mods.RA/Widgets/Delegates/CreateServerMenuDelegate.cs +++ b/OpenRA.Mods.RA/Widgets/Delegates/CreateServerMenuDelegate.cs @@ -34,7 +34,7 @@ namespace OpenRA.Mods.RA.Widgets.Delegates settings.Server.ExternalPort = int.Parse(cs.GetWidget("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; };