예제 #1
0
        public Data HandleRequest(Data req)
        {
            if (_Handler == null)
            {
                return(null);
            }

            if (!WeakListHelper.IsValid(_RequestCheckers, (IRequestChecker checker) => {
                return(checker.IsValidRequest(this, req));
            }))
            {
                return(null);
            }

            WeakListHelper.Notify(_RequestWatchers, (IRequestWatcher listener) => {
                listener.OnRequest(this, req);
            });

            Data res = _Handler.DoHandle(this, req);

            AdvanceRevision();

            WeakListHelper.Notify(_ResponseWatchers, (IResponseWatcher listener) => {
                listener.OnResponse(this, req, res);
            });
            return(res);
        }
예제 #2
0
 private void OnElementIndexChanged(T element)
 {
     WeakListHelper.Notify(_Watchers, (ITableWatcher <T> watcher) => {
         watcher.OnElementIndexChanged(element);
     });
     WeakListHelper.Notify(_GenericWatchers, (ITableWatcher <T> watcher) => {
         watcher.OnElementIndexChanged(element);
     });
 }
예제 #3
0
        private void OnElementRemoved(T element)
        {
            if (element.DebugMode)
            {
                element.Debug("Removed");
            }

            WeakListHelper.Notify(_Watchers, (IDictWatcher <T> watcher) => {
                watcher.OnElementRemoved(element);
            });
            WeakListHelper.Notify(_GenericWatchers, (IDictWatcher <T> watcher) => {
                watcher.OnElementRemoved(element);
            });
        }
예제 #4
0
        private void OnElementAdded(T element)
        {
            if (element.DebugMode)
            {
                element.Debug("Added");
            }

            WeakListHelper.Notify(_Watchers, (ITableWatcher <T> watcher) => {
                watcher.OnElementAdded(element);
            });
            WeakListHelper.Notify(_GenericWatchers, (ITableWatcher <T> watcher) => {
                watcher.OnElementAdded(element);
            });
        }
예제 #5
0
        public bool FireEvent(Data evt)
        {
            if (!WeakListHelper.IsValid(_EventCheckers, (IEventChecker checker) => {
                return(checker.IsValidEvent(this, evt));
            }))
            {
                return(false);
            }
            AdvanceRevision();

            WeakListHelper.Notify(_EventWatchers, (IEventWatcher listener) => {
                listener.OnEvent(this, evt);
            });
            return(true);
        }
예제 #6
0
        public void Publish(TPub pub, Action <TSub> callback)
        {
            if (_InstanceSubscribers != null)
            {
                int             pubHash = pub.GetHashCode();
                WeakList <TSub> subs    = null;
                if (_InstanceSubscribers.TryGetValue(pubHash, out subs))
                {
                    subs.ForEach(callback);

                    if (subs.Count == 0)
                    {
                        _InstanceSubscribers.Remove(pubHash);
                    }
                }
            }
            WeakListHelper.Notify(_ClassSubscribers, callback);
        }
예제 #7
0
        }                                                                                 //__SILP__

        //__SILP__
        public void FireOnChanged()                                                       //__SILP__
        {
            WeakListHelper.Notify(_VarWatchers, (IVarWatcher watcher) => {                //__SILP__
                watcher.OnChanged(this);                                                  //__SILP__
            });                                                                           //__SILP__
        }                                                                                 //__SILP__