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)); }
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; } }
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(); }
private void initWorkspace() { WorkspaceManager.DeployComposition(TaskAssign.CompositionData, TaskAssign.InputFiles); }