Exemplo n.º 1
0
        private Dictionary <Type, MessageHandlerBinding> BuildHandlerMap()
        {
            var dictionary = new Dictionary <Type, MessageHandlerBinding>();

            foreach (Type messageType in _messageTypes)
            {
                foreach (Type handlerType in _handlerTypes)
                {
                    var methodInfoFiltered =
                        handlerType.GetMethods().Where(mi => mi.IsPublic && mi.GetParameters().Any(p => messageType == p.ParameterType));
                    MethodInfo target = methodInfoFiltered.FirstOrDefault();
                    if (target != null)
                    {
                        ConstructorInfo       info           = handlerType.GetConstructors().FirstOrDefault();
                        MessageHandler        messageHandler = (MessageHandler)info.Invoke(new object[] { this });
                        MessageHandlerBinding binding        = new MessageHandlerBinding
                        {
                            objectTarget = messageHandler,
                            methodTarget = target
                        };
                        dictionary.Add(messageType, binding);
                    }
                }
            }
            return(dictionary);
        }
Exemplo n.º 2
0
        protected override void OnMessage(MessageEventArgs e)
        {
            try
            {
                Message message = DeserializeMessage(e.Data);

                MessageHandlerBinding binding = _handlerMap[message.GetType()];
                MessageHandler        handler = binding.objectTarget;
                MethodInfo            method  = binding.methodTarget;

                Player player  = this.GetCurrentSessionPlayer();
                string pname   = (player != null) ? player.Name : "unknown";
                bool   verbose = (message.MessageType != MessageTypeNames.HostStateChange &&
                                  message.MessageType != MessageTypeNames.GuestInputChange &&
                                  message.MessageType != MessageTypeNames.GuestCommandChange &&
                                  message.MessageType != MessageTypeNames.HostCommandChange &&
                                  message.MessageType != MessageTypeNames.MiceChange);

                if (verbose)
                {
                    LogMessage($"OnMessage {message.MessageType} from {pname}");
                }
                Message responseMessage = (Message)method.Invoke(handler, new object[] { message });
                if (responseMessage != null)
                {
                    Respond(responseMessage);
                }
                //if(verbose)
                //{
                //    LogMessage($"OnMessage {message.MessageType} from {pname}");
                //}
            }
            catch (Exception exception)
            {
                string msg = (exception.InnerException == null) ? exception.Message : exception.InnerException.Message;
                LogMessage($"{msg}");
                ServerErrorMessage error = new ServerErrorMessage()
                {
                    Error = msg
                };
                Send(JsonConvert.SerializeObject(error));
            }
        }