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; }
public link_2(IConnectible precursor, IConnectible follower) :this(precursor, follower, LIMIT_DEFAULT_VALUE, DELAY_MINIMUM_VALUE) { }
public link_2(IConnectible precursor, IConnectible follower, e_TskLim limit) :this(precursor, follower, limit, DELAY_MINIMUM_VALUE) { }
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; }
public void clear() { member = null; }
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); }
public memberData(IConnectible member, e_DependType type, e_Dot dot) { this.member = member; depend = type; dependDot = dot; }
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; }