diff --git a/Torch/Managers/NetworkManager/NetworkHandlerBase.cs b/Torch/Managers/NetworkManager/NetworkHandlerBase.cs
index dc3ce19..3add688 100644
--- a/Torch/Managers/NetworkManager/NetworkHandlerBase.cs
+++ b/Torch/Managers/NetworkManager/NetworkHandlerBase.cs
@@ -11,6 +11,7 @@ using VRage.Serialization;
namespace Torch.Managers
{
+ [Obsolete("The entire network intercept system is deprecated. Please use method patches instead.")]
public abstract class NetworkHandlerBase
{
///
@@ -18,6 +19,7 @@ namespace Torch.Managers
///
///
///
+ [Obsolete("The entire network intercept system is deprecated. Please use method patches instead.")]
public abstract bool CanHandle(CallSite site);
///
@@ -29,8 +31,9 @@ namespace Torch.Managers
///
///
///
+ [Obsolete("The entire network intercept system is deprecated. Please use method patches instead.")]
public abstract bool Handle(ulong remoteUserId, CallSite site, BitStream stream, object obj, MyPacket packet);
-
+
///
/// Extracts method arguments from the bitstream or packs them back in, depending on stream read mode.
///
@@ -38,6 +41,7 @@ namespace Torch.Managers
///
///
///
+ [Obsolete("The entire network intercept system is deprecated. Please use method patches instead.")]
public void Serialize(MethodInfo info, BitStream stream, ref T1 arg1)
{
var s1 = MyFactory.GetSerializer();
@@ -55,6 +59,7 @@ namespace Torch.Managers
}
}
+ [Obsolete("The entire network intercept system is deprecated. Please use method patches instead.")]
public void Serialize(MethodInfo info, BitStream stream, ref T1 arg1, ref T2 arg2)
{
var s1 = MyFactory.GetSerializer();
@@ -76,6 +81,7 @@ namespace Torch.Managers
}
}
+ [Obsolete("The entire network intercept system is deprecated. Please use method patches instead.")]
public void Serialize(MethodInfo info, BitStream stream, ref T1 arg1, ref T2 arg2, ref T3 arg3)
{
var s1 = MyFactory.GetSerializer();
@@ -101,6 +107,7 @@ namespace Torch.Managers
}
}
+ [Obsolete("The entire network intercept system is deprecated. Please use method patches instead.")]
public void Serialize(MethodInfo info, BitStream stream, ref T1 arg1, ref T2 arg2, ref T3 arg3, ref T4 arg4)
{
var s1 = MyFactory.GetSerializer();
@@ -130,6 +137,7 @@ namespace Torch.Managers
}
}
+ [Obsolete("The entire network intercept system is deprecated. Please use method patches instead.")]
public void Serialize(MethodInfo info, BitStream stream, ref T1 arg1, ref T2 arg2, ref T3 arg3, ref T4 arg4, ref T5 arg5)
{
var s1 = MyFactory.GetSerializer();
@@ -163,6 +171,7 @@ namespace Torch.Managers
}
}
+ [Obsolete("The entire network intercept system is deprecated. Please use method patches instead.")]
public void Serialize(MethodInfo info, BitStream stream, ref T1 arg1, ref T2 arg2, ref T3 arg3, ref T4 arg4, ref T5 arg5, ref T6 arg6)
{
var s1 = MyFactory.GetSerializer();
@@ -200,6 +209,7 @@ namespace Torch.Managers
}
}
+ [Obsolete("The entire network intercept system is deprecated. Please use method patches instead.")]
public void Serialize(MethodInfo info, BitStream stream, ref T1 arg1, ref T2 arg2, ref T3 arg3, ref T4 arg4, ref T5 arg5, ref T6 arg6, ref T7 arg7)
{
var s1 = MyFactory.GetSerializer();
diff --git a/Torch/Managers/NetworkManager/NetworkManager.cs b/Torch/Managers/NetworkManager/NetworkManager.cs
index fc2b5c8..a054835 100644
--- a/Torch/Managers/NetworkManager/NetworkManager.cs
+++ b/Torch/Managers/NetworkManager/NetworkManager.cs
@@ -1,110 +1,24 @@
using System;
-using System.Collections;
using System.Collections.Generic;
-using System.Linq;
using System.Reflection;
-using System.Threading.Tasks;
using NLog;
using Sandbox.Engine.Multiplayer;
-using Sandbox.Game.Multiplayer;
using Torch.API;
using Torch.API.Managers;
-using Torch.Utils;
-using VRage;
-using VRage.Library.Collections;
using VRage.Network;
using VRageMath;
namespace Torch.Managers
{
+ //TOOD: Make this not a manager, and instead just a static class?
public partial class NetworkManager : Manager, INetworkManager
{
private static Logger _log = LogManager.GetCurrentClassLogger();
- private const string _myTransportLayerField = "TransportLayer";
- private const string _transportHandlersField = "m_handlers";
- private readonly HashSet _networkHandlers = new HashSet();
- private bool _init;
-
- [ReflectedGetter(Name = "m_typeTable")]
- private static Func _typeTableGetter;
- [ReflectedMethod(Type = typeof(MyReplicationLayer), Name = "GetObjectByNetworkId")]
- private static Func _getObjectByNetworkId;
-
public NetworkManager(ITorchBase torchInstance) : base(torchInstance)
{
}
-
- private static bool ReflectionUnitTest(bool suppress = false)
- {
- try
- {
- var syncLayerType = typeof(MySyncLayer);
- var transportLayerField = syncLayerType.GetField(_myTransportLayerField, BindingFlags.NonPublic | BindingFlags.Instance);
-
- if (transportLayerField == null)
- throw new TypeLoadException("Could not find internal type for TransportLayer");
-
- var transportLayerType = transportLayerField.FieldType;
-
- if (!Reflection.HasField(transportLayerType, _transportHandlersField))
- throw new TypeLoadException("Could not find Handlers field");
-
- return true;
- }
- catch (TypeLoadException ex)
- {
- _log.Error(ex);
- if (suppress)
- return false;
- throw;
- }
- }
-
- ///
- public override void Attach()
- {
- if (_init)
- return;
-
- _init = true;
-
- if (!ReflectionUnitTest())
- throw new InvalidOperationException("Reflection unit test failed.");
-
- //don't bother with nullchecks here, it was all handled in ReflectionUnitTest
- var transportType = typeof(MySyncLayer).GetField(_myTransportLayerField, BindingFlags.NonPublic | BindingFlags.Instance).FieldType;
- var transportInstance = typeof(MySyncLayer).GetField(_myTransportLayerField, BindingFlags.NonPublic | BindingFlags.Instance)?.GetValue(MyMultiplayer.Static.SyncLayer);
- var handlers = (IDictionary)transportType.GetField(_transportHandlersField, BindingFlags.NonPublic | BindingFlags.Instance)?.GetValue(transportInstance);
- var handlerTypeField = handlers.GetType().GenericTypeArguments[0].GetField("messageId"); //Should be MyTransportLayer.HandlerId
- object id = null;
- foreach (var key in handlers.Keys)
- {
- if ((MyMessageId)handlerTypeField.GetValue(key) != MyMessageId.RPC)
- continue;
-
- id = key;
- break;
- }
- if (id == null)
- throw new InvalidOperationException("RPC handler not found.");
-
- //remove Keen's network listener
- handlers.Remove(id);
- //replace it with our own
- handlers.Add(id, new Action(OnEvent));
-
- //PrintDebug();
-
- _log.Debug("Initialized network intercept");
- }
-
- ///
- public override void Detach()
- {
- // TODO reverse what was done in Attach
- }
#region Network Injection
diff --git a/Torch/Managers/NetworkManager/NetworkManager_Deprecated.cs b/Torch/Managers/NetworkManager/NetworkManager_Deprecated.cs
index 1e25769..5bfa3cc 100644
--- a/Torch/Managers/NetworkManager/NetworkManager_Deprecated.cs
+++ b/Torch/Managers/NetworkManager/NetworkManager_Deprecated.cs
@@ -1,10 +1,12 @@
using System;
+using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using Sandbox.Engine.Multiplayer;
+using Sandbox.Game.Multiplayer;
using Torch.API.Managers;
using Torch.Utils;
using VRage;
@@ -26,6 +28,86 @@ namespace Torch.Managers
private static MethodInfo _dispatchInfo;
private static MethodInfo DispatchEventInfo => _dispatchInfo ?? (_dispatchInfo = typeof(MyReplicationLayerBase).GetMethod("DispatchEvent", BindingFlags.NonPublic | BindingFlags.Instance));
+
+ private const string _myTransportLayerField = "TransportLayer";
+ private const string _transportHandlersField = "m_handlers";
+ private readonly HashSet _networkHandlers = new HashSet();
+ private bool _init;
+
+ [ReflectedGetter(Name = "m_typeTable")]
+ private static Func _typeTableGetter;
+ [ReflectedMethod(Type = typeof(MyReplicationLayer), Name = "GetObjectByNetworkId")]
+ private static Func _getObjectByNetworkId;
+
+ private static bool ReflectionUnitTest(bool suppress = false)
+ {
+ try
+ {
+ var syncLayerType = typeof(MySyncLayer);
+ var transportLayerField = syncLayerType.GetField(_myTransportLayerField, BindingFlags.NonPublic | BindingFlags.Instance);
+
+ if (transportLayerField == null)
+ throw new TypeLoadException("Could not find internal type for TransportLayer");
+
+ var transportLayerType = transportLayerField.FieldType;
+
+ if (!Reflection.HasField(transportLayerType, _transportHandlersField))
+ throw new TypeLoadException("Could not find Handlers field");
+
+ return true;
+ }
+ catch (TypeLoadException ex)
+ {
+ _log.Error(ex);
+ if (suppress)
+ return false;
+ throw;
+ }
+ }
+
+ ///
+ public override void Attach()
+ {
+ if (_init)
+ return;
+
+ _init = true;
+
+ if (!ReflectionUnitTest())
+ throw new InvalidOperationException("Reflection unit test failed.");
+
+ //don't bother with nullchecks here, it was all handled in ReflectionUnitTest
+ var transportType = typeof(MySyncLayer).GetField(_myTransportLayerField, BindingFlags.NonPublic | BindingFlags.Instance).FieldType;
+ var transportInstance = typeof(MySyncLayer).GetField(_myTransportLayerField, BindingFlags.NonPublic | BindingFlags.Instance)?.GetValue(MyMultiplayer.Static.SyncLayer);
+ var handlers = (IDictionary)transportType.GetField(_transportHandlersField, BindingFlags.NonPublic | BindingFlags.Instance)?.GetValue(transportInstance);
+ var handlerTypeField = handlers.GetType().GenericTypeArguments[0].GetField("messageId"); //Should be MyTransportLayer.HandlerId
+ object id = null;
+ foreach (var key in handlers.Keys)
+ {
+ if ((MyMessageId)handlerTypeField.GetValue(key) != MyMessageId.RPC)
+ continue;
+
+ id = key;
+ break;
+ }
+ if (id == null)
+ throw new InvalidOperationException("RPC handler not found.");
+
+ //remove Keen's network listener
+ handlers.Remove(id);
+ //replace it with our own
+ handlers.Add(id, new Action(OnEvent));
+
+ //PrintDebug();
+
+ _log.Debug("Initialized network intercept");
+ }
+
+ ///
+ public override void Detach()
+ {
+ // TODO reverse what was done in Attach
+ }
#region Network Injection