Changeset 1776


Ignore:
Timestamp:
Aug 8, 2010, 1:54:28 PM (11 years ago)
Author:
kopal
Message:

some ExecutionEngine changes

Location:
trunk/CrypPlugins/WorkspaceManager
Files:
3 edited

Legend:

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

    r1770 r1776  
    7777            {
    7878                IsRunning = true;
    79                 int amountSchedulers = System.Environment.ProcessorCount * 2;
    80                 //amountSchedulers = 1;
     79                int amountSchedulers = System.Environment.ProcessorCount * 2;               
    8180
    8281                //Here we create n = "ProcessorsCount * 2" Gears4Net schedulers
     
    340339        {
    341340           
    342             //executionEngine.GuiLogMessage("HandleExecute for \"" + msg.PluginModel.Name + "\"", NotificationLevel.Debug);
     341
     342            if (!msg.PluginModel.WorkspaceModel.WorkspaceManagerEditor.isExecuting())
     343            {
     344                return;
     345            }
     346
     347            foreach (ConnectorModel connectorModel in msg.PluginModel.InputConnectors)
     348            {
     349                if (!connectorModel.IControl && (connectorModel.IsMandatory || connectorModel.InputConnections.Count > 0) && !connectorModel.HasData)
     350                {
     351                    return;
     352                }
     353            }
     354
     355            foreach (ConnectorModel connectorModel in msg.PluginModel.OutputConnectors)
     356            {
     357                if (!connectorModel.IControl)
     358                {
     359                    foreach (ConnectionModel connectionModel in connectorModel.OutputConnections)
     360                    {
     361                        if (connectionModel.To.HasData)
     362                        {
     363                            return;
     364                        }
     365                    }
     366                }
     367            }
     368
    343369            //Fill the plugins Inputs with data
    344370            foreach (ConnectorModel connectorModel in PluginModel.InputConnectors)
    345371            {
    346                 if (connectorModel.HasData)
    347                 {
    348                     try
     372                try
     373                {
     374                    if (connectorModel.HasData)
    349375                    {
    350376                        if (connectorModel.IsDynamic)
    351377                        {
    352378                            MethodInfo propertyInfo = PluginModel.Plugin.GetType().GetMethod(connectorModel.DynamicSetterName);
    353                             propertyInfo.Invoke(PluginModel.Plugin, new object[] { connectorModel.PropertyName, connectorModel.Data });
     379                            propertyInfo.Invoke(PluginModel.Plugin, new object[] { connectorModel.PropertyName, connectorModel.Data.value });
    354380                        }
    355381                        else
    356382                        {
    357383                            PropertyInfo propertyInfo = PluginModel.Plugin.GetType().GetProperty(connectorModel.PropertyName);
    358                             propertyInfo.SetValue(PluginModel.Plugin, connectorModel.Data, null);
     384                            propertyInfo.SetValue(PluginModel.Plugin, connectorModel.Data.value, null);
    359385                        }
    360 
    361                     }
    362                     catch (Exception ex)
    363                     {
    364                         this.PluginModel.WorkspaceModel.WorkspaceManagerEditor.GuiLogMessage("An error occured while setting value of connector \"" + connectorModel.Name + "\" of \"" + PluginModel + "\": " + ex.Message, NotificationLevel.Error);
    365                         this.PluginModel.State = PluginModelState.Error;
    366                         this.PluginModel.GuiNeedsUpdate = true;
    367                         return;
    368                     }
    369                 }
    370             }
    371 
     386                    }
     387                }
     388                catch (Exception ex)
     389                {
     390                    this.PluginModel.WorkspaceModel.WorkspaceManagerEditor.GuiLogMessage("An error occured while setting value of connector \"" + connectorModel.Name + "\" of \"" + PluginModel + "\": " + ex.Message, NotificationLevel.Error);
     391                    this.PluginModel.State = PluginModelState.Error;
     392                    this.PluginModel.GuiNeedsUpdate = true;
     393                    return;
     394                }
     395            }
     396           
    372397            msg.PluginModel.Plugin.Execute();
    373 
     398           
    374399            if (this.executionEngine.BenchmarkPlugins)
    375400            {
     
    387412                        connectionModel.Active = false;
    388413                        connectorModel.GuiNeedsUpdate = true;
    389 
    390                         if (!connectionModel.From.PluginModel.Startable || (connectionModel.From.PluginModel.Startable && connectionModel.From.PluginModel.RepeatStart))
    391                         {
    392                             connectionModel.From.PluginModel.checkExecutable(connectionModel.From.PluginModel.PluginProtocol);
    393                         }
    394                     }
    395                 }
    396             }             
     414                    }
     415                }
     416            }
     417           
     418           
     419
     420            foreach (ConnectorModel connectorModel in PluginModel.InputConnectors)
     421            {
     422                foreach (ConnectionModel connectionModel in connectorModel.InputConnections)
     423                {
     424                    if (!connectionModel.From.PluginModel.Startable || (connectionModel.From.PluginModel.Startable && connectionModel.From.PluginModel.RepeatStart))
     425                    {
     426                        MessageExecution message_exec = new MessageExecution();
     427                        message_exec.PluginModel = connectionModel.From.PluginModel;
     428                        connectionModel.From.PluginModel.PluginProtocol.BroadcastMessage(message_exec);
     429                    }
     430                }
     431            }
     432           
    397433        }
    398434     
  • trunk/CrypPlugins/WorkspaceManager/Model/ConnectorModel.cs

    r1770 r1776  
    2222using WorkspaceManager.View.Container;
    2323using System.Reflection;
     24using WorkspaceManager.Execution;
    2425
    2526namespace WorkspaceManager.Model
     
    180181        /// </summary>
    181182        [NonSerialized]
    182         public volatile object Data = null;
     183        public volatile Data Data = null;
    183184
    184185        /// <summary>
     
    219220
    220221                foreach (ConnectionModel connectionModel in this.OutputConnections)
    221                 {                   
     222                {
     223                    Data Data = new Data();
     224                    Data.value = data;
    222225                    connectionModel.To.HasData = true;
    223                     connectionModel.To.Data = data;
     226                    connectionModel.To.Data = Data;
    224227                    connectionModel.Active = true;
    225228                    connectionModel.GuiNeedsUpdate = true;
     
    230233                foreach (ConnectionModel connectionModel in this.OutputConnections)
    231234                {
    232                     connectionModel.To.PluginModel.checkExecutable(connectionModel.To.PluginModel.PluginProtocol);
     235                    MessageExecution msg = new MessageExecution();
     236                    msg.PluginModel = connectionModel.To.PluginModel;
     237                    connectionModel.To.PluginModel.PluginProtocol.BroadcastMessage(msg);
    233238                }
    234239            }
     
    267272               
    268273    }
     274
     275    public class Data
     276    {
     277        public volatile Object value;
     278    }
     279
    269280}
  • trunk/CrypPlugins/WorkspaceManager/Model/PluginModel.cs

    r1769 r1776  
    4444        private IPlugin plugin;         
    4545        private int imageIndex = 0;
     46        [NonSerialized]
    4647        private PluginModelState state = PluginModelState.Normal;
    4748        private string PluginTypeName = null;
     
    143144            this.OutputConnectors = new List<ConnectorModel>();
    144145        }
    145 
     146     
    146147        /// <summary>
    147148        /// The WorkspaceModel of this PluginModel
     
    301302        {
    302303            //Enter some Code which calls the paint method of the IPlugin
    303         }
    304 
    305         /// <summary>
    306         /// Checks wether this PluginModel is executable and if yes it broadcasts a execution message
    307         /// </summary>
    308         public void checkExecutable(ProtocolBase protocolBase)
    309         {
    310             if (!this.WorkspaceModel.WorkspaceManagerEditor.isExecuting())
    311             {
    312                 return;
    313             }
    314 
    315             MessageExecution msg;           
    316             foreach (ConnectorModel connectorModel in this.InputConnectors)
    317             {
    318                 if (!connectorModel.IControl && (connectorModel.IsMandatory || connectorModel.InputConnections.Count > 0) && !connectorModel.HasData)
    319                 {                   
    320                     return;
    321                 }               
    322             }
    323 
    324             foreach (ConnectorModel connectorModel in this.OutputConnectors)
    325             {
    326                 if (!connectorModel.IControl)
    327                 {
    328                     foreach(ConnectionModel connectionModel in connectorModel.OutputConnections)
    329                     {
    330                         if (connectionModel.To.HasData)
    331                         {
    332                             return;
    333                         }
    334                     }
    335                 }
    336             }
    337 
    338             msg = new MessageExecution();
    339             msg.PluginModel = this;
    340                
    341             //protocolBase is set at Startup of the ExecutionEngine
    342             //but it could be that we have an event before setting
    343             //of the protocl base (triggered by user clicking on
    344             //a plugins presentation (button or so))
    345             if (protocolBase != null && protocolBase.QueueLength == 0)
    346             {
    347                 protocolBase.BroadcastMessageReliably(msg);
    348             }
    349 
    350             return;
    351         }
     304        }       
    352305
    353306        /// <summary>
Note: See TracChangeset for help on using the changeset viewer.