public async Task Verify(FileInfo kplModelFile, FileInfo outputFile, SimulatorSettings settings, ISimulatorProgressMonitor monitor) { this.settings = settings; this.monitor = monitor; await Task.Run(() => { try { monitor.Start(5, string.Format("Simulates the {0} model using the FLAME simulator...", kplModelFile.Name)); monitor.LogProgress(0, "Translate in the correspoding FLAME model..."); FileInfo tempFolder; TranslateModel(kplModelFile, outputFile, out tempFolder); monitor.LogProgress(2, "Generating the FLAME model..."); GenerateModel(new FileInfo(tempFolder + modelGeneratedFile)); monitor.LogProgress(3, "Compiling the FLAME model..."); CompileModel(tempFolder); Clean(tempFolder); monitor.LogProgress(4, "Simulate the FLAME model..."); Simulate(outputFile); monitor.Done("Finished the simulation process"); } catch (Exception e) { monitor.Terminate("Simulation failed: " + e.Message); } }); }
public async Task Verify(FileInfo kplModelFile, FileInfo outputFile, SimulatorSettings settings, ISimulatorProgressMonitor monitor) { this.settings = settings; await Task.Run(() => { try { monitor.Start(1, string.Format("Simulating the {0} model using the kPWorkbench simulator...", kplModelFile.Name)); monitor.LogProgress(0, "Performing simulation..."); Execute(kplModelFile, outputFile); monitor.Done("Finished the simulation process"); } catch (Exception e) { monitor.Terminate("Simulation failed: " + e.Message); } }); }
private void TranslateModel(FileInfo kplFileName, FileInfo outputPathName, out FileInfo tempFolder) { KpModel kpModel = null; try { kpModel = KP.FromKpl(kplFileName.FullName); } catch (KplParseException kplException) { new Exception(string.Format("Failed to parse input file {0}. Reason: {1}", kplFileName, kplException.Message)); } KPsystemXMLWriter kPsystemXML = new KPsystemXMLWriter(kpModel.KPsystem); try { Directory.CreateDirectory(outputPathName + "ite"); } catch (KplParseException kplException) { new Exception(string.Format("Failed to parse create directory {0}. Reason: {1}", kplFileName, kplException.Message)); } using (StreamWriter writer = new StreamWriter(outputPathName + modelGeneratedFile)) { writer.Write(kPsystemXML.ToXML()); } kPsystemXML.SaveCFiles(outputPathName.FullName); int i = 0; bool b; do { tempFolder = new FileInfo(i == 0 ? outputPathName + "tmp" : outputPathName + "tmp" + i); i++; b = Directory.Exists(tempFolder.FullName); } while (b); try { Directory.CreateDirectory(tempFolder.FullName); tempFolder = new FileInfo(tempFolder + @"/"); } catch (KplParseException kplException) { new Exception(string.Format("Failed to parse create directory {0}. Reason: {1}", kplFileName, kplException.Message)); } using (StreamWriter writer = new StreamWriter(tempFolder + modelGeneratedFile)) { writer.Write(kPsystemXML.ToXML()); } kPsystemXML.SaveCFiles(tempFolder.FullName); using (StreamWriter writer = new StreamWriter(outputPathName + @"ite/0.xml")) { writer.Write(kPsystemXML.ToAgentsInitialConfiguration()); } using (StreamWriter writer = new StreamWriter(outputPathName + @"ite/map.txt")) { writer.Write(kPsystemXML.MapObjectIds); } monitor.LogProgress(2, "KP model translated FLAME model successfully."); }