Skip to content

Commit

Permalink
Reset server after game
Browse files Browse the repository at this point in the history
  • Loading branch information
teinarss authored and abcdefg30 committed Aug 25, 2019
1 parent 6702395 commit 4dd8472
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 8 deletions.
7 changes: 6 additions & 1 deletion OpenRA.Game/Game.cs
Expand Up @@ -626,7 +626,7 @@ static void InnerLogicTick(OrderManager orderManager)

static void LogicTick()
{
delayedActions.PerformActions(RunTime);
PerformDelayedActions();

if (OrderManager.Connection.ConnectionState != lastConnectionState)
{
Expand All @@ -639,6 +639,11 @@ static void LogicTick()
InnerLogicTick(worldRenderer.World.OrderManager);
}

public static void PerformDelayedActions()
{
delayedActions.PerformActions(RunTime);
}

public static void TakeScreenshot()
{
takeScreenshot = true;
Expand Down
4 changes: 4 additions & 0 deletions OpenRA.Game/Server/Server.cs
Expand Up @@ -215,6 +215,10 @@ public Server(IPEndPoint endpoint, ServerSettings settings, ModData modData, boo
delayedActions.PerformActions(0);
// PERF: Dedicated servers need to drain the action queue to remove references blocking the GC from cleaning up disposed objects.
if (dedicated)
Game.PerformDelayedActions();
foreach (var t in serverTraits.WithInterface<ITick>())
t.Tick(this);
Expand Down
15 changes: 8 additions & 7 deletions OpenRA.Server/Program.cs
Expand Up @@ -56,17 +56,17 @@ static void Main(string[] args)

var mods = new InstalledMods(modSearchPaths, explicitModPaths);

// HACK: The engine code *still* assumes that Game.ModData is set
var modData = Game.ModData = new ModData(mods[modID], mods);
modData.MapCache.LoadMaps();

settings.Map = modData.MapCache.ChooseInitialMap(settings.Map, new MersenneTwister());

Console.WriteLine("[{0}] Starting dedicated server for mod: {1}", DateTime.Now.ToString(settings.TimestampFormat), modID);
while (true)
{
var server = new Server(new IPEndPoint(IPAddress.Any, settings.ListenPort), settings, modData, true);
// HACK: The engine code *still* assumes that Game.ModData is set
var modData = Game.ModData = new ModData(mods[modID], mods);
modData.MapCache.LoadMaps();

settings.Map = modData.MapCache.ChooseInitialMap(settings.Map, new MersenneTwister());

var server = new Server(new IPEndPoint(IPAddress.Any, settings.ListenPort), settings, modData, true);
GC.Collect();
while (true)
{
Thread.Sleep(1000);
Expand All @@ -78,6 +78,7 @@ static void Main(string[] args)
}
}

modData.Dispose();
Console.WriteLine("[{0}] Starting a new server instance...", DateTime.Now.ToString(settings.TimestampFormat));
}
}
Expand Down

0 comments on commit 4dd8472

Please sign in to comment.