protected void RunTasks(object sender, EventArgs e) { //for (int x = 0; x != 1000; x++) { TaskMessage t = new TaskMessage (); t.LogReportingLevel = LogLevel.Verbatium; t.MessageId = Guid.NewGuid (); t.TaskId = Guid.NewGuid (); t.TransmisionDateTime = DateTime.Now; t.ScriptType = TaskScriptType.CSharp; _TaskQueue.Publish (t); //System.Threading.Thread.Sleep (10000); //} }
private static void _TaskQueue_OnReceivedMessage(object sender, TaskMessage args) { try { string hostname = Dns.GetHostName(); _ProgressQueue.Publish(new TaskProgressMessage { CurrentTime = DateTime.Now, PercentComplete = 0, StartTime = DateTime.Now, Status = TaskStatus.Arrived, TaskId = args.TaskId, MessageId = Guid.NewGuid(), TransmisionDateTime = DateTime.Now, Details = hostname }); switch (args.ScriptType) { case TaskScriptType.LoadWorker: bool good = false; Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); foreach (Assembly assembly in assemblies) { IEnumerable<Type> types = from x in assembly.GetTypes() where typeof (ITaskWorker).IsAssignableFrom(x) select x; foreach (Type type in types) { if (type.FullName.Trim() == args.TaskScript.Trim()) { var instance = Activator.CreateInstance(type) as ITaskWorker; if (instance != null) { instance.Progress += TaskProgress; instance.ErrorOccured += TaskErrorOccured; instance.Complete += TaskComplete; instance.Execute(args.TaskId); good = true; _ProgressQueue.Publish(new TaskProgressMessage { CurrentTime = DateTime.Now, PercentComplete = 0, StartTime = DateTime.Now, Status = TaskStatus.Starting, TaskId = args.TaskId, MessageId = Guid.NewGuid(), TransmisionDateTime = DateTime.Now, Details = hostname }); } } } } if (!good) { _ProgressQueue.Publish(new TaskProgressMessage { CurrentTime = DateTime.Now, PercentComplete = 0, StartTime = DateTime.Now, Status = TaskStatus.Failed, TaskId = args.TaskId, MessageId = Guid.NewGuid(), TransmisionDateTime = DateTime.Now, Details = "Could not find task: " + args.TaskScript }); } break; case TaskScriptType.CSharp: break; case TaskScriptType.Python: break; case TaskScriptType.Shell: break; } GC.Collect(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } }
private void BuildNetwork(double slat, double slon, double lat, double lon) { BasicNetwork network = null; var nn = Mds.GetCollectionQueryModel<NeuralNetwork>(Query.And(Query.EQ("StartPosition.X", slat), Query.EQ("StartPosition.Y", slon), Query.EQ("EndPosition.X", lat), Query.EQ("EndPosition.Y", lon))) .FirstOrDefault(); var tsk = Mds.GetCollectionQueryModel<RoverTask>( Query.And(Query.EQ("TrainingProperties.StartPosition.StartPosition.X", slat), Query.EQ("TrainingProperties.StartPosition.StartPosition.Y", slon), Query.EQ("TrainingProperties.StartPosition.EndPosition.X", lat), Query.EQ("TrainingProperties.StartPosition.EndPosition.Y", lon))).FirstOrDefault(); if (tsk != null && nn == null) return; if (nn == null && tsk == null) { var t = new TaskMessage { LogReportingLevel = LogLevel.Verbatium, MessageId = Guid.NewGuid(), ScriptType = TaskScriptType.LoadWorker, TaskScript = new RoverWorker().GetType().ToString(), TransmisionDateTime = DateTime.Now, TaskId = Guid.NewGuid() }; var col = Mds.DataBase.GetCollection<RoverTask>("RoverTask"); var task = new RoverTask { Status = (TaskTransport.TaskStatus) TaskStatus.Pending, TaskType = RoverTaskType.Train, Id = t.TaskId, TrainingProperties = new RoverTrainProperties { Id = Guid.NewGuid(), StartPosition = new Position(slat, slon), DestinationPosition = new Position(lat, lon) } }; col.Save(task); var q = new MessageQueue<TaskMessage>(false, _Connection); var x = 0; while (x != 10) { Thread.Sleep(10); DoEvents(); x++; } q.Publish(t); DoEvents(); } else { var fn = nn.Id.ToString(); lock (RobotContol.NetworkLock) { var rawbytes = Mds.OpenFile(nn.Id); File.WriteAllBytes(fn, rawbytes); network = (BasicNetwork) EncogDirectoryPersistence.LoadObject(new FileInfo(fn)); } var pilot = new NeuralRobot(network, true, SourceLocation, DestLocation); SourceData.Simulation = pilot.sim; DataContext = SourceData; DrawMap(); SourceData.Simulation.PositionChanged += Simulation_PositionChanged; pilot.ScorePilot(); File.Delete(fn); } }