void DetachWatcher(TReceiveKey key, ViReceiveDataSetNode <TReceiveKey> node, ViEntity entity) { if (node.Watcher != null) { node.Watcher.OnEnd(key, entity); node.Watcher = null; } }
// public override void OnUpdate(UInt8 channel, ViIStream IS, ViEntity entity) { if (!MatchChannel(channel)) { return; } ViOperatorIdx op; IS.Read(out op); switch ((ViDataArrayOperator)op) { case ViDataArrayOperator.INSERT: { TReceiveKey key = new TReceiveKey(); key.Read(IS); ViDebuger.AssertWarning(!_array.ContainsKey(key)); // ViReceiveDataSetNode <TReceiveKey> newNode = new ViReceiveDataSetNode <TReceiveKey>(); AttachWatcher(key, newNode, entity); _array[key] = newNode; OnUpdateInvoke(null); _updateArrayCallbackList.Invoke((UInt32)ViDataArrayOperator.INSERT, key); } break; case ViDataArrayOperator.DEL: { TReceiveKey key = new TReceiveKey(); key.Read(IS); ViDebuger.AssertWarning(_array.ContainsKey(key)); // ViReceiveDataSetNode <TReceiveKey> node = _array[key]; _array.Remove(key); OnUpdateInvoke(null); _updateArrayCallbackList.Invoke((UInt32)ViDataArrayOperator.DEL, key); DetachWatcher(key, node, entity); } break; case ViDataArrayOperator.CLEAR: foreach (KeyValuePair <TReceiveKey, ViReceiveDataSetNode <TReceiveKey> > pair in _array) { ViReceiveDataSetNode <TReceiveKey> node = pair.Value; DetachWatcher(pair.Key, node, entity); } _array.Clear(); OnUpdateInvoke(null); _updateArrayCallbackList.Invoke((UInt32)ViDataArrayOperator.CLEAR, default(TReceiveKey)); break; default: break; } }
void AttachWatcher(TReceiveKey key, ViReceiveDataSetNode <TReceiveKey> node, ViEntity entity) { if (Creator != null) { ViReceiveDataSetNodeNodeWatcher <TReceiveKey> watcher = Creator(); node.Watcher = watcher; if (watcher != null) { watcher.OnStart(key, entity); } } }
public override void End(ViEntity entity) { foreach (KeyValuePair <TReceiveKey, ViReceiveDataSetNode <TReceiveKey> > pair in _array) { ViReceiveDataSetNode <TReceiveKey> node = pair.Value; if (node.Watcher != null) { node.Watcher.OnEnd(pair.Key, entity); } } _array.Clear(); DetachAllCallback(); base.End(entity); }
public new void Start(UInt8 channel, ViIStream IS, ViEntity entity) { if (!MatchChannel(channel)) { return; } ViArrayIdx size; IS.Read(out size); for (ViArrayIdx idx = 0; idx < size; ++idx) { TReceiveKey key = new TReceiveKey(); key.Read(IS); ViReceiveDataSetNode <TReceiveKey> newNode = new ViReceiveDataSetNode <TReceiveKey>(); AttachWatcher(key, newNode, entity); _array[key] = newNode; } }