Changeset 1713


Ignore:
Timestamp:
Jun 30, 2010, 1:22:53 PM (11 years ago)
Author:
kopal
Message:
  • some execution engine fixes
Location:
trunk/CrypPlugins/WorkspaceManager
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/WorkspaceManager/Execution/ExecutionEngine.cs

    r1700 r1713  
    346346            {
    347347                if (connectorModel.HasData)
    348                 {                   
     348                {
    349349                    try
    350350                    {
     
    359359                            propertyInfo.SetValue(PluginModel.Plugin, connectorModel.Data, null);
    360360                        }
     361
    361362                    }
    362363                    catch (Exception ex)
     
    367368                        return;
    368369                    }
     370                    finally
     371                    {
     372                        connectorModel.HasData = false;
     373                        connectorModel.Data = null;
     374                        foreach (ConnectionModel connectionModel in connectorModel.InputConnections)
     375                        {
     376                            connectionModel.Active = false;
     377                            connectorModel.GuiNeedsUpdate = true;
     378                        }
     379                    }
    369380                }
    370381            }
    371382           
    372             msg.PluginModel.Plugin.Execute();           
     383            msg.PluginModel.Plugin.Execute();         
    373384
    374385            if (this.executionEngine.BenchmarkPlugins)
     
    398409
    399410            thread = new System.Threading.Thread(this.Start);
    400             thread.SetApartmentState(System.Threading.ApartmentState.STA);
     411            thread.SetApartmentState(System.Threading.ApartmentState.MTA);
    401412                        thread.Name = name;
    402413           
     
    432443                        if (this.waitingProtocols.Count == 0)
    433444                            break;
     445
    434446                        protocol = this.waitingProtocols.Dequeue();
    435447
     
    440452                            {
    441453                                foreach (ConnectionModel connection in outputConnector.OutputConnections)
    442                                 {
    443                                    
    444                                     if (connection.To.PluginModel.PluginProtocol.QueueLength > 0 &&
    445                                         connection.To.PluginModel != pluginProtocol.PluginModel &&
     454                                {                                   
     455                                    if (connection.To.HasData &&
     456                                        connection.To.PluginModel != pluginProtocol.PluginModel &&
    446457                                        donotrun == false)
    447458                                    {                                           
  • trunk/CrypPlugins/WorkspaceManager/Model/ConnectorModel.cs

    r1711 r1713  
    3333        [NonSerialized]
    3434        private bool hasData = false;
    35        
     35
    3636        /// <summary>
    3737        /// The PluginModel this Connector belongs to
     
    163163                        connectionModel.To.Data = sender.GetType().GetProperty(propertyChangedEventArgs.PropertyName).GetValue(sender, null);
    164164                    }
    165                     connectionModel.To.HasData = true;
     165                    connectionModel.To.HasData = true;   
    166166                    connectionModel.Active = true;
     167                    connectionModel.GuiNeedsUpdate = true;
    167168                }
    168169
  • trunk/CrypPlugins/WorkspaceManager/Model/PluginModel.cs

    r1711 r1713  
    4343        private IPlugin plugin;         
    4444        private int imageIndex = 0;
    45         private PluginModelState state = PluginModelState.Normal;
     45        private PluginModelState state = PluginModelState.Normal;       
    4646        #endregion privates
    4747
     
    5353            get { return state; }
    5454            set { state = value; }
    55         }
     55        }     
    5656
    5757        /// <summary>
     
    248248
    249249        /// <summary>
    250         /// Checks wether this PluginModel is executable or not and sets the isExecutable bool
    251         ///
    252         /// There are 3 ways in that a plugin can be executable:
    253         ///     1. All mandatory inputs are set + all outputs are "free"
    254         ///     2. There are no mandatory inputs and at least one non-mandatory input is set + all outputs are "free"
    255         ///     3. There are no inputs + all outputs are "free"
     250        /// Checks wether this PluginModel is executable and if yes it broadcasts a execution message
    256251        /// </summary>
    257252        public void checkExecutable(ProtocolBase protocolBase)
    258         {
    259             //We do not execute Plugins with Errors
    260             if (this.State == PluginModelState.Error)
    261             {
    262                 return;
    263             }
    264            
    265             //First test if every mandatory Connector has data
    266             //or one non-mandatory input has data
     253        {                     
     254            MessageExecution msg;           
    267255            foreach (ConnectorModel connectorModel in this.InputConnectors)
    268256            {
    269257                if ((connectorModel.IsMandatory || connectorModel.InputConnections.Count > 0) && !connectorModel.HasData)
    270258                {
     259                    foreach (ConnectionModel connectionModel in connectorModel.InputConnections)
     260                    {
     261                        if (connectionModel.From.PluginModel.Startable)
     262                        {                           
     263                            msg = new MessageExecution();
     264                            msg.PluginModel = connectionModel.From.PluginModel;
     265                            connectionModel.From.PluginModel.pluginProtocol.BroadcastMessageReliably(msg);
     266                        }
     267                    }
    271268                    return;
    272269                }               
    273270            }
    274271
    275             MessageExecution msg = new MessageExecution();
     272            msg = new MessageExecution();
    276273            msg.PluginModel = this;
    277274               
Note: See TracChangeset for help on using the changeset viewer.