Esempio n. 1
0
        private void transmitComposition(BinaryWriter bw)
        {
            Dictionary <string, string> properties;

            foreach (CompositionModelData cmData in TaskAssign.CompositionData.Models)
            {
                string mainLibrary = WorkspaceManager.GetCompositionModelMainLibrary(cmData.CompositionModel);
                properties                      = new Dictionary <string, string>();
                properties["modelId"]           = cmData.CompositionModel.guid;
                properties["linkableComponent"] = cmData.Model.className;
                properties["assemblyPath"]      = mainLibrary;
                properties["workingDirectory"]  = WorkspaceManager.GetCompositionModelDirectory(cmData.CompositionModel);
                PipeUtil.WriteCommand(bw, new PipeCommand("AddModel", properties));

                properties            = new Dictionary <string, string>();
                properties["modelId"] = cmData.CompositionModel.guid;
                if (cmData.PropertyValues != null)
                {
                    Dictionary <string, string> propertyValues = cmData.PropertyValues.Kvs;
                    foreach (ModelProperty property in cmData.ModelProperties)
                    {
                        switch (property.type)
                        {
                        case 4:
                            properties[property.key] = WorkspaceManager.GetLocalPath(propertyValues[property.key]);
                            break;

                        case 5:
                            properties[property.key] = WorkspaceManager.HomeDirectory + @"\" + propertyValues[property.key];
                            break;

                        default:
                            properties[property.key] = propertyValues[property.key];
                            break;
                        }
                    }
                }
                PipeUtil.WriteCommand(bw, new PipeCommand("SetModelProperties", properties));
            }

            foreach (CompositionLinkData link in TaskAssign.CompositionData.Links)
            {
                properties                     = new Dictionary <string, string>();
                properties["linkId"]           = link.CompositionLink.guid;
                properties["sourceModelId"]    = link.CompositionLink.sourceCmGuid;
                properties["targetModelId"]    = link.CompositionLink.targetCmGuid;
                properties["sourceQuantity"]   = link.CompositionLink.sourceQuantity;
                properties["targetQuantity"]   = link.CompositionLink.targetQuantity;
                properties["sourceElementSet"] = link.CompositionLink.sourceElementSet;
                properties["targetElementSet"] = link.CompositionLink.targetElementSet;
                PipeUtil.WriteCommand(bw, new PipeCommand("AddLink", properties));
            }

            properties = new Dictionary <string, string>();
            properties["triggerInvokeTime"]      = TaskAssign.TriggerInvokeTime;
            properties["progressReportInterval"] = progressReportInterval.ToString();
            /* TODO: make some attribute for it */
            properties["parallelized"] = "false";
            PipeUtil.WriteCommand(bw, new PipeCommand("SetSimulationProperties", properties));
        }
Esempio n. 2
0
        public void Run()
        {
            string taskGuid = TaskAssign.Task.guid;

            IsDied           = false;
            TaskState        = TaskState.Assigned;
            WorkspaceManager = new WorkspaceManager(taskGuid, taskWorkingDirectory + taskGuid);
            PipeName         = "OOCTaskPipe-" + taskGuid;
            logger           = new Logger(WorkspaceManager.LogDirectory + @"\taskManager.log");
            logger.Info("TaskManager initializing...");
            try
            {
                initWorkspace();
                prepareRunner();
                startPipeKeeper();
                TaskState = TaskState.Running;
            }
            catch (Exception e)
            {
                logger.Info("Failed to initialize task: " + e.ToString());
                TaskState = TaskState.Aborted;
                IsDied    = true;
            }
        }
Esempio n. 3
0
 private void startPipeKeeper()
 {
     pipeKeeper = new Thread(new ThreadStart(delegate()
     {
         logger.Info("Pipe keeper thread started.");
         try
         {
             if (runnerLifetime() == true)
             {
                 TaskState = TaskState.Finishing;
                 WorkspaceManager.CollectOutput();
                 TaskState = TaskState.Completed;
             }
             else
             {
                 WorkspaceManager.CollectOutput();
                 TaskState = TaskState.Aborted;
             }
         }
         catch (Exception e)
         {
             if (!isReleased)
             {
                 logger.Crit("Exception occured during task lifetime: " + e.ToString());
                 TaskState = TaskState.Aborted;
             }
         }
         finally
         {
             pipeServer.Close();
             pipeServer.Dispose();
         }
         IsDied = true;
     }));
     pipeKeeper.Start();
 }
Esempio n. 4
0
 private void initWorkspace()
 {
     WorkspaceManager.DeployComposition(TaskAssign.CompositionData, TaskAssign.InputFiles);
 }