public ServerSettings(ServerSettings other) { Name = other.Name; ListenPort = other.ListenPort; ExternalPort = other.ExternalPort; AdvertiseOnline = other.AdvertiseOnline; MasterServer = other.MasterServer; AllowCheats = other.AllowCheats; Map = other.Map; }
void CreateAndJoin() { var name = panel.Get<TextFieldWidget>("SERVER_NAME").Text; int listenPort, externalPort; if (!int.TryParse(panel.Get<TextFieldWidget>("LISTEN_PORT").Text, out listenPort)) listenPort = 1234; if (!int.TryParse(panel.Get<TextFieldWidget>("EXTERNAL_PORT").Text, out externalPort)) externalPort = 1234; var passwordField = panel.GetOrNull<PasswordFieldWidget>("PASSWORD"); var password = passwordField != null ? passwordField.Text : ""; // Save new settings Game.Settings.Server.Name = name; Game.Settings.Server.ListenPort = listenPort; Game.Settings.Server.ExternalPort = externalPort; Game.Settings.Server.AdvertiseOnline = advertiseOnline; Game.Settings.Server.AllowPortForward = allowPortForward; Game.Settings.Server.Map = map.Uid; Game.Settings.Server.Password = password; Game.Settings.Save(); // Take a copy so that subsequent changes don't affect the server var settings = new ServerSettings(Game.Settings.Server); // Create and join the server Game.CreateServer(settings); Ui.CloseWindow(); ConnectionLogic.Connect(IPAddress.Loopback.ToString(), Game.Settings.Server.ListenPort, password, onCreate, onExit); }
public Server(IPEndPoint endpoint, string[] mods, ServerSettings settings, ModData modData) { Log.AddChannel("server", "server.log"); pState = ServerState.WaitingPlayers; listener = new TcpListener(endpoint); listener.Start(); var localEndpoint = (IPEndPoint)listener.LocalEndpoint; Ip = localEndpoint.Address; Port = localEndpoint.Port; Settings = settings; ModData = modData; randomSeed = (int)DateTime.Now.ToBinary(); if (Settings.AllowPortForward) UPnP.ForwardPort(); foreach (var trait in modData.Manifest.ServerTraits) ServerTraits.Add(modData.ObjectCreator.CreateObject<ServerTrait>(trait)); lobbyInfo = new Session(mods); lobbyInfo.GlobalSettings.RandomSeed = randomSeed; lobbyInfo.GlobalSettings.Map = settings.Map; lobbyInfo.GlobalSettings.ServerName = settings.Name; lobbyInfo.GlobalSettings.Dedicated = settings.Dedicated; FieldLoader.Load(lobbyInfo.GlobalSettings, modData.Manifest.LobbyDefaults); foreach (var t in ServerTraits.WithInterface<INotifyServerStart>()) t.ServerStarted(this); Log.Write("server", "Initial mods: "); foreach (var m in lobbyInfo.GlobalSettings.Mods) Log.Write("server","- {0}", m); Log.Write("server", "Initial map: {0}",lobbyInfo.GlobalSettings.Map); new Thread( _ => { var timeout = ServerTraits.WithInterface<ITick>().Min(t => t.TickTimeout); for (;;) { var checkRead = new List<Socket>(); checkRead.Add(listener.Server); foreach (var c in conns) checkRead.Add(c.socket); foreach (var c in preConns) checkRead.Add(c.socket); Socket.Select(checkRead, null, null, timeout); if (State == ServerState.ShuttingDown) { EndGame(); break; } foreach (var s in checkRead) if (s == listener.Server) AcceptConnection(); else if (preConns.Count > 0) { var p = preConns.SingleOrDefault(c => c.socket == s); if (p != null) p.ReadData(this); } else if (conns.Count > 0) { var conn = conns.SingleOrDefault(c => c.socket == s); if (conn != null) conn.ReadData(this); } foreach (var t in ServerTraits.WithInterface<ITick>()) t.Tick(this); if (State == ServerState.ShuttingDown) { EndGame(); if (Settings.AllowPortForward) UPnP.RemovePortforward(); break; } } foreach (var t in ServerTraits.WithInterface<INotifyServerShutdown>()) t.ServerShutdown(this); preConns.Clear(); conns.Clear(); try { listener.Stop(); } catch { } } ) { IsBackground = true }.Start(); }
public ServerSettings(ServerSettings other) { Name = other.Name; ListenPort = other.ListenPort; ExternalPort = other.ExternalPort; AdvertiseOnline = other.AdvertiseOnline; MasterServer = other.MasterServer; AllowUPnP = other.AllowUPnP; AllowCheats = other.AllowCheats; Map = other.Map; Ban = other.Ban; TimeOut = other.TimeOut; Dedicated = other.Dedicated; DedicatedLoop = other.DedicatedLoop; }
Action ResetAdvancedPanel(Widget panel) { var ds = Game.Settings.Debug; var ss = Game.Settings.Server; var dds = new DebugSettings(); var dss = new ServerSettings(); return () => { ss.DiscoverNatDevices = dss.DiscoverNatDevices; ss.VerboseNatDiscovery = dss.VerboseNatDiscovery; ds.PerfText = dds.PerfText; ds.PerfGraph = dds.PerfGraph; ds.SanityCheckUnsyncedCode = dds.SanityCheckUnsyncedCode; ds.BotDebug = dds.BotDebug; ds.ShowFatalErrorDialog = dds.ShowFatalErrorDialog; }; }
public Server(IPEndPoint endpoint, string[] mods, ServerSettings settings, ModData modData) { Log.AddChannel("server", "server.log"); pState = ServerState.WaitingPlayers; listener = new TcpListener(endpoint); listener.Start(); var localEndpoint = (IPEndPoint)listener.LocalEndpoint; Ip = localEndpoint.Address; Port = localEndpoint.Port; Settings = settings; ModData = modData; randomSeed = (int)DateTime.Now.ToBinary(); if (Settings.AllowUPnP) { try { if (UPnP.NAT.Discover()) { Log.Write("server", "UPnP-enabled router discovered."); Log.Write("server", "Your IP is: {0}", UPnP.NAT.GetExternalIP() ); } else { Log.Write("server", "No UPnP-enabled router detected."); Settings.AllowUPnP = false; } } catch (Exception e) { OpenRA.Log.Write("server", "Can't discover UPnP-enabled routers: {0}", e); Settings.AllowUPnP = false; } } if (Settings.AllowUPnP) { try { if (UPnP.NAT.ForwardPort(Port, ProtocolType.Tcp, "OpenRA")) Log.Write("server", "Port {0} (TCP) has been forwarded.", Port); else Settings.AllowUPnP = false; } catch (Exception e) { OpenRA.Log.Write("server", "Can not forward ports via UPnP: {0}", e); Settings.AllowUPnP = false; } } foreach (var trait in modData.Manifest.ServerTraits) ServerTraits.Add( modData.ObjectCreator.CreateObject<ServerTrait>(trait) ); lobbyInfo = new Session( mods ); lobbyInfo.GlobalSettings.RandomSeed = randomSeed; lobbyInfo.GlobalSettings.Map = settings.Map; lobbyInfo.GlobalSettings.ServerName = settings.Name; lobbyInfo.GlobalSettings.Ban = settings.Ban; lobbyInfo.GlobalSettings.Dedicated = settings.Dedicated; foreach (var t in ServerTraits.WithInterface<INotifyServerStart>()) t.ServerStarted(this); Log.Write("server", "Initial mods: "); foreach( var m in lobbyInfo.GlobalSettings.Mods ) Log.Write("server","- {0}", m); Log.Write("server", "Initial map: {0}",lobbyInfo.GlobalSettings.Map); new Thread( _ => { var timeout = ServerTraits.WithInterface<ITick>().Min(t => t.TickTimeout); for( ; ; ) { var checkRead = new ArrayList(); checkRead.Add( listener.Server ); foreach( var c in conns ) checkRead.Add( c.socket ); foreach( var c in preConns ) checkRead.Add( c.socket ); Socket.Select( checkRead, null, null, timeout ); if (State == ServerState.ShuttingDown) { EndGame(); break; } foreach( Socket s in checkRead ) if( s == listener.Server ) AcceptConnection(); else if (preConns.Count > 0) { var p = preConns.SingleOrDefault( c => c.socket == s ); if (p != null) p.ReadData( this ); } else if (conns.Count > 0) conns.Single( c => c.socket == s ).ReadData( this ); foreach (var t in ServerTraits.WithInterface<ITick>()) t.Tick(this); if (State == ServerState.ShuttingDown) { EndGame(); break; } } foreach (var t in ServerTraits.WithInterface<INotifyServerShutdown>()) t.ServerShutdown(this); preConns.Clear(); conns.Clear(); try { listener.Stop(); } catch { } } ) { IsBackground = true }.Start(); }
public ServerSettings(ServerSettings other) { Name = other.Name; ListenPort = other.ListenPort; ExternalPort = other.ExternalPort; AdvertiseOnline = other.AdvertiseOnline; MasterServer = other.MasterServer; DiscoverNatDevices = other.DiscoverNatDevices; AllowPortForward = other.AllowPortForward; NatDeviceAvailable = other.NatDeviceAvailable; NatDiscoveryTimeout = other.NatDiscoveryTimeout; VerboseNatDiscovery = other.VerboseNatDiscovery; AllowCheats = other.AllowCheats; Map = other.Map; Ban = other.Ban; TimeOut = other.TimeOut; Dedicated = other.Dedicated; DedicatedLoop = other.DedicatedLoop; LockBots = other.LockBots; AllowVersionMismatch = other.AllowVersionMismatch; }