void OnInputPinDisconnected(viInternalLink link)
        {
            viPin sourcepin = this.graph.FindPin(link.Otherpin);

            viOutputPin op = (viOutputPin)sourcepin;

            viNode sink = this.hostnodes[link.Host];
            viInputPin ip = null;
            foreach (viInputPin i in sink.InputPins)
            {
                if (i.ComInstance == link.Instance) { ip = i; }
            }

            op.ChildrenPins.Remove(ip);
            ip.ParentPin = null;

            Debug.WriteLine("Disconnect Source: " + sourcepin.ParentNode.HdeNode.GetID().ToString() + " Sink: " + sink.HdeNode.GetID());
        }
        private bool ProcessLink(viInternalLink link)
        {
            viPin sourcepin = this.graph.FindPin(link.Otherpin);
            viOutputPin op = (viOutputPin)sourcepin;

            if (sourcepin != null && this.hostnodes.ContainsKey(link.Host))
            {
                viNode sink = this.hostnodes[link.Host];

                viInputPin ip = null;
                foreach (viInputPin i in sink.InputPins)
                {
                    if (i.ComInstance == link.Instance) { ip = i; }
                }

                op.ChildrenPins.Add(ip);
                ip.ParentPin = op;
                Debug.WriteLine("Connect Source: " + sourcepin.ParentNode.HdeNode.GetID().ToString() + " Sink: " + sink.HdeNode.GetID());

                return true;
            }
            else
            {
                return false;
            }
        }
 private void OnInputPinConnected(viInternalLink link)
 {
     //Try to process the link, if it fails
     //(due to info not available yet, place in queue)
     if (!this.ProcessLink(link))
     {
         this.pendinglinks.Add(link);
     }
 }