Esempio n. 1
0
        private static void RegisterMessageHandler(object handler, MethodInfo method, int messageId)
        {
            var parameters = method.GetParameters();

            // MessageId가 있으면 그것으로 MessageType을 찾지만, 없다면 가장 마지막 인자가 MessageType이라고 추측한다.
            var messageType = messageId != MessageHandlerAttribute.DeduceFromParameter
                ? MessageHelper.TypeMap[messageId]
                : parameters.Last().ParameterType;

            // bind entity handler
            if (CheckIfParametersEquals(parameters, typeof(Entity), typeof(MessageSession),
                                        messageType))
            {
                var entitySessionHandler = new DispatchHandler.EntitySessionHandler(
                    (entity, session, message) => method.Invoke(handler, new object[] { entity, session, message }));

                DispatchHandler.Instance.AddHandler(messageType, entitySessionHandler);
            }

            // bind non-entity handler
            if (CheckIfParametersEquals(parameters, typeof(MessageSession), messageType))
            {
                var sessionHandler = new DispatchHandler.SessionHandler(
                    (session, message) => method.Invoke(handler, new object[] { session, message }));

                DispatchHandler.Instance.AddHandler(messageType, sessionHandler);
            }

            // bind non-session handler
            if (CheckIfParametersEquals(parameters, typeof(Entity), messageType))
            {
                var entityHandler = new DispatchHandler.EntityHandler(
                    (entity, message) => method.Invoke(handler, new object[] { entity, message }));

                DispatchHandler.Instance.AddHandler(messageType, entityHandler);
            }

            // bind message-only handler
            if (CheckIfParametersEquals(parameters, messageType))
            {
                var messageHandler = new DispatchHandler.Handler(
                    message => method.Invoke(handler, new object[] { message }));

                DispatchHandler.Instance.AddHandler(messageType, messageHandler);
            }
        }
Esempio n. 2
0
        private static void RegisterMessageHandler(object handler, MethodInfo method, int messageId)
        {
            var parameters = method.GetParameters();

            // MessageId가 있으면 그것으로 MessageType을 찾지만, 없다면 가장 마지막 인자가 MessageType이라고 추측한다.
            var messageType = messageId != MessageHandlerAttribute.DeduceFromParameter
                ? MessageHelper.TypeMap[messageId]
                : parameters.Last().ParameterType;

            // bind entity handler
            if (CheckIfParametersEquals(parameters, typeof(Entity), typeof(MessageSession),
                                        messageType))
            {
                var entitySessionHandler = new DispatchHandler.EntitySessionHandler(
                    (entity, session, message) => method.Invoke(handler, new object[] {entity, session, message}));

                DispatchHandler.Instance.AddHandler(messageType, entitySessionHandler);
            }

            // bind non-entity handler
            if (CheckIfParametersEquals(parameters, typeof(MessageSession), messageType))
            {
                var sessionHandler = new DispatchHandler.SessionHandler(
                    (session, message) => method.Invoke(handler, new object[] {session, message}));

                DispatchHandler.Instance.AddHandler(messageType, sessionHandler);
            }

            // bind non-session handler
            if (CheckIfParametersEquals(parameters, typeof(Entity), messageType))
            {
                var entityHandler = new DispatchHandler.EntityHandler(
                    (entity, message) => method.Invoke(handler, new object[] {entity, message}));

                DispatchHandler.Instance.AddHandler(messageType, entityHandler);
            }

            // bind message-only handler
            if (CheckIfParametersEquals(parameters, messageType))
            {
                var messageHandler = new DispatchHandler.Handler(
                    message => method.Invoke(handler, new object[] {message}));

                DispatchHandler.Instance.AddHandler(messageType, messageHandler);
            }
        }