bool DoExecute(MessageResult ctx, IObserverHandler<IMessage> handler, AtomicInteger barrier) { var e = new MessageReceivingEventArgs (ctx, handler.Target); try { ListnerManager.OnReceiving(e); if (!e.Ignored) ctx.results.Add(DelegateInvoker.Invoke<IMessage>(handler, ctx.Request.Sender, ctx.Request.ToMessage())); return true; } catch (Exception ex) { var re = new MessageExceptionEventArgs (ctx,ex); ListnerManager.OnReceivingException(re); ctx.InnerExceptions.Add(ex); return !re.Canceled; } finally { barrier--; if (barrier == 0) { ListnerManager.OnReceived(new MessageEventArgs(ctx)); ListnerManager.OnSent(e); OnCompleted(ctx); } else ListnerManager.OnReceived(new MessageEventArgs(ctx)); e = null; } }
public void Unsubscribe(IObserverHandler<IMessage> handler) { if (handler == null || !observers.ContainsKey(handler)) return; lock (observers) { //ListnerManager.OnObserverRemoving(handler.Target, Name, Type); observers.Remove(handler); //ListnerManager.OnObserverRemoved(handler.Target, Name, Type); } }
public void Unsubscribe(IObserverHandler <IMessage> handler) { if (handler == null || !observers.ContainsKey(handler)) { return; } lock (observers) { //ListnerManager.OnObserverRemoving(handler.Target, Name, Type); observers.Remove(handler); //ListnerManager.OnObserverRemoved(handler.Target, Name, Type); } }
public IDisposable Subscribe(SubscribeMode mode, IObserverHandler<IMessage> handler) { if (handler == null || observers.ContainsKey(handler)) return Disposable.Empty; if (mode == SubscribeMode.Async) IsAsync = true; var observer = handler.Target; lock (observers) { //ListnerManager.OnObserverAdding(observer, Name, Type); observers.Add(handler, mode); //ListnerManager.OnObserverAdded(observer, Name, Type); } return Disposable.Create(() => Unsubscribe(handler)); }
bool DoExecute(MessageResult ctx, IObserverHandler <IMessage> handler, AtomicInteger barrier) { var e = new MessageReceivingEventArgs(ctx, handler.Target); try { ListnerManager.OnReceiving(e); if (!e.Ignored) { ctx.results.Add(DelegateInvoker.Invoke <IMessage>(handler, ctx.Request.Sender, ctx.Request.ToMessage())); } return(true); } catch (Exception ex) { var re = new MessageExceptionEventArgs(ctx, ex); ListnerManager.OnReceivingException(re); ctx.InnerExceptions.Add(ex); return(!re.Canceled); } finally { barrier--; if (barrier == 0) { ListnerManager.OnReceived(new MessageEventArgs(ctx)); ListnerManager.OnSent(e); OnCompleted(ctx); } else { ListnerManager.OnReceived(new MessageEventArgs(ctx)); } e = null; } }
public IDisposable Subscribe(SubscribeMode mode, IObserverHandler <IMessage> handler) { if (handler == null || observers.ContainsKey(handler)) { return(Disposable.Empty); } if (mode == SubscribeMode.Async) { IsAsync = true; } var observer = handler.Target; lock (observers) { //ListnerManager.OnObserverAdding(observer, Name, Type); observers.Add(handler, mode); //ListnerManager.OnObserverAdded(observer, Name, Type); } return(Disposable.Create(() => Unsubscribe(handler))); }
/// <summary> /// /// </summary> /// <param name="topic">消息主题</param> /// <param name="messageType"></param> /// <param name="handler">处理器</param> public void Unsubscribe(string topic, Type messageType, IObserverHandler<IMessage> handler) { Repository[topic, messageType].Subscriber.Unsubscribe(handler); }
public object Invoke <TMessage>(IObserverHandler <TMessage> handler, object sender, TMessage msg) where TMessage : IMessage { return(handler.Invoke(sender, msg)); }
/// <summary> /// /// </summary> /// <param name="topic">消息主题</param> /// <param name="messageType"></param> /// <param name="handler">处理器</param> public void Unsubscribe(string topic, Type messageType, IObserverHandler <IMessage> handler) { Repository[topic, messageType].Subscriber.Unsubscribe(handler); }
/// <summary> /// /// </summary> /// <param name="handler"></param> public SubscribeInfo(IObserverHandler <IMessage> handler) : this(null, handler) { }
/// <summary> /// /// </summary> /// <param name="messageType"></param> /// <param name="handler"></param> public SubscribeInfo(Type messageType, IObserverHandler <IMessage> handler) { MessageType = messageType; Handler = handler; }
/// <summary> /// /// </summary> /// <param name="handler"></param> public SubscribeInfo(IObserverHandler<IMessage> handler) : this(null, handler) { }
/// <summary> /// /// </summary> /// <param name="messageType"></param> /// <param name="handler"></param> public SubscribeInfo(Type messageType, IObserverHandler<IMessage> handler) { MessageType = messageType; Handler = handler; }