Reset server after game
This commit is contained in:
@@ -626,7 +626,7 @@ namespace OpenRA
|
|||||||
|
|
||||||
static void LogicTick()
|
static void LogicTick()
|
||||||
{
|
{
|
||||||
delayedActions.PerformActions(RunTime);
|
PerformDelayedActions();
|
||||||
|
|
||||||
if (OrderManager.Connection.ConnectionState != lastConnectionState)
|
if (OrderManager.Connection.ConnectionState != lastConnectionState)
|
||||||
{
|
{
|
||||||
@@ -639,6 +639,11 @@ namespace OpenRA
|
|||||||
InnerLogicTick(worldRenderer.World.OrderManager);
|
InnerLogicTick(worldRenderer.World.OrderManager);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void PerformDelayedActions()
|
||||||
|
{
|
||||||
|
delayedActions.PerformActions(RunTime);
|
||||||
|
}
|
||||||
|
|
||||||
public static void TakeScreenshot()
|
public static void TakeScreenshot()
|
||||||
{
|
{
|
||||||
takeScreenshot = true;
|
takeScreenshot = true;
|
||||||
|
|||||||
@@ -215,6 +215,10 @@ namespace OpenRA.Server
|
|||||||
|
|
||||||
delayedActions.PerformActions(0);
|
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>())
|
foreach (var t in serverTraits.WithInterface<ITick>())
|
||||||
t.Tick(this);
|
t.Tick(this);
|
||||||
|
|
||||||
|
|||||||
@@ -56,17 +56,17 @@ namespace OpenRA.Server
|
|||||||
|
|
||||||
var mods = new InstalledMods(modSearchPaths, explicitModPaths);
|
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);
|
Console.WriteLine("[{0}] Starting dedicated server for mod: {1}", DateTime.Now.ToString(settings.TimestampFormat), modID);
|
||||||
while (true)
|
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)
|
while (true)
|
||||||
{
|
{
|
||||||
Thread.Sleep(1000);
|
Thread.Sleep(1000);
|
||||||
@@ -78,6 +78,7 @@ namespace OpenRA.Server
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
modData.Dispose();
|
||||||
Console.WriteLine("[{0}] Starting a new server instance...", DateTime.Now.ToString(settings.TimestampFormat));
|
Console.WriteLine("[{0}] Starting a new server instance...", DateTime.Now.ToString(settings.TimestampFormat));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user