private static void CollectHandlers()
        {
            NetworkMessageHandlerAttribute.clientMessageHandlers.Clear();
            NetworkMessageHandlerAttribute.serverMessageHandlers.Clear();
            HashSet <short> hashSet = new HashSet <short>();

            Type[] types = typeof(NetworkMessageHandlerAttribute).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);
                    for (int k = 0; k < customAttributes.Length; k++)
                    {
                        NetworkMessageHandlerAttribute networkMessageHandlerAttribute = ((Attribute)customAttributes[k]) as NetworkMessageHandlerAttribute;
                        if (networkMessageHandlerAttribute != null)
                        {
                            networkMessageHandlerAttribute.messageHandler = (NetworkMessageDelegate)Delegate.CreateDelegate(typeof(NetworkMessageDelegate), methodInfo);
                            if (networkMessageHandlerAttribute.messageHandler != null)
                            {
                                if (networkMessageHandlerAttribute.client)
                                {
                                    NetworkMessageHandlerAttribute.clientMessageHandlers.Add(networkMessageHandlerAttribute);
                                    hashSet.Add(networkMessageHandlerAttribute.msgType);
                                }
                                if (networkMessageHandlerAttribute.server)
                                {
                                    NetworkMessageHandlerAttribute.serverMessageHandlers.Add(networkMessageHandlerAttribute);
                                    hashSet.Add(networkMessageHandlerAttribute.msgType);
                                }
                            }
                            if (networkMessageHandlerAttribute.messageHandler == null)
                            {
                                Debug.LogWarningFormat("Could not register message handler for {0}. The function signature is likely incorrect.", new object[]
                                {
                                    methodInfo.Name
                                });
                            }
                            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
                                });
                            }
                        }
                    }
                }
            }
            for (short num = 48; num < 71; num += 1)
            {
                if (!hashSet.Contains(num))
                {
                    Debug.LogWarningFormat("Network message MsgType.Highest + {0} is unregistered.", new object[]
                    {
                        (int)(num - 47)
                    });
                }
            }
        }
Exemplo n.º 2
0
        private static void CollectHandlers()
        {
            NetworkMessageHandlerAttribute.clientMessageHandlers.Clear();
            NetworkMessageHandlerAttribute.serverMessageHandlers.Clear();
            HashSet <short> hashSet = new HashSet <short>();

            foreach (SearchableAttribute searchableAttribute in SearchableAttribute.GetInstances <NetworkMessageHandlerAttribute>())
            {
                NetworkMessageHandlerAttribute networkMessageHandlerAttribute = (NetworkMessageHandlerAttribute)searchableAttribute;
                MethodInfo methodInfo = networkMessageHandlerAttribute.target as MethodInfo;
                if (!(methodInfo == null) && methodInfo.IsStatic)
                {
                    networkMessageHandlerAttribute.messageHandler = (NetworkMessageDelegate)Delegate.CreateDelegate(typeof(NetworkMessageDelegate), methodInfo);
                    if (networkMessageHandlerAttribute.messageHandler != null)
                    {
                        if (networkMessageHandlerAttribute.client)
                        {
                            NetworkMessageHandlerAttribute.clientMessageHandlers.Add(networkMessageHandlerAttribute);
                            hashSet.Add(networkMessageHandlerAttribute.msgType);
                        }
                        if (networkMessageHandlerAttribute.server)
                        {
                            NetworkMessageHandlerAttribute.serverMessageHandlers.Add(networkMessageHandlerAttribute);
                            hashSet.Add(networkMessageHandlerAttribute.msgType);
                        }
                    }
                    if (networkMessageHandlerAttribute.messageHandler == null)
                    {
                        Debug.LogWarningFormat("Could not register message handler for {0}. The function signature is likely incorrect.", new object[]
                        {
                            methodInfo.Name
                        });
                    }
                    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
                        });
                    }
                }
            }
            for (short num = 48; num < 75; num += 1)
            {
                if (!hashSet.Contains(num))
                {
                    Debug.LogWarningFormat("Network message MsgType.Highest + {0} is unregistered.", new object[]
                    {
                        (int)(num - 47)
                    });
                }
            }
        }