Esempio n. 1
0
    public static void RegisterNetworkHandlerAttributes()
    {
        List <NetworkMessageHandlerAttribute> serverMessageHandlers = (List <NetworkMessageHandlerAttribute>)get_serverMessageHandlers.GetValue(null);
        List <NetworkMessageHandlerAttribute> clientMessageHandlers = (List <NetworkMessageHandlerAttribute>)get_clientMessageHandlers.GetValue(null);


        HashSet <short> hashSet = new HashSet <short>();

        Type[] types = typeof(NetworkHandler).Assembly.GetTypes();
        for (int i = 0; i < types.Length; i++)
        {
            foreach (MethodInfo methodInfo in types[i].GetMethods(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic))
            {
                object[] customAttributes = methodInfo.GetCustomAttributes(false);
                foreach (var attribute in customAttributes.OfType <NetworkMessageHandlerAttribute>())
                {
                    NetworkMessageHandlerAttribute networkMessageHandlerAttribute = (Attribute)attribute as NetworkMessageHandlerAttribute;

                    NetworkMessageDelegate messageHandler = null;
                    if (networkMessageHandlerAttribute != null)
                    {
                        messageHandler = (NetworkMessageDelegate)Delegate.CreateDelegate(typeof(NetworkMessageDelegate), methodInfo);
                        if (messageHandler != null)
                        {
                            if (networkMessageHandlerAttribute.client)
                            {
                                clientMessageHandlers.Add(networkMessageHandlerAttribute);
                                hashSet.Add(networkMessageHandlerAttribute.msgType);
                            }
                            if (networkMessageHandlerAttribute.server)
                            {
                                serverMessageHandlers.Add(networkMessageHandlerAttribute);
                                hashSet.Add(networkMessageHandlerAttribute.msgType);
                            }
                        }
                        if (messageHandler == null)
                        {
                            Debug.LogWarningFormat("Could not register message handler for {0}. The function signature is likely incorrect.", new object[]
                            {
                                methodInfo.Name
                            });
                        }
                        get_messageHandler.SetValue(networkMessageHandlerAttribute, messageHandler);
                        if (!networkMessageHandlerAttribute.client && !networkMessageHandlerAttribute.server)
                        {
                            Debug.LogWarningFormat("Could not register message handler for {0}. It is marked as neither server nor client.", new object[]
                            {
                                methodInfo.Name
                            });
                        }
                    }
                }
            }
        }
    }
Esempio n. 2
0
        public override void Initialize()
        {
            var serverMessageHandlers = typeof(NetworkMessageHandlerAttribute).GetFieldValue <List <NetworkMessageHandlerAttribute> >("serverMessageHandlers");
            var clientMessageHandlers = typeof(NetworkMessageHandlerAttribute).GetFieldValue <List <NetworkMessageHandlerAttribute> >("clientMessageHandlers");

            var serverRpcHandler = new NetworkMessageHandlerAttribute {
                server = true, msgType = MessageTypeC2S
            };
            var clientRpcHandler = new NetworkMessageHandlerAttribute {
                client = true, msgType = MessageTypeS2C
            };

            var delegateC2S = (NetworkMessageDelegate)Delegate.CreateDelegate(typeof(NetworkMessageDelegate), MethodHelper.GetMethodInfo <Action <NetworkMessage> >(HandleC2S));
            var delegateS2C = (NetworkMessageDelegate)Delegate.CreateDelegate(typeof(NetworkMessageDelegate), MethodHelper.GetMethodInfo <Action <NetworkMessage> >(HandleS2C));

            serverRpcHandler.SetFieldValue("messageHandler", delegateC2S);
            clientRpcHandler.SetFieldValue("messageHandler", delegateS2C);

            serverMessageHandlers.Add(serverRpcHandler);
            clientMessageHandlers.Add(clientRpcHandler);
        }