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>()); }
public LocalServiceBinding() { MessageHandler = DefaultMessageHandler.GetExistingOrNew(); ServiceDispatch += MessageHandler.ReceiveMessageFromServiceBinding; TunnelCreateDispatch += MessageHandler.ReceiveTunnelCreationRequestFromServiceBinding; MessageHandler.MessageRecieved += MessageRecieved; _linkedTunnels = new ConcurrentBag <Tunnel>(); }
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>()); }
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>()); }
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>()); }
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)); }
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>()); }
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>()); }
//根据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); }
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>()); }
/// <summary> /// 默认的消息处理函数, 凡是没有注册处理函数的消息, 都会调用到这个函数 /// </summary> /// <param name="h">消息处理函数</param> public void RegisterDefaultHandler(DefaultMessageHandler h) { default_handler_ = h; }
static TunnelManager() { MessageHandler = DefaultMessageHandler.GetExistingOrNew(); Tunnels = new ConcurrentBag <Tunnel>(); }
/// <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; } })); }