public void Should_not_throw_any_exception()
        {
            // Arrange
            var are          = new AutoResetEvent(false);
            var errorHanlder = Substitute.For <IConsumerErrorHandler>();

            errorHanlder.When(x => x.HandleError(Arg.Any <BasicDeliverEventArgs>(), Arg.Any <Exception>())).Do(callInfo => { throw new Exception("Cannot handle error"); });
            Action <Customer, MessageDeliverEventArgs> taskFactory = (x, y) => { throw new Exception("Task executed failed"); };
            var watcher = Substitute.For <IRabbitWatcher>();
            var handler = new DefaultMessageHandler <Customer>("SubscriptionName", taskFactory, errorHanlder, Substitute.For <ISerializer>(), watcher);

            handler.HandlingComplete += x => are.Set();

            var p = Substitute.For <IBasicProperties>();

            p.Type = Global.DefaultTypeNameSerializer.Serialize(typeof(Customer));

            // Action
            handler.HandleMessage(new BasicDeliverEventArgs("tag", 1, false, "e", "r", p, new byte[0]));

            // Assert
            are.WaitOne();
            watcher.Received().Error(Arg.Is <Exception>(x => x.Message == "Task executed failed"));
            watcher.Received().ErrorFormat(Arg.Is <string>(x => x.StartsWith("Failed to handle the exception: ")), Arg.Any <object>(), Arg.Any <object>());
        }
示例#2
0
 public LocalServiceBinding()
 {
     MessageHandler                  = DefaultMessageHandler.GetExistingOrNew();
     ServiceDispatch                += MessageHandler.ReceiveMessageFromServiceBinding;
     TunnelCreateDispatch           += MessageHandler.ReceiveTunnelCreationRequestFromServiceBinding;
     MessageHandler.MessageRecieved += MessageRecieved;
     _linkedTunnels                  = new ConcurrentBag <Tunnel>();
 }
示例#3
0
        public void Should_call_error_handler_to_handle_the_error()
        {
            // Arrange
            var errorHanlder = Substitute.For<IConsumerErrorHandler>();
            var handler = new DefaultMessageHandler<Customer>("SubscriptionName", Substitute.For<Action<Customer, MessageDeliverEventArgs>>(), errorHanlder, Substitute.For<ISerializer>(), Substitute.For<IRabbitWatcher>());

            // Action
            handler.HandleError(new BasicDeliverEventArgs("tag", 1, false, "e", "r", Substitute.For<IBasicProperties>(), new byte[0]), new Exception());

            // Assert
            errorHanlder.Received().HandleError(Arg.Any<BasicDeliverEventArgs>(), Arg.Any<Exception>());
        }
示例#4
0
        public void Should_call_error_handler_to_handle_the_error()
        {
            // Arrange
            var errorHanlder = Substitute.For <IConsumerErrorHandler>();
            var handler      = new DefaultMessageHandler <Customer>("SubscriptionName", Substitute.For <Action <Customer, MessageDeliverEventArgs> >(), errorHanlder, Substitute.For <ISerializer>(), Substitute.For <IRabbitWatcher>());

            // Action
            handler.HandleError(new BasicDeliverEventArgs("tag", 1, false, "e", "r", Substitute.For <IBasicProperties>(), new byte[0]), new Exception());

            // Assert
            errorHanlder.Received().HandleError(Arg.Any <BasicDeliverEventArgs>(), Arg.Any <Exception>());
        }
示例#5
0
        public Activity Handle(Activity receivedAction)
        {
            IMessageHandler handler;

            if (receivedAction.Text.Split(' ').Where(s => new string[] { "cat", "gato", "gatos", "kitty", "gatinho" }.Contains(s.ToLower())).Count() > 0)
            {
                handler = new CatMessageHandler();
            }
            else
            {
                handler = new DefaultMessageHandler();
            }

            return(handler.Handle(receivedAction));
        }
        public void Should_handle_error_if_the_task_failed()
        {
            // Arrange
            var are          = new AutoResetEvent(false);
            var errorHanlder = Substitute.For <IConsumerErrorHandler>();
            Action <Customer, MessageDeliverEventArgs> taskFactory = (x, y) => { throw new Exception("Task executed failed"); };
            var handler = new DefaultMessageHandler <Customer>("SubscriptionName", taskFactory, errorHanlder, Substitute.For <ISerializer>(), Substitute.For <IRabbitWatcher>());

            handler.HandlingComplete += x => are.Set();

            // Action
            handler.HandleMessage(new BasicDeliverEventArgs("tag", 1, false, "e", "r", Substitute.For <IBasicProperties>(), new byte[0]));

            // Assert
            are.WaitOne();
            errorHanlder.Received().HandleError(Arg.Any <BasicDeliverEventArgs>(), Arg.Any <Exception>());
        }
示例#7
0
        public ActionResult <string> Post([FromQuery] SignModel signModel)
        {
            var    res                    = string.Empty;
            string requestXml             = Common.ReadRequest(this.Request);
            DefaultMessageHandler handler = new DefaultMessageHandler();

            if (signModel != null && !string.IsNullOrEmpty(signModel.signature) && !CheckSignature.Check(signModel.signature, signModel.timestamp, signModel.nonce, WeiXinContext.Config.Token))
            {
                res = handler.HandleErrorRequest(signModel, requestXml, "验签失败");
            }
            else
            {
                handler = new DefaultMessageHandler(signModel, requestXml);
                res     = handler.HandleRequest();
            }
            return(Content(res, Request.ContentType, Encoding.UTF8));
        }
示例#8
0
        public void Should_handle_error_if_the_task_failed()
        {
            // Arrange
            var are = new AutoResetEvent(false);
            var errorHanlder = Substitute.For<IConsumerErrorHandler>();
            Action<Customer, MessageDeliverEventArgs> taskFactory = (x, y) => { throw new Exception("Task executed failed"); };
            var handler = new DefaultMessageHandler<Customer>("SubscriptionName", taskFactory, errorHanlder, Substitute.For<ISerializer>(), Substitute.For<IRabbitWatcher>());
            handler.HandlingComplete += x => are.Set();

            // Action
            handler.HandleMessage(new BasicDeliverEventArgs("tag", 1, false, "e", "r", Substitute.For<IBasicProperties>(), new byte[0]));

            // Assert
            Assert.IsTrue(are.WaitOne(1000));
            errorHanlder.Received().HandleError(Arg.Any<BasicDeliverEventArgs>(), Arg.Any<Exception>());
            
        }
示例#9
0
        public void Should_fire_event_HandlingComplete()
        {
            // Arrange
            var are = new AutoResetEvent(false);
            var errorHanlder = Substitute.For<IConsumerErrorHandler>();
            var handler = new DefaultMessageHandler<Customer>("SubscriptionName", Substitute.For<Action<Customer, MessageDeliverEventArgs>>(), errorHanlder, Substitute.For<ISerializer>(), Substitute.For<IRabbitWatcher>());
            handler.HandlingComplete += x => are.Set();
            var p = Substitute.For<IBasicProperties>();
            p.Type = Global.DefaultTypeNameSerializer.Serialize(typeof(Customer));

            // Action
            handler.HandleMessage(new BasicDeliverEventArgs("tag", 1, false, "e", "r", p, new byte[0]));

            // Assert
            Assert.IsTrue(are.WaitOne(1000));
            errorHanlder.DidNotReceive().HandleError(Arg.Any<BasicDeliverEventArgs>(), Arg.Any<Exception>());
        }
        public void Should_handle_error_if_the_task_failed()
        {
            // Arrange
            var are = new AutoResetEvent(false);
            var errorHanlder = Substitute.For<IConsumerErrorHandler>();
            Func<BasicDeliverEventArgs, Task> taskFactory = x => Task.Factory.StartNew(() => { throw new Exception("Task executed failed");});
            var handler = new DefaultMessageHandler(errorHanlder, taskFactory, Substitute.For<IRabbitWatcher>());
            handler.HandlingComplete += x => are.Set();

            // Action
            handler.HandleMessage(Substitute.For<IBasicConsumer>(), new BasicDeliverEventArgs("tag", 1, false, "e", "r", Substitute.For<IBasicProperties>(), new byte[0]));

            // Assert
            are.WaitOne();
            errorHanlder.Received().HandleError(Arg.Any<BasicDeliverEventArgs>(), Arg.Any<Exception>());
            
        }
        public void Should_fire_event_HandlingComplete()
        {
            // Arrange
            var are          = new AutoResetEvent(false);
            var errorHanlder = Substitute.For <IConsumerErrorHandler>();
            var handler      = new DefaultMessageHandler <Customer>("SubscriptionName", Substitute.For <Action <Customer, MessageDeliverEventArgs> >(), errorHanlder, Substitute.For <ISerializer>(), Substitute.For <IRabbitWatcher>());

            handler.HandlingComplete += x => are.Set();
            var p = Substitute.For <IBasicProperties>();

            p.Type = Global.DefaultTypeNameSerializer.Serialize(typeof(Customer));

            // Action
            handler.HandleMessage(new BasicDeliverEventArgs("tag", 1, false, "e", "r", p, new byte[0]));

            // Assert
            are.WaitOne();
            errorHanlder.DidNotReceive().HandleError(Arg.Any <BasicDeliverEventArgs>(), Arg.Any <Exception>());
        }
示例#12
0
        //根据MsgType获得相应的处理器
        public IMessageHandler MessageRole(Model.MiddleMessage message)
        {
            IMessageHandler messageHanlder = null;

            switch (message.RequestMessage.MsgType)
            {
            //文本信息
            case Model.MsgType.Text:
                messageHanlder = new TextMessageRole().MessageRole(message);
                break;

            //事件信息
            case Model.MsgType.Event:
                messageHanlder = new EventMessageRole().MessageRole(message);
                break;

            //找不到情况下,输出默认信息
            default:
                messageHanlder = new DefaultMessageHandler();
                break;
            }
            return(messageHanlder);
        }
示例#13
0
        public void Should_not_throw_any_exception()
        {
            // Arrange
            var are = new AutoResetEvent(false);
            var errorHanlder = Substitute.For<IConsumerErrorHandler>();
            errorHanlder.When(x => x.HandleError(Arg.Any<BasicDeliverEventArgs>(), Arg.Any<Exception>())).Do(callInfo => { throw new Exception("Cannot handle error"); });
            Action<Customer, MessageDeliverEventArgs> taskFactory = (x, y) => { throw new Exception("Task executed failed"); };
            var watcher = Substitute.For<IRabbitWatcher>();
            var handler = new DefaultMessageHandler<Customer>("SubscriptionName", taskFactory, errorHanlder, Substitute.For<ISerializer>(), watcher);
            handler.HandlingComplete += x => are.Set();

            var p = Substitute.For<IBasicProperties>();
            p.Type = Global.DefaultTypeNameSerializer.Serialize(typeof (Customer));

            // Action
            handler.HandleMessage(new BasicDeliverEventArgs("tag", 1, false, "e", "r", p, new byte[0]));

            // Assert
            Assert.IsTrue(are.WaitOne(1000));
            watcher.Received().Error(Arg.Is<Exception>(x => x.Message == "Task executed failed"));
            watcher.Received().ErrorFormat(Arg.Is<string>(x => x.StartsWith("Failed to handle the exception: ")), Arg.Any<object>(), Arg.Any<object>());

        }
示例#14
0
 /// <summary>
 /// 默认的消息处理函数, 凡是没有注册处理函数的消息, 都会调用到这个函数
 /// </summary>
 /// <param name="h">消息处理函数</param>
 public void RegisterDefaultHandler(DefaultMessageHandler h)
 {
     default_handler_ = h;
 }
示例#15
0
 static TunnelManager()
 {
     MessageHandler = DefaultMessageHandler.GetExistingOrNew();
     Tunnels        = new ConcurrentBag <Tunnel>();
 }
示例#16
0
        /// <summary>
        /// Occurs when a message is received.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private Task OnMessageReceived(MqttApplicationMessageReceivedEventArgs e)
        {
            return(Task.Run(() =>
            {
                try
                {
                    if (!e.ApplicationMessage.Topic.StartsWith("emitter"))
                    {
                        var handlers = this.Trie.Match(e.ApplicationMessage.Topic);
                        // Invoke every handler matching the channel
                        foreach (MessageHandler handler in handlers)
                        {
                            handler(e.ApplicationMessage.Topic, e.ApplicationMessage.Payload);
                        }

                        if (handlers.Count == 0)
                        {
                            DefaultMessageHandler?.Invoke(e.ApplicationMessage.Topic, e.ApplicationMessage.Payload);
                        }
                        return;
                    }

                    // Did we receive a keygen response?
                    if (e.ApplicationMessage.Topic == "emitter/keygen/")
                    {
                        // Deserialize the response
                        var response = KeygenResponse.FromBinary(e.ApplicationMessage.Payload);
                        if (response == null || response.Status != 200)
                        {
                            this.InvokeError(response.Status);
                            return;
                        }

                        // Call the response handler we have registered previously
                        // TODO: get rid of the handler afterwards, or refac keygen
                        if (this.KeygenHandlers.ContainsKey(response.Channel))
                        {
                            ((KeygenHandler)this.KeygenHandlers[response.Channel])(response);
                        }
                        return;
                    }

                    if (e.ApplicationMessage.Topic == "emitter/presence/")
                    {
                        var presenceEvent = PresenceEvent.FromBinary(e.ApplicationMessage.Payload);

                        var handlers = this.PresenceTrie.Match(presenceEvent.Channel);
                        // Invoke every handler matching the channel
                        foreach (PresenceHandler handler in handlers)
                        {
                            handler(presenceEvent);
                        }

                        if (handlers.Count == 0)
                        {
                            DefaultPresenceHandler?.Invoke(presenceEvent);
                        }

                        return;
                    }

                    if (e.ApplicationMessage.Topic == "emitter/error/")
                    {
                        var errorEvent = ErrorEvent.FromBinary(e.ApplicationMessage.Payload);
                        var emitterException = new EmitterException((EmitterEventCode)errorEvent.Status, errorEvent.Message);

                        InvokeError(emitterException);
                        return;
                    }

                    if (e.ApplicationMessage.Topic == "emitter/me/")
                    {
                        var meResponse = MeResponse.FromBinary(e.ApplicationMessage.Payload);
                        Me?.Invoke(meResponse);

                        return;
                    }
                    return;
                }
                catch (Exception ex)
                {
                    this.InvokeError(ex);
                    return;
                }
            }));
        }