Skip to content

Instantly share code, notes, and snippets.

@Sl4vP0weR
Created April 21, 2021 09:13
Show Gist options
  • Save Sl4vP0weR/fb23957870fa6adc9f5e1544eb11fc3a to your computer and use it in GitHub Desktop.
Save Sl4vP0weR/fb23957870fa6adc9f5e1544eb11fc3a to your computer and use it in GitHub Desktop.
Unturned NetMessages accessor
public static class NetMessagesAccessor
{
static Type netMessages = Assembly.GetAssembly(typeof(Provider)).GetType("SDG.Unturned.NetMessages");
public static Delegate ConvertDelegate(Delegate del) =>
Delegate.CreateDelegate(
netMessages.GetNestedType(del.GetType().Name),
del.Target,
del.Method
);
public delegate void ClientWriteHandler(NetPakWriter writer);
public delegate void ClientReadHandler(NetPakReader reader);
public delegate void ServerReadHandler(ITransportConnection transportConnection, NetPakReader reader);
public static void GetAndInvoke(string name, params object[] args) =>
netMessages.GetMethod(name, AccessTools.all)?
.Invoke(null, args);
public static void SendMessageToClients(EClientMessage index, ENetReliability reliability, IEnumerable<ITransportConnection> transportConnections, ClientWriteHandler callback) =>
GetAndInvoke(nameof(SendMessageToClients),
index,
reliability,
transportConnections,
ConvertDelegate(callback)
);
public static void SendMessageToClient(EClientMessage index, ENetReliability reliability, ITransportConnection transportConnection, ClientWriteHandler callback) =>
GetAndInvoke(nameof(SendMessageToClient),
index,
reliability,
transportConnection,
ConvertDelegate(callback)
);
public static void ReceiveMessageFromClient(ITransportConnection transportConnection, byte[] packet, int offset, int size) =>
GetAndInvoke(nameof(ReceiveMessageFromClient),
transportConnection,
packet,
offset,
size
);
public static T GetField<T>(string name) where T : class => netMessages.GetField(name, AccessTools.all).GetValue(null) as T;
public static NetPakReader reader => GetField<NetPakReader>(nameof(reader));
public static NetPakWriter writer => GetField<NetPakWriter>(nameof(writer));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment