Exemple #1
0
        public link_2(IConnectible precursor, IConnectible follower, e_TskLim limit, double delay)
        {
            if(delay < DELAY_MINIMUM_VALUE) throw new ArgumentException(nameof(delay));

            init_Identity();
            init_Limit(limit);
            init_Storage(follower, precursor);
            init_PrecursorDate(storage.precursor, storage.dotPrecursor);
        }
        public ILink_2 createLink(IConnectible precursor, IConnectible follower, e_TskLim limit, double delay)
        {
            if(delay < link_2.DELAY_MINIMUM_VALUE) throw new ArgumentException(nameof(delay));
            if(!Enum.IsDefined(typeof(e_TskLim), limit)) throw new ArgumentException(nameof(limit));
            if (!checkMembers(precursor, follower)) return null;

            link_2 newLink = new link_2(precursor, follower, limit, delay);
            vault.addLink(newLink);

            return newLink;
        }
Exemple #3
0
 public link_2(IConnectible precursor, IConnectible follower)
     :this(precursor, follower, LIMIT_DEFAULT_VALUE, DELAY_MINIMUM_VALUE)
 { }
Exemple #4
0
 public link_2(IConnectible precursor, IConnectible follower, e_TskLim limit)
     :this(precursor, follower, limit, DELAY_MINIMUM_VALUE)
 { }
Exemple #5
0
            public memberStorage(IConnectible precursor, IConnectible follower, e_TskLim limit)
            {
                if(precursor == null || follower == null) throw new ArgumentNullException();
                if(!Enum.IsDefined(typeof(e_TskLim), limit)) throw new ArgumentException(nameof(limit));

                _follower = new memberData(follower, e_DependType.Slave, limit);
                _precursor = new memberData(precursor, e_DependType.Master, limit);

                follower.event_ObjectDeleted += memberRemovedHandler;
                precursor.event_ObjectDeleted += memberRemovedHandler;

                unsubscribeFollower = () => follower.event_ObjectDeleted -= memberRemovedHandler;
                unsubscribePrecursor = () => precursor.event_ObjectDeleted -= memberRemovedHandler;
            }
Exemple #6
0
 public void clear()
 {
     member = null;
 }
Exemple #7
0
 public memberData(IConnectible member, e_DependType type, e_TskLim limit)
 {
     this.member = member;
     depend = type;
     dependDot = depend == e_DependType.Master ? 
         Hlp.GetPrecursor(limit) : Hlp.GetFollower(limit);
 }
Exemple #8
0
 public memberData(IConnectible member, e_DependType type, e_Dot dot)
 {
     this.member = member;
     depend = type;
     dependDot = dot;
 }
Exemple #9
0
        protected void init_Storage(IConnectible follower, IConnectible precursor)
        {
            storage = new memberStorage(precursor, follower, _limit);

            storage.event_memberRemoved += memberRemovedHandler;

            unsubscribeStorage = () => storage.event_memberRemoved -= memberRemovedHandler;
        }
        protected bool checkMembers(IConnectible precursor, IConnectible follower)
        {
            if(precursor == null) throw new ArgumentNullException(nameof(precursor));
            if (follower == null) throw new ArgumentNullException(nameof(follower));
            if(follower.GetId() == precursor.GetId() && follower.GetType() == precursor.GetType()) 
                throw new ApplicationException("Одна и та же сущность не может являться последователем и предшественником в одном экземпляре связи");

            Func<ILink_2, bool> check = lnk =>
            {
                if (lnk.isMemberExist(precursor) && lnk.isMemberExist(follower)) return false;
                return true;
            };

            ILink_2[] arr = vault.getLinks().Where(v => check(v)).ToArray();

            return arr.Length == 0 ? true : false;
        }