Don't tell the master server about local servers

This commit is contained in:
Paul Chote
2011-05-12 19:31:51 +12:00
parent f0f591c6fb
commit 5fffc9d816
5 changed files with 18 additions and 12 deletions

View File

@@ -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);
}

View File

@@ -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) );

View File

@@ -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);
}

View File

@@ -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()),

View File

@@ -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;
};