private static void GenerateReadersWriters(ModuleDefinition module, MethodReference method)
        {
            if (!method.IsGenericInstance)
            {
                return;
            }

            bool generate =
                method.Is(typeof(MessagePacker), nameof(MessagePacker.Pack)) ||
                method.Is(typeof(MessagePacker), nameof(MessagePacker.GetId)) ||
                method.Is(typeof(MessagePacker), nameof(MessagePacker.Unpack)) ||
                method.Is <NetworkWriter>(nameof(NetworkWriter.Write)) ||
                method.Is <NetworkReader>(nameof(NetworkReader.Read)) ||
                method.Is <IMessageHandler>(nameof(IMessageHandler.Send)) ||
                method.Is <IMessageHandler>(nameof(IMessageHandler.SendAsync)) ||
                method.Is <IMessageHandler>(nameof(IMessageHandler.RegisterHandler)) ||
                method.Is <IMessageHandler>(nameof(IMessageHandler.UnregisterHandler)) ||
                method.Is <IMessageHandler>(nameof(IMessageHandler.Send)) ||
                method.Is <NetworkConnection>(nameof(NetworkConnection.Send)) ||
                method.Is <NetworkConnection>(nameof(NetworkConnection.SendAsync)) ||
                method.Is <NetworkConnection>(nameof(NetworkConnection.RegisterHandler)) ||
                method.Is <NetworkConnection>(nameof(NetworkConnection.UnregisterHandler)) ||
                method.Is <INetworkClient>(nameof(INetworkClient.Send)) ||
                method.Is <INetworkClient>(nameof(INetworkClient.SendAsync)) ||
                method.Is <NetworkClient>(nameof(NetworkClient.Send)) ||
                method.Is <NetworkClient>(nameof(NetworkClient.SendAsync)) ||
                method.Is <NetworkServer>(nameof(NetworkServer.SendToAll)) ||
                method.Is <NetworkServer>(nameof(NetworkServer.SendToClientOfPlayer)) ||
                method.Is <NetworkServer>(nameof(NetworkServer.SendToReady)) ||
                method.Is <INetworkServer>(nameof(INetworkServer.SendToAll)) ||
                method.Is <INetworkServer>(nameof(INetworkServer.SendToReady));

            if (generate)
            {
                var           instanceMethod = (GenericInstanceMethod)method;
                TypeReference parameterType  = instanceMethod.GenericArguments[0];
                GenerateReadersWriters(module, parameterType);
            }
        }
Beispiel #2
0
        private void GenerateReadersWriters(MethodReference method, SequencePoint sequencePoint)
        {
            if (!method.IsGenericInstance)
            {
                return;
            }

            bool isMessage =
                method.Is(typeof(MessagePacker), nameof(MessagePacker.Pack)) ||
                method.Is(typeof(MessagePacker), nameof(MessagePacker.GetId)) ||
                method.Is(typeof(MessagePacker), nameof(MessagePacker.Unpack)) ||
                method.Is <IMessageHandler>(nameof(IMessageHandler.Send)) ||
                method.Is <IMessageHandler>(nameof(IMessageHandler.SendAsync)) ||
                method.Is <IMessageHandler>(nameof(IMessageHandler.RegisterHandler)) ||
                method.Is <IMessageHandler>(nameof(IMessageHandler.UnregisterHandler)) ||
                method.Is <IMessageHandler>(nameof(IMessageHandler.Send)) ||
                method.Is <NetworkConnection>(nameof(NetworkConnection.Send)) ||
                method.Is <NetworkConnection>(nameof(NetworkConnection.SendAsync)) ||
                method.Is <NetworkConnection>(nameof(NetworkConnection.RegisterHandler)) ||
                method.Is <NetworkConnection>(nameof(NetworkConnection.UnregisterHandler)) ||
                method.Is <INetworkClient>(nameof(INetworkClient.Send)) ||
                method.Is <INetworkClient>(nameof(INetworkClient.SendAsync)) ||
                method.Is <NetworkClient>(nameof(NetworkClient.Send)) ||
                method.Is <NetworkClient>(nameof(NetworkClient.SendAsync)) ||
                method.Is <NetworkServer>(nameof(NetworkServer.SendToAll)) ||
                method.Is <NetworkServer>(nameof(NetworkServer.SendToClientOfPlayer)) ||
                method.Is <INetworkServer>(nameof(INetworkServer.SendToAll));

            bool generate = isMessage ||
                            method.Is <NetworkWriter>(nameof(NetworkWriter.Write)) ||
                            method.Is <NetworkReader>(nameof(NetworkReader.Read));

            if (generate)
            {
                var           instanceMethod = (GenericInstanceMethod)method;
                TypeReference parameterType  = instanceMethod.GenericArguments[0];

                if (parameterType.IsGenericParameter)
                {
                    return;
                }

                GenerateReadersWriters(parameterType, sequencePoint);
                if (isMessage)
                {
                    messages.Add(parameterType);
                }
            }
        }
 /// <summary>
 /// is method used to send a message? if it use then T is a message and needs read/write functions
 /// </summary>
 /// <param name="method"></param>
 /// <returns></returns>
 private static bool IsMessageMethod(MethodReference method)
 {
     return
         (method.Is(typeof(MessagePacker), nameof(MessagePacker.Pack)) ||
          method.Is(typeof(MessagePacker), nameof(MessagePacker.GetId)) ||
          method.Is(typeof(MessagePacker), nameof(MessagePacker.Unpack)) ||
          method.Is <IMessageSender>(nameof(IMessageSender.Send)) ||
          method.Is <IMessageReceiver>(nameof(IMessageReceiver.RegisterHandler)) ||
          method.Is <IMessageReceiver>(nameof(IMessageReceiver.UnregisterHandler)) ||
          method.Is <NetworkPlayer>(nameof(NetworkPlayer.Send)) ||
          method.Is <MessageHandler>(nameof(MessageHandler.RegisterHandler)) ||
          method.Is <MessageHandler>(nameof(MessageHandler.UnregisterHandler)) ||
          method.Is <NetworkClient>(nameof(NetworkClient.Send)) ||
          method.Is <NetworkServer>(nameof(NetworkServer.SendToAll)) ||
          method.Is <NetworkServer>(nameof(NetworkServer.SendToMany)) ||
          method.Is <INetworkServer>(nameof(INetworkServer.SendToAll)));
 }
 private static bool IsReadWriteMethod(MethodReference method)
 {
     return
         (method.Is(typeof(GenericTypesSerializationExtensions), nameof(GenericTypesSerializationExtensions.Write)) ||
          method.Is(typeof(GenericTypesSerializationExtensions), nameof(GenericTypesSerializationExtensions.Read)));
 }
 private static bool IsReadWriteMethod(MethodReference method)
 {
     return
         (method.Is <NetworkWriter>(nameof(NetworkWriter.Write)) ||
          method.Is <NetworkReader>(nameof(NetworkReader.Read)));
 }