Created
April 21, 2021 09:13
-
-
Save Sl4vP0weR/fb23957870fa6adc9f5e1544eb11fc3a to your computer and use it in GitHub Desktop.
Unturned NetMessages accessor
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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