diff --git a/Torch.API/ITorchBase.cs b/Torch.API/ITorchBase.cs
index 53a45e1..b7e15d0 100644
--- a/Torch.API/ITorchBase.cs
+++ b/Torch.API/ITorchBase.cs
@@ -4,6 +4,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Torch.API.Managers;
+using Torch.API.Session;
using VRage.Game.ModAPI;
namespace Torch.API
@@ -33,15 +34,22 @@ namespace Torch.API
///
event Action SessionUnloaded;
+ ///
+ /// Gets the currently running session instance, or null if none exists.
+ ///
+ ITorchSession CurrentSession { get; }
+
///
/// Configuration for the current instance.
///
ITorchConfig Config { get; }
///
+ [Obsolete]
IMultiplayerManager Multiplayer { get; }
///
+ [Obsolete]
IPluginManager Plugins { get; }
///
diff --git a/Torch.Client/TorchClient.cs b/Torch.Client/TorchClient.cs
index b98883d..384ad3b 100644
--- a/Torch.Client/TorchClient.cs
+++ b/Torch.Client/TorchClient.cs
@@ -12,6 +12,7 @@ using VRage.Steam;
using Torch.API;
using VRage;
using VRage.FileSystem;
+using VRage.GameServices;
using VRageRender;
using VRageRender.ExternalApp;
@@ -53,7 +54,7 @@ namespace Torch.Client
_startup.DetectSharpDxLeaksBeforeRun();
var steamService = new SteamService(Game.IsDedicated, APP_ID);
- MyServiceManager.Instance.AddService(steamService);
+ MyServiceManager.Instance.AddService(steamService);
_renderer = null;
SpaceEngineersGame.SetupPerGameSettings();
// I'm sorry, but it's what Keen does in SpaceEngineers.MyProgram
diff --git a/Torch/Session/TorchSessionManager.cs b/Torch/Session/TorchSessionManager.cs
index f043832..cd7eda4 100644
--- a/Torch/Session/TorchSessionManager.cs
+++ b/Torch/Session/TorchSessionManager.cs
@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using NLog;
using Sandbox.Game.World;
using Torch.API;
using Torch.API.Managers;
@@ -17,6 +18,7 @@ namespace Torch.Session
///
public class TorchSessionManager : Manager, ITorchSessionManager
{
+ private static readonly Logger _log = LogManager.GetCurrentClassLogger();
private TorchSession _currentSession;
///
@@ -46,7 +48,13 @@ namespace Torch.Session
private void SessionLoaded()
{
- _currentSession?.Detach();
+ if (_currentSession != null)
+ {
+ _log.Warn($"Override old torch session {_currentSession.KeenSession.Name}");
+ _currentSession.Detach();
+ }
+
+ _log.Info($"Starting new torch session for {MySession.Static.Name}");
_currentSession = new TorchSession(Torch, MySession.Static);
foreach (SessionManagerFactory factory in _factories)
{
@@ -59,7 +67,10 @@ namespace Torch.Session
private void SessionUnloaded()
{
- _currentSession?.Detach();
+ if (_currentSession == null)
+ return;
+ _log.Info($"Unloading torch session for {_currentSession.KeenSession.Name}");
+ _currentSession.Detach();
_currentSession = null;
}
diff --git a/Torch/SteamService.cs b/Torch/SteamService.cs
index a39b443..552bc4f 100644
--- a/Torch/SteamService.cs
+++ b/Torch/SteamService.cs
@@ -3,9 +3,11 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using NLog;
using SteamSDK;
using VRage.Steam;
using Sandbox;
+using Sandbox.Engine.Networking;
using Torch.Utils;
using VRage.GameServices;
@@ -19,6 +21,9 @@ namespace Torch
///
public class SteamService : MySteamService
{
+ private static readonly Logger _log = LogManager.GetCurrentClassLogger();
+
+#pragma warning disable 649
[ReflectedSetter(Name = nameof(SteamServerAPI))]
private static Action _steamServerAPISetter;
[ReflectedSetter(Name = "m_gameServer")]
@@ -45,6 +50,7 @@ namespace Torch
private static Action RegisterCallbacks;
[ReflectedSetter(Name = nameof(Peer2Peer))]
private static Action _steamPeer2PeerSetter;
+#pragma warning restore 649
public SteamService(bool isDedicated, uint appId)
: base(true, appId)
@@ -53,7 +59,7 @@ namespace Torch
_steamServerAPISetter.Invoke(this, null);
_steamGameServerSetter.Invoke(this, null);
_steamAppIdSetter.Invoke(this, appId);
-
+
if (isDedicated)
{
_steamServerAPISetter.Invoke(this, null);
@@ -63,7 +69,10 @@ namespace Torch
{
SteamAPI steamApi = SteamAPI.Instance;
_steamApiSetter.Invoke(this, steamApi);
- _steamIsActiveSetter.Invoke(this, steamApi.Init());
+ bool initResult = steamApi.Init();
+ if (!initResult)
+ _log.Warn("Failed to initialize SteamService");
+ _steamIsActiveSetter.Invoke(this, initResult);
if (IsActive)
{
@@ -76,7 +85,8 @@ namespace Torch
_steamInventoryAPISetter.Invoke(this, new MySteamInventory());
RegisterCallbacks(this);
- }
+ } else
+ _log.Warn("SteamService isn't initialized; Torch Client won't start");
}
_steamPeer2PeerSetter.Invoke(this, new MySteamPeer2Peer());
diff --git a/Torch/TorchBase.cs b/Torch/TorchBase.cs
index 7bdc650..3880a19 100644
--- a/Torch/TorchBase.cs
+++ b/Torch/TorchBase.cs
@@ -19,9 +19,11 @@ using SpaceEngineers.Game;
using Torch.API;
using Torch.API.Managers;
using Torch.API.ModAPI;
+using Torch.API.Session;
using Torch.Commands;
using Torch.Managers;
using Torch.Utils;
+using Torch.Session;
using VRage.Collections;
using VRage.FileSystem;
using VRage.Game.ObjectBuilder;
@@ -57,15 +59,24 @@ namespace Torch
///
public string[] RunArgs { get; set; }
///
+ [Obsolete]
public IPluginManager Plugins { get; protected set; }
///
+ [Obsolete]
public IMultiplayerManager Multiplayer { get; protected set; }
///
+ [Obsolete]
public EntityManager Entities { get; protected set; }
///
+ [Obsolete]
public INetworkManager Network { get; protected set; }
///
+ [Obsolete]
public CommandManager Commands { get; protected set; }
+
+ ///
+ public ITorchSession CurrentSession => Managers?.GetManager()?.CurrentSession;
+
///
public event Action SessionLoading;
///
@@ -107,6 +118,7 @@ namespace Torch
Network = new NetworkManager(this);
Commands = new CommandManager(this);
+ Managers.AddManager(new TorchSessionManager(this));
Managers.AddManager(new FilesystemManager(this));
Managers.AddManager(new UpdateManager(this));
Managers.AddManager(Network);
@@ -116,7 +128,6 @@ namespace Torch
Managers.AddManager(Entities);
Managers.AddManager(new ChatManager(this));
-
TorchAPI.Instance = this;
}