示例#1
0
 void DetachWatcher(TReceiveKey key, ViReceiveDataSetNode <TReceiveKey> node, ViEntity entity)
 {
     if (node.Watcher != null)
     {
         node.Watcher.OnEnd(key, entity);
         node.Watcher = null;
     }
 }
示例#2
0
    //
    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;
        }
    }
示例#3
0
 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);
         }
     }
 }
示例#4
0
 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);
 }
示例#5
0
    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;
        }
    }