示例#1
0
        /// <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);
        }
示例#2
0
        /// <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);
        }
示例#3
0
        /// <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);
        }
示例#4
0
        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);
        }
示例#5
0
        /// <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);
        }
示例#6
0
 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);
     }
 }
示例#7
0
        /// <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();
        }
示例#8
0
        // 开始执行任务
        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;
                }
            }
        }
示例#9
0
        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);
            }
        }
示例#10
0
 /// <summary>
 /// 移除任务
 /// </summary>
 /// <param name="simTaskID"></param>
 public SimTaskInfo RemoveTask(SimTaskInfo request)
 {
     return(simulationTaskManager.RemoveTask(request));
 }
示例#11
0
 /// <summary>
 /// 获取任务
 /// </summary>
 /// <param name="simTaskID"></param>
 public SimTaskInfo GetSimTaskInfo(SimTaskInfo request)
 {
     return(simulationTaskManager.GetSimTaskInfo(request));
 }
示例#12
0
 /// <summary>
 /// 开始任务(添加到任务管理器列表)
 /// </summary>
 /// <param name="simTaskInfo"></param>
 public void StartTask(SimTaskInfo simTaskInfo)
 {
     simulationTaskManager.AddTask(simTaskInfo);
 }