public void AddContext(IExtendedSubject context) { IExtendedSubject newContext = new SynchronizedSubject(context); context.AddExtension <ILock>(new StateManagerLock()); context.AddExtension <IStateCallback>(this); lock ( _toBePredicated) { _toBePredicated.Enqueue(context); } }
// ********************************************************************** private void ProcessQueuedStates(Object stateInfo) { IExtendedSubject state = (IExtendedSubject)stateInfo; try { _lockExecutor.AcquireReaderLock(-1); _clientExecutor(state); } finally { _lockExecutor.ReleaseLock(); } }
// ********************************************************************** private void ProcessQueuedPredicate(Object obj) { IExtendedSubject context = (IExtendedSubject)obj; try { _lockRung.AcquireReaderLock(-1); foreach (Rung rung in _rungs) { if (rung._predicates(context)) { rung._executor(context); } } } finally { _lockRung.ReleaseLock(); } }
public SynchronizedSubject(IExtendedSubject parent) { _parent = parent; }
public SynchronizedSubject() { _parent = new Subject(); }