/// <summary> /// 删除指定任务 /// </summary> /// <param name="taskID"></param> public static string RemoveTask(string taskID) { SimTaskInfo simTaskInfo = new SimTaskInfo(); simTaskInfo.ID = taskID; try { CustomBinding customBinding = new CustomBinding("GZipHttpBinding"); using (ChannelFactory <ISimulationAgentService> channelFactory = new ChannelFactory <ISimulationAgentService>(customBinding, RemoteAddress)) { SetMaxItemsInObjectGraph(channelFactory); ISimulationAgentService proxy = channelFactory.CreateChannel(); LogText("GetSimTaskInfo"); simTaskInfo = proxy.RemoveTask(simTaskInfo); channelFactory.Close(); } } catch (System.Exception ex) { LogText("Exception : " + ex.Message); if (ex.InnerException != null) { LogText("Inner Exception : " + ex.InnerException.Message); } } return(simTaskInfo.MessageInfo); }
/// <summary> /// 移除任务 /// </summary> /// <param name="simTaskID"></param> public SimTaskInfo RemoveTask(SimTaskInfo request) { foreach (SimTaskInfo simTaskInfo in listSimTaskInfos) { if (simTaskInfo.ID == request.ID) { if (simTaskInfo.WorkerProcess != null && simTaskInfo.Flag != -1) { try { if (simTaskInfo.WorkerProcess.HasExited == false) { RunCmd("taskkill /im " + "eclipse.exe" + " /f "); } if (simTaskInfo.WorkerProcess.HasExited == true) { simTaskInfo.WorkerProcess.Dispose(); simTaskInfo.WorkerProcess = null; } } catch (Exception ex) { simTaskInfo.MessageInfo = ex.Message; } } simTaskInfo.Flag = -1; simTaskInfo.MessageInfo = "任务已经移除"; return(simTaskInfo); } } return(null); }
/// <summary> /// 获取任务 /// </summary> /// <param name="simTaskID"></param> /// <returns></returns> public SimTaskInfo GetSimTaskInfo(SimTaskInfo request) { foreach (SimTaskInfo simTaskInfo in listSimTaskInfos) { if (simTaskInfo.ID == request.ID && simTaskInfo.Flag != -1) { return(simTaskInfo); } } return(null); }
public static int GetTaskInfo(ref TaskInfo taskInfo) { int nStatus = 0; if (Client.SimulationAgent.RequestTask(taskInfo.WorkerIP, taskInfo.OwnerIP) == "Success") { SimTaskInfo simTaskInfo = Client.SimulationAgent.GetSimTaskInfo(taskInfo.ID); taskInfo.fromSimTaskInfo(simTaskInfo); } else { // 发生错误 nStatus = -1; } return(nStatus); }
/// <summary> /// 开始任务 /// </summary> /// <param name="RemoteAddress">远程服务地址,需要从client中获取</param> /// <param name="filePath">本地保存路径,不带文件名</param> /// <param name="fileName">需要下载的文件名(远程)</param> public static string StartTask(string taskID, string filePath, string dataName, string funcID, string taskType, string taskOwnerIP, string simulatorPath, string simulatorLicensePath, int simulationDays, string remoteDataPath) { string startTaskRet = "failed"; try { CustomBinding customBinding = new CustomBinding("GZipHttpBinding"); using (ChannelFactory <ISimulationAgentService> channelFactory = new ChannelFactory <ISimulationAgentService>(customBinding, RemoteAddress)) { SetMaxItemsInObjectGraph(channelFactory); ISimulationAgentService proxy = channelFactory.CreateChannel(); LogText("Start Task"); SimTaskInfo simTaskInfo = new SimTaskInfo(); simTaskInfo.ID = taskID; simTaskInfo.Flag = 0; simTaskInfo.OPath = filePath; simTaskInfo.Name = dataName; simTaskInfo.FuncID = funcID; simTaskInfo.TaskType = taskType; simTaskInfo.OwnerIP = taskOwnerIP; simTaskInfo.SimulatorPath = simulatorPath; simTaskInfo.SimulatorLicensePath = simulatorLicensePath; simTaskInfo.SimulationDays = simulationDays; simTaskInfo.RemoteDataPath = remoteDataPath; proxy.StartTask(simTaskInfo); startTaskRet = simTaskInfo.MessageInfo; channelFactory.Close(); } } catch (System.Exception ex) { LogText("Exception : " + ex.Message); if (ex.InnerException != null) { LogText("Inner Exception : " + ex.InnerException.Message); } } return(startTaskRet); }
public void fromSimTaskInfo(SimTaskInfo simTaskInfo) { ID = simTaskInfo.ID; Flag = simTaskInfo.Flag; Name = simTaskInfo.Name; Path = simTaskInfo.OPath; ResultPath = simTaskInfo.ResultPath; FuncID = simTaskInfo.FuncID; TaskType = simTaskInfo.TaskType; OwnerIP = simTaskInfo.OwnerIP; SimulatorPath = simTaskInfo.SimulatorPath; SimulatorLicensePath = simTaskInfo.SimulatorLicensePath; CompletePercent = simTaskInfo.CompletePercent; RemoteDataPath = simTaskInfo.RemoteDataPath; MessageInfo = simTaskInfo.MessageInfo; if (simTaskInfo.ProblemList != null) { ProblemList = new List <string>(); ProblemList.AddRange(simTaskInfo.ProblemList); } }
/// <summary> /// 添加任务, 并触发任务运行 /// </summary> /// <param name="simTaskInfo"></param> public void AddTask(SimTaskInfo simTaskInfo) { simTaskInfo.Flag = 1; simTaskInfo.MessageInfo = "排队中..."; lock (listSimTaskInfos) { listSimTaskInfos.Add(simTaskInfo); } #if false //这段代码在运行完一次计算后,再次点击运算会出现关于进程同步的异常 if (Monitor.TryEnter(listSimTaskInfos, 1000)) { listSimTaskInfos.Add(simTaskInfo); } else { Monitor.Exit(listSimTaskInfos); } #endif // 触发任务执行线程 LoadSimulationWorker(); }
// 开始执行任务 void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) { while (true) { Thread.Sleep(200); int completed = 0; for (int i = 0; i < listSimTaskInfos.Count; i++) { if (i < 0 || i > listSimTaskInfos.Count) { continue; } SimTaskInfo simTaskInfo = listSimTaskInfos[i]; // 计算在排队任务 if (simTaskInfo.Flag == 1) { SimulationWorker simulationWorker = new SimulationWorker(); simulationWorker.Run(ref simTaskInfo); } else if (simTaskInfo.Flag == -1) { // 移除被标记为删除的案例 listSimTaskInfos.RemoveAt(i); i--; } Thread.Sleep(10); completed++; } // 所有任务完成 if (completed == listSimTaskInfos.Count) { break; } } }
public void Run(ref SimTaskInfo simTaskInfo) { gSimTaskInfo = simTaskInfo; simTaskInfo.Flag = 2; simTaskInfo.MessageInfo = strRunning; try { // 调用Simulation,计算案例 Process p = new Process(); // 获取模拟器路径,不包含"eclipse.exe" string simulatorPath = simTaskInfo.SimulatorPath; int nPos = simulatorPath.LastIndexOf("eclipse.exe", StringComparison.CurrentCultureIgnoreCase); if (nPos > 0) { simulatorPath = simulatorPath.Substring(0, nPos - 1); } // 获取数据文件路径,不包含“name.data” string dataPath = simTaskInfo.RemoteDataPath; nPos = dataPath.LastIndexOf(simTaskInfo.Name, StringComparison.CurrentCultureIgnoreCase); if (nPos > 0) { dataPath = dataPath.Substring(0, nPos - 1); } // 获取数据文件名,不包含“.data” string dataName = simTaskInfo.Name; nPos = dataName.LastIndexOf(".data", StringComparison.CurrentCultureIgnoreCase); if (nPos > 0) { dataName = dataName.Substring(0, nPos); } string args = "\"" + simulatorPath + "\" \"" + simTaskInfo.SimulatorLicensePath + "\" \"" + dataPath + "\" \"" + dataName + "\""; Console.WriteLine("\n"); Console.WriteLine(args); Console.WriteLine("\n"); ProcessStartInfo psI = new ProcessStartInfo(@"ecl.bat", args); psI.WorkingDirectory = AppDomain.CurrentDomain.BaseDirectory; p.StartInfo = psI; psI.UseShellExecute = false; psI.RedirectStandardInput = true; psI.RedirectStandardOutput = true; psI.RedirectStandardError = true; psI.CreateNoWindow = true; p.StartInfo = psI; p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived); // 接收输出数据 p.ErrorDataReceived += new DataReceivedEventHandler(p_ErrorDataReceived); // 接收错误数据 p.EnableRaisingEvents = true; // 监视进程退出 p.Exited += new EventHandler(CmdProcess_Exited); // 注册进程结束事件 p.Start(); p.BeginOutputReadLine(); p.BeginErrorReadLine(); simTaskInfo.WorkerProcess = p; p.WaitForExit(); //等待进程结束 } catch (Exception ex) { Console.WriteLine(ex.Message); } }
/// <summary> /// 移除任务 /// </summary> /// <param name="simTaskID"></param> public SimTaskInfo RemoveTask(SimTaskInfo request) { return(simulationTaskManager.RemoveTask(request)); }
/// <summary> /// 获取任务 /// </summary> /// <param name="simTaskID"></param> public SimTaskInfo GetSimTaskInfo(SimTaskInfo request) { return(simulationTaskManager.GetSimTaskInfo(request)); }
/// <summary> /// 开始任务(添加到任务管理器列表) /// </summary> /// <param name="simTaskInfo"></param> public void StartTask(SimTaskInfo simTaskInfo) { simulationTaskManager.AddTask(simTaskInfo); }