예제 #1
0
 protected void DoPortCreated(string key, IQPort port)
 {
     if (OnPortCreated(key, port))
     {
         RaisePortRequested(PortCreated, key, port);
     }
 }
예제 #2
0
        protected void Process()
        {
            _ComponentContexts = new Hashtable();
            foreach (IComponentGlyph component in _Components)
            {
                Log(System.Drawing.Color.Green, "{1} {0} = new {1} ();", component.Name, component.TypeName);
                Type type = Type.GetType(component.TypeName);
                if (type == null)
                {
                    throw new NullReferenceException("Type [" + component.TypeName + "] not found");
                }
                object hsm = HsmUtil.CreateHsm(type);
                _ComponentContexts.Add(component.Name, new ComponentContext(hsm, component));
            }
            foreach (IPortLinkGlyph portLink in _Ports)
            {
                IComponentGlyph compFrom = GetComponent(portLink, TransitionContactEnd.From);
                IComponentGlyph compTo   = GetComponent(portLink, TransitionContactEnd.To);

                Log(System.Drawing.Color.Blue, "{0}.{1}.QEvents += new QEventHandler ({2}.{3}.Receive);", compFrom.Name, portLink.FromPortName, compTo.Name, portLink.ToPortName);

                ComponentContext compCtxFrom = _ComponentContexts [compFrom.Name] as ComponentContext;
                ComponentContext compCtxTo   = _ComponentContexts [compTo.Name] as ComponentContext;
                LinkPorts(compCtxFrom, compCtxTo, portLink);
            }

            foreach (DictionaryEntry de in _PortContext)
            {
                IQPort port = de.Key as IQPort;
                port.QEvents += new QEventHandler(port_QEvents);
            }
        }
예제 #3
0
 protected void RaisePortRequested(PortCreatedHandler handler, string key, IQPort port)
 {
     if (handler != null)
     {
         handler(this, key, port);
     }
 }
        protected void AddPortLinkToPortContext(IQPort port, IPortLinkGlyph portLink)
        {
            if (!_PortContext.Contains (port))
            {
                _PortContext.Add (port, new ArrayList ());
            }

            ArrayList list = _PortContext [port] as ArrayList;
            list.Add (portLink);
        }
예제 #5
0
        protected void AddPortLinkToPortContext(IQPort port, IPortLinkGlyph portLink)
        {
            if (!_PortContext.Contains(port))
            {
                _PortContext.Add(port, new ArrayList());
            }

            ArrayList list = _PortContext [port] as ArrayList;

            list.Add(portLink);
        }
예제 #6
0
        protected void LinkPorts(ComponentContext ctxFrom, ComponentContext ctxTo, IPortLinkGlyph portLink)
        {
            string fromPortName = portLink.FromPortName;
            string toPortName   = portLink.ToPortName;

            IQPort portFrom = GetPort(ctxFrom, fromPortName);
            IQPort toPort   = GetPort(ctxTo, toPortName);

            portFrom.QEvents += new QEventHandler(toPort.Receive);

            AddPortLinkToPortContext(portFrom, portLink);
        }
예제 #7
0
        IQPort GetPort(ComponentContext ctx, string portName)
        {
            Type type = ctx.Hsm.GetType();

            System.Reflection.PropertyInfo propInfo = type.GetProperty(portName);
            if (propInfo == null)
            {
                throw new NullReferenceException("Port [" + portName + "] not found on Component " + ctx.ComponentName + " - " + ctx.Hsm);
            }
            object port  = propInfo.GetValue(ctx.Hsm, null);
            IQPort qport = port as IQPort;

            return(qport);
        }
예제 #8
0
        public override void PreInit(GQHSM parentHSM)
        {
            base.PreInit(parentHSM);
            if (IsMultiPort)
            {
                _port = (IQPort)_parentHSM.CreateMultiPort(Name);
            }
            else
            {
                _port = _parentHSM.CreatePort(Name);
            }

            _fullName = parentHSM.GetName() + "." + Name;
            parentHSM.RegisterPort(this);
        }
예제 #9
0
 public IQPort this[string key]
 {
     get
     {
         lock (_Ports.SyncRoot)
         {
             IQPort port = _Ports[key] as IQPort;
             if (null == port)
             {
                 CreatePort(key);
                 port = _Ports[key] as IQPort;
             }
             return(port);
         }
     }
 }
예제 #10
0
        private void port_QEvents(IQPort port, IQEvent ev)
        {
            foreach (IPortLinkGlyph portLink in _Ports)
            {
                portLink.Selected = false;
            }

            if (_PortContext.Contains(port))
            {
                ArrayList list = _PortContext [port] as ArrayList;
                foreach (IPortLinkGlyph portLink in list)
                {
                    _AppForm.Log(System.Drawing.Color.DeepSkyBlue, "Port: " + portLink.ToPortName + "->" + portLink.FromPortName + " ev: " + ev + "\n");
                    portLink.Selected = true;
                }
            }
            DoRefresh();
        }
예제 #11
0
파일: QPort.cs 프로젝트: klhurley/qf4net
 public void Receive(IQPort fromPort, IQEvent ev)
 {
     ev = new QEvent(_Name, _Key, ev.QSignal, ev.QData, ev.QSent);
     _Qhsm.AsyncDispatch(ev);
 }
예제 #12
0
 protected void RaisePortRequested(PortCreatedHandler handler, string key, IQPort port)
 {
     if (handler != null)
     {
         handler (this, key, port);
     }
 }
예제 #13
0
 protected virtual bool OnPortCreated(string key, IQPort port)
 {
     return(true);
 }
        private void port_QEvents(IQPort port, IQEvent ev)
        {
            foreach (IPortLinkGlyph portLink in _Ports)
            {
                portLink.Selected = false;
            }

            if (_PortContext.Contains (port))
            {
                ArrayList list = _PortContext [port] as ArrayList;
                foreach (IPortLinkGlyph portLink in list)
                {
                    _AppForm.Log (System.Drawing.Color.DeepSkyBlue, "Port: " + portLink.ToPortName + "->" + portLink.FromPortName + " ev: " + ev + "\n");
                    portLink.Selected = true;
                }
            }
            DoRefresh ();
        }
예제 #15
0
 protected void DoPortCreated(string key, IQPort port)
 {
     if (OnPortCreated (key, port))
     {
         RaisePortRequested (PortCreated, key, port);
     }
 }
예제 #16
0
 public void Receive(IQPort fromPort, IQEvent ev)
 {
     ev = new QEvent (_Name, _Key, ev.QSignal, ev.QData, ev.QSent);
     _Qhsm.AsyncDispatch (ev);
 }
예제 #17
0
 protected virtual bool OnPortCreated(string key, IQPort port)
 {
     return true;
 }