示例#1
0
文件: SubIn.cs 项目: krattai/flosh
        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;
        }
示例#2
0
文件: SubIn.cs 项目: K-Eo/csharpfbp
        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;
        }