public override void Execute() { Packet np = _nameport.Receive(); if (np == null) { return; } _nameport.Close(); string pname = np.Content as string; Drop(np); _inport = (_mother._inputPorts)[pname] as IInputPort; _mother.Trace(Name + ": Accessing input port: " + _inport.Name); Packet p; // I think this works! Component oldReceiver = _inport.Receiver; if (_inport is InitializationConnection) { InitializationConnection iico = (InitializationConnection)_inport; InitializationConnection iic = new InitializationConnection( iico.Content, this); iic.Name = iico.Name; // iic.network = iico.network; p = iic.Receive(); p.Owner = this; _outport.Send(p); iic.Close(); } else { Connection cnxt = _inport as Connection; cnxt.SetReceiver(this); while ((p = cnxt.Receive()) != null) { p.Owner = this; _outport.Send(p); } // cnxt.setReceiver(oldReceiver); // moved down, as per JavaFBP } // inport.close(); _mother.Trace(Name + ": Releasing input port: " + _inport.Name); _inport.SetReceiver(oldReceiver); // inport = null; }