public VMListForm(MessageSendRecieve msr) { vms = new Dictionary <string, bool>(); this.msr = msr; InitializeComponent(); RefreshUI(); }
public static void PingServs(FormClient formClient) { Program.msgsWithHosts_Semaphore.WaitOne(); List <MessageSendRecieve> msgsWithHosts = new List <MessageSendRecieve>(); foreach (var host in Program.msgsWithHosts) { msgsWithHosts.Add(host); } Program.msgsWithHosts_Semaphore.Release(); for (int i = 0; i < msgsWithHosts.Count; i++) { MessageSendRecieve host = msgsWithHosts[i]; try { IPAddress ipAddr = IPAddress.Parse(host.IP); IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, portPingServers); Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); sender.Connect(ipEndPoint); Byte[] buf = new Byte[1]; sender.Send(buf); sender.Receive(buf); formClient.AppendOnOffImg(host.mqName, true); } catch (Exception) { formClient.AppendOnOffImg(host.mqName, false); } } }
private void WaitForVMList(object arg) { object[] args = (object[])arg; MessageSendRecieve msr = (MessageSendRecieve)args[0]; string msgID = (string)args[1]; VMRequestReturn vmList = msr.WaitForVMList(msgID, TimeSpan.FromMinutes(5)); if (vmList != null) { Dictionary<string, bool> vmMap = new Dictionary<string, bool>(); foreach (string vm in vmList.VMPaths) { vmMap[vm] = false; } foreach (string lockedVM in vmList.LockedVMs) { vmMap[lockedVM] = true; } Invoke(new MethodInvoker(delegate() { ShowVMList(vmMap); })); } else { Invoke(new MethodInvoker(delegate() { ShowVMList("error while getting list of vms"); })); } }
public static void SocketSend(MessageSendRecieve msg, string ip) { IPAddress ipAddr = IPAddress.Parse(ip); IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, portDispatcherServer); Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try { sender.Connect(ipEndPoint); SendMsg <MessageSendRecieve>(sender, msg); Byte[] buf = BinFormatter.ToBytes(false); sender.Receive(buf); if (BinFormatter.FromBytes <bool>(buf)) { Console.WriteLine("Server connected"); } else { Console.WriteLine("Server denied"); } sender.Shutdown(SocketShutdown.Both); sender.Close(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } }
public void TestNullDirPathInJob() { sut.EmulateServiceStart(null); List <ExecutablePackage> packages = new List <ExecutablePackage>(); ExecutablePackage package = new ExecutablePackage("mock.xml", null, "TestJobManager.dll", "TestJobManager.MockJobRunner", new SerializableDictionary <string, string>(), new SerializableDictionary <string, string>()); packages.Add(package); Job j1 = new Job("nobuildpath", "MockVMConfig1", new SerializableDictionary <string, string>(), packages, new SerializableDictionary <string, string>()); MessageSendRecieve msr = new MessageSendRecieve(new DirectoryInfo(inboxPath), new DirectoryInfo(outboxPath)); DateTime queuedJobsDateTime = DateTime.Now; string job1msgID = msr.QueueJob(j1); //wait for job completion JobCompleted jobCompleted = msr.WaitForJobCompletion(job1msgID, DEFAULT_WAIT); sut.EmulateServiceStop(); Assert.That(jobCompleted, Is.Not.Null); Assert.That(jobCompleted.Job, Is.Not.Null); Assert.That(jobCompleted.Result, Is.Not.Null); Assert.That(jobCompleted.Result.Errors, Is.Not.Empty); VerifyStringInList(jobCompleted.Result.Errors, "Exception: Value cannot be null.\nParameter name: path"); VerifyAppLogDoesNotContain(EventLogEntryType.Warning, testStart); VerifyAppLogDoesNotContain(EventLogEntryType.Error, testStart); }
public void TestNullISOs() { sut.EmulateServiceStart(null); DirectoryInfo tempDir = new DirectoryInfo(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "tempdll")); tempDir.Create(); try { List <ExecutablePackage> packages = new List <ExecutablePackage>(); ExecutablePackage package = new ExecutablePackage("mock.xml", tempDir.FullName, "TestJobManager.dll", "TestJobManager.MockJobRunner", new SerializableDictionary <string, string>(), new SerializableDictionary <string, string>()); packages.Add(package); Job j1 = new Job(null, "MockVMConfig1", null, packages, new SerializableDictionary <string, string>()); MessageSendRecieve msr = new MessageSendRecieve(new DirectoryInfo(inboxPath), new DirectoryInfo(outboxPath)); DateTime queuedJobsDateTime = DateTime.Now; string job1msgID = msr.QueueJob(j1); //wait for job 1 to start Assert.True(WaitForVMAction(vmHash["MockVMName1"], VMActionType.Start, queuedJobsDateTime, TimeSpan.FromSeconds(5))); //send request for job 1 AutomationMessage m = new AutomationMessage(new SimpleRequest(SimpleRequests.JobRequest)); m.From = "MockVMName1"; Job j = msr.WaitForJob(msr.Send(m), DEFAULT_WAIT); Assert.That(j, Is.Not.Null); Assert.That(j.JobID, Is.EqualTo(j1.JobID)); //send finished for job 1 DateTime finishedSentDateTime = DateTime.Now; JobResult jr = new JobResult(); jr.Completed = true; ExecutionResult er = new ExecutionResult(); er.Success = true; jr.ExecutionResults.Add(er); msr.ReportJobStatus(new JobCompleted(j1, jr)); //wait for job completion JobCompleted jobCompleted = msr.WaitForJobCompletion(job1msgID, DEFAULT_WAIT); sut.EmulateServiceStop(); VerifyAppLogDoesNotContain(EventLogEntryType.Warning, testStart); VerifyAppLogDoesNotContain(EventLogEntryType.Error, testStart); Assert.That(jobCompleted, Is.Not.Null); Assert.That(jobCompleted.Job, Is.Not.Null); Assert.That(jobCompleted.Result, Is.Not.Null); Assert.That(jobCompleted.Result.Errors, Is.Empty); Assert.That(jobCompleted.Result.Success, Is.True); Assert.That(jobCompleted.Result.Completed, Is.True); } finally { tempDir.Delete(true); } }
public void RunDependentJob() { sut.EmulateServiceStart(null); DirectoryInfo tempDir = new DirectoryInfo(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "tempdll")); tempDir.Create(); try { List <ExecutablePackage> packages = new List <ExecutablePackage>(); ExecutablePackage package = new ExecutablePackage("mock.xml", tempDir.FullName, "TestJobManager.dll", "TestJobManager.MockJobRunner", new SerializableDictionary <string, string>(), new SerializableDictionary <string, string>()); packages.Add(package); Job j1 = new Job("nobuildpath", "MockVMConfig1", new SerializableDictionary <string, string>(), packages, new SerializableDictionary <string, string>()); Job j2 = new Job("nobuildpath", "MockVMConfig2", new SerializableDictionary <string, string>(), packages, new SerializableDictionary <string, string>()); j2.DependsOnJobIds.Add(j1.JobID); MessageSendRecieve msr = new MessageSendRecieve(new DirectoryInfo(inboxPath), new DirectoryInfo(outboxPath)); DateTime queuedJobsDateTime = DateTime.Now; string job2msgID = msr.QueueJob(j2); string job1msgID = msr.QueueJob(j1); //wait for job 1 to start Assert.True(WaitForVMAction(vmHash["MockVMName1"], VMActionType.Start, queuedJobsDateTime, TimeSpan.FromSeconds(10))); //send request for job 1 AutomationMessage m = new AutomationMessage(new SimpleRequest(SimpleRequests.JobRequest)); m.From = "MockVMName1"; Job j = msr.WaitForJob(msr.Send(m), DEFAULT_WAIT); Assert.That(j, Is.Not.Null); //send finished for job 1 DateTime finishedSentDateTime = DateTime.Now; msr.ReportJobStatus(new JobCompleted(j1, new JobResult())); //wait for job 2 to start Assert.True(WaitForVMAction(vmHash["MockVMName2"], VMActionType.Start, finishedSentDateTime, TimeSpan.FromSeconds(10))); //send request for job 2 m = new AutomationMessage(new SimpleRequest(SimpleRequests.JobRequest)); m.From = "MockVMName2"; j = msr.WaitForJob(msr.Send(m), DEFAULT_WAIT); Assert.That(j, Is.Not.Null); //send finished for job2 msr.ReportJobStatus(new JobCompleted(j2, new JobResult())); Assert.That(msr.WaitForJobCompletion(job1msgID, DEFAULT_WAIT), Is.Not.Null); Assert.That(msr.WaitForJobCompletion(job2msgID, DEFAULT_WAIT), Is.Not.Null); sut.EmulateServiceStop(); VerifyAppLogDoesNotContain(EventLogEntryType.Warning, testStart); VerifyAppLogDoesNotContain(EventLogEntryType.Error, testStart); VerifyMockVMActionInvoked(vmHash["MockVMName1"], VMActionType.RevertToNamedSnapshot, "Snapshot1"); VerifyMockVMActionInvoked(vmHash["MockVMName2"], VMActionType.RevertToNamedSnapshot, "Snapshot2"); } finally { tempDir.Delete(true); } }
private ListViewItem addServInLvServs(MessageSendRecieve serv, bool subscribed) { ListViewItem item = new ListViewItem(new string[] { " " + serv.mqName }); item.Tag = serv.mqName; item.SubItems[0].Tag = subscribed; item.StateImageIndex = 0; item.ImageIndex = (subscribed) ? 0 : 1; lvServs.Items.Add(item); return(item); }
public void Subscribe(MessageSendRecieve sub) { try { RMQS.Add(new RabbitMQClient(sub)); RMQS[RMQS.Count - 1].consumer.Received += sender; } catch (Exception ex) { MessageBox.Show(ex.Message + " in " + ex.TargetSite); } }
public static async Task SocketRecieve(CancellationToken ct) { Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); sender.Bind(new IPEndPoint(IPAddress.Any, portDispatcherServer)); sender.Listen(10); while (!ct.IsCancellationRequested) { MessageSendRecieve msg = new MessageSendRecieve(); try { Socket receiver = sender.Accept(); msg = RecieveMsg <MessageSendRecieve>(receiver); msg.IP = (receiver.RemoteEndPoint as IPEndPoint).Address.ToString(); Program.msgsWithHosts_Semaphore.WaitOne(); bool nameRepeats = false; for (int i = 0; i < Program.msgsWithHosts.Count && !nameRepeats; i++) { nameRepeats = Program.msgsWithHosts[i].mqName == msg.mqName; } Program.msgsWithHosts_Semaphore.Release(); if (!nameRepeats) { receiver.Send(BinFormatter.ToBytes <bool>(true)); } else { Console.WriteLine($"Server {msg.mqIP} denied"); receiver.Send(BinFormatter.ToBytes <bool>(false)); receiver.Shutdown(SocketShutdown.Both); receiver.Close(); break; } receiver.Shutdown(SocketShutdown.Both); receiver.Close(); Program.msgsWithHosts_Semaphore.WaitOne(); Program.msgsWithHosts.Add(msg); Console.WriteLine("New server connected"); Program.msgsWithHosts_Semaphore.Release(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } }
static void Main(string[] args) { var pingReply_cts = new CancellationToken(); Task.Run(() => SocketServer.pingReply(pingReply_cts)); MessageSendRecieve msg = new MessageSendRecieve(null, rabbitMqIp, rabbitMqName, username, password); //try { using (mq = new RabbitMQServer(msg.mqIP, msg.mqName, msg.login, msg.password)) using (INewsReader reader = new WebhoseReader()) { SocketServer.SocketSend(msg, dispatcherIp); mq.MessageSend += Pr; reader.NewsReceived += NewNewsReceived; reader.Start(); Console.WriteLine("Write \"Exit\" to finish"); string input = Console.ReadLine(); while (input.ToUpper() != "EXIT") { if (input.ToUpper() == "GET") { reader.GetNews(); } if (input.ToUpper() == "GETALL") { reader.GetAllNews(); } if (input.ToUpper() == "GETSOME") { reader.GetSomeNews(); } if (input.ToUpper() == "REG") { SocketServer.SocketSend(msg, dispatcherIp); } input = Console.ReadLine(); } } } /*catch(Exception ex) * { * Console.WriteLine(ex.Message + " in " + ex.TargetSite); * Console.ReadKey(); * }*/ }
private void InitializeOurMQ() { string mqIp = ConfigManager.Get("rabbitMqIp"); string mqName = ConfigManager.Get("rabbitMqName"); string mqLog = ConfigManager.Get("rabbitMqNLogin"); string mqPass = ConfigManager.Get("rabbitMqPassword"); try { MessageSendRecieve ourMqMessage = new MessageSendRecieve(null, mqIp, mqName, mqLog, mqPass); ourMQ = new RabbitMQClient(ourMqMessage); ourMQ.consumer.Received += sender; } catch (Exception ex) { MessageBox.Show("rabbitMq doesn't answer"); } }
private void WaitForResponses(object arg) { object[] args = (object[])arg; MessageSendRecieve msr = (MessageSendRecieve)args[0]; string msgID = (string)args[1]; JobReportReturn jr = msr.WaitForStatus(msgID, TimeSpan.FromMinutes(1)); if (jr != null) { Invoke(new MethodInvoker(delegate() { listViewStatus.BeginUpdate(); })); foreach (Job j in jr.Jobs.Keys) { JobStatus js = jr.Jobs[j]; FullJob fj = new FullJob(j, js); Invoke(new MethodInvoker(delegate() { ListViewItem lvi = listViewStatus.Items.Add(new ListViewItem(j.StartDate.ToString("yyyy/MM/dd HH:mm:ss"))); lvi.SubItems.Add(j.Configuration.ToString()); lvi.SubItems.Add(js.State.ToString()); if (js.Result != null) { lvi.SubItems.Add(js.Result.Success ? "Yes" : "No"); } else { lvi.SubItems.Add("N/A"); } lvi.SubItems.Add(j.JobXML); if (js.Result != null && js.Result.Errors != null && js.Result.Errors.Count > 0) { lvi.SubItems.Add(js.Result.Errors[0]); } else { lvi.SubItems.Add(String.Empty); } lvi.Tag = fj; })); } Invoke(new MethodInvoker(delegate() { listViewStatus.EndUpdate(); })); } Invoke(new MethodInvoker(delegate() { button1.Enabled = true; })); }
public void Unsubscribe(MessageSendRecieve Unsub) { try { for (int i = RMQS.Count - 1; i >= 0; i--) { var mq = RMQS[i]; if (mq.serv.mqName == Unsub.mqName) { RMQS.Remove(mq); mq.Dispose(); } } } catch (Exception ex) { MessageBox.Show(ex.Message + " in " + ex.TargetSite); } }
public static async Task ServersListSend(CancellationToken ct) { Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); sender.Bind(new IPEndPoint(IPAddress.Any, portDispatcherClient)); sender.Listen(10); while (!ct.IsCancellationRequested) { try { Socket handler = sender.Accept(); Program.msgsWithHosts_Semaphore.WaitOne(); int serversCount = Program.msgsWithHosts.Count; MessageSendRecieve[] servers = new MessageSendRecieve[serversCount]; if (serversCount != 0) { int i = 0; foreach (var elem in Program.msgsWithHosts) { MessageSendRecieve msg = elem; servers[i] = msg; i++; } SendMsg <MessageSendRecieve[]>(handler, servers); Console.WriteLine("Server list send"); } else { byte[] byteSet = BinFormatter.ToBytes <int>(0); handler.Send(byteSet); } Program.msgsWithHosts_Semaphore.Release(); handler.Shutdown(SocketShutdown.Both); handler.Close(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } }
public RabbitMQClient(MessageSendRecieve serv, string queueName = "") { this.serv = serv; factory = new ConnectionFactory() { UserName = serv.login, Password = serv.password, VirtualHost = "/", HostName = serv.mqIP, Port = 5672 }; connection = factory.CreateConnection(); channel = connection.CreateModel(); channel.ExchangeDeclare(exchange: serv.mqName, type: "fanout"); this.queueName = (queueName == "")?channel.QueueDeclare(durable: true, exclusive: false, autoDelete: false).QueueName:queueName; channel.QueueBind(queue: this.queueName, exchange: serv.mqName, routingKey: ""); consumer = new EventingBasicConsumer(channel); channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumer); }
public static MessageSendRecieve[] RecieveServersList() { MessageSendRecieve[] servers = null; IPAddress ipAddr = IPAddress.Parse(dispatcherIp); IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, portDispatcherClient); Socket receiver = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); receiver.Connect(ipEndPoint); try { servers = ReceiveMsg <MessageSendRecieve[]>(receiver); } catch (FormatException) { servers = new MessageSendRecieve[0]; } receiver.Shutdown(SocketShutdown.Both); receiver.Close(); return(servers); }
public void TestNullConfiguration() { sut.EmulateServiceStart(null); Job j1 = new Job("abc", null, new SerializableDictionary <string, string>(), new List <ExecutablePackage>(), new SerializableDictionary <string, string>()); MessageSendRecieve msr = new MessageSendRecieve(new DirectoryInfo(inboxPath), new DirectoryInfo(outboxPath)); DateTime queuedJobsDateTime = DateTime.Now; string job1msgID = msr.QueueJob(j1); //wait for job completion JobCompleted jobCompleted = msr.WaitForJobCompletion(job1msgID, DEFAULT_WAIT); sut.EmulateServiceStop(); VerifyAppLogDoesNotContain(EventLogEntryType.Warning, testStart); VerifyAppLogDoesNotContain(EventLogEntryType.Error, testStart); Assert.That(jobCompleted, Is.Not.Null); Assert.That(jobCompleted.Job, Is.Not.Null); Assert.That(jobCompleted.Result, Is.Not.Null); Assert.That(jobCompleted.Result.Errors, Is.Not.Empty); VerifyStringInList(jobCompleted.Result.Errors, "Configuration cannot be null or empty"); }
public void TestNullPackageList() { sut.EmulateServiceStart(null); Job j1 = new Job("nobuildpath", "MockVMConfig1", new SerializableDictionary <string, string>(), null, new SerializableDictionary <string, string>()); MessageSendRecieve msr = new MessageSendRecieve(new DirectoryInfo(inboxPath), new DirectoryInfo(outboxPath)); DateTime queuedJobsDateTime = DateTime.Now; string job1msgID = msr.QueueJob(j1); //wait for job completion JobCompleted jobCompleted = msr.WaitForJobCompletion(job1msgID, DEFAULT_WAIT); sut.EmulateServiceStop(); VerifyAppLogDoesNotContain(EventLogEntryType.Warning, testStart); VerifyAppLogDoesNotContain(EventLogEntryType.Error, testStart); Assert.That(jobCompleted, Is.Not.Null); Assert.That(jobCompleted.Job, Is.Not.Null); Assert.That(jobCompleted.Result, Is.Not.Null); Assert.That(jobCompleted.Result.Errors, Is.Not.Empty); VerifyStringInList(jobCompleted.Result.Errors, "Job does not have any packages defined"); }
public void Run() { try { FileInfo mapNetBatchFile = new FileInfo(Path.Combine(Utilities.ExecutingAssembly.Directory.FullName, "map.bat")); //if the network drive is disconected, then we will be unable to get to the server inbox, in which case we should try to remap if (!AppConfig.ServerInbox.Exists && mapNetBatchFile.Exists) { using (System.Diagnostics.Process p = new System.Diagnostics.Process()) { p.StartInfo.WorkingDirectory = mapNetBatchFile.Directory.FullName; p.StartInfo.FileName = mapNetBatchFile.Name; p.StartInfo.CreateNoWindow = true; p.StartInfo.UseShellExecute = true; p.Start(); p.WaitForExit(); } } int packageToRun = 0; JobResult result = new JobResult(); result.Completed = true; //string sendQueueName = @"FormatName:DIRECT=OS:hammerbuildvm\Private$\jobmanager"; //string sendQueueName = @"FormatName:DIRECT=OS:ryanadams2\Private$\test2"; //jci.LogString("Connecting to Job Manager receive queue (" + sendQueueName + ")"); MessageSendRecieve msr = new MessageSendRecieve(AppConfig.ServerInbox, AppConfig.ServerOutbox); //jci.LogString("Permission = " + msr.RemoteMessageQueue.AccessMode.ToString()); //look for an existing job to run/continue before getting a new job from the server FileInfo jobXML = new FileInfo(Path.Combine(Utilities.ExecutingAssembly.Directory.FullName, "job.xml")); if (jobXML.Exists) { using (TextReader tr = new StreamReader(jobXML.FullName)) { j = XMLSerializable.FromXML <Job>(tr.ReadToEnd()); if (j.Properties.ContainsKey("PackageToRun")) { packageToRun = Int32.Parse(j.Properties["PackageToRun"]); } } try { //rename the job file so the next run doesn't automatically use it. The job.xml file will be put back //as part of jci.StartupOnNextRun if it is meant to be continued after a restart string lastFile = jobXML.FullName + ".old"; if (File.Exists(lastFile)) { File.Delete(lastFile); } File.Move(jobXML.FullName, lastFile); } catch (Exception ex) { //if the delete fails lets log it, but it isn't critical so let's eat the exception LogString("Could not delete existing job.xml file: " + ex.ToString()); } //look for an existing JobResult to pull in FileInfo jobResultXML = new FileInfo(Path.Combine(Utilities.ExecutingAssembly.Directory.FullName, "jobresult.xml")); if (jobResultXML.Exists) { try { using (TextReader tr = new StreamReader(jobResultXML.FullName)) { result = XMLSerializable.FromXML <JobResult>(tr.ReadToEnd()); } } catch (Exception ex) { //log, but eat it LogString(ex.ToString()); } } } else { LogString("Requesting Jobs from Job Manager"); string messageID = msr.RequestJob(); LogString("Sent request with message id: " + messageID); LogString("Waiting for Job response from Job Manager"); j = msr.WaitForJob(messageID, DEFAULT_JOB_WAIT); if (j == null) { LogString("No Jobs Available"); return; } try { LogString("Found Job: " + j.JobID); if (baseDir.Exists) { baseDir.Delete(true); //TODO wait for files to be deleted? } baseDir.Create(); List <string> keys = new List <string>(j.ISOs.Keys); foreach (string isoName in keys) { FileInfo isoPath = new FileInfo(j.ISOs[isoName]); string destPath = Path.Combine(Utilities.ExecutingAssembly.Directory.FullName, isoPath.Name); LogString("Copying ISO from \"" + isoPath.Directory.FullName + "\" to \"" + destPath + "\""); isoPath.CopyTo(destPath); j.ISOs[isoName] = destPath; } if (j.Properties == null) { j.Properties = new SerializableDictionary <string, string>(); } } catch (Exception ex) { LogString(ex.ToString()); result.Completed = false; ExecutionResult er = new ExecutionResult(ex.ToString(), null); result.ExecutionResults.Add(er); Logger.Instance.Pause(); result.Logs.Add(FileData.FromFile(new FileInfo(Logger.Instance.FileName))); Logger.Instance.Resume(); LogString("Sending Job Result"); msr.ReportJobStatus(new JobCompleted(j, result)); LogString("Job Result Sent"); return; } } if (j.Packages.Count == 0) { Logger.Instance.Pause(); result.Logs.Add(FileData.FromFile(new FileInfo(Logger.Instance.FileName))); Logger.Instance.Resume(); } while (packageToRun < j.Packages.Count) { runningPackageDir = new DirectoryInfo(Path.Combine(baseDir.FullName, packageToRun.ToString())); ExecutablePackage ep = j.Packages[packageToRun]; runningPackage = ep; ExecutionResult er = new ExecutionResult(); try { if (!ep.ContentDirectory.ToLower().Equals(runningPackageDir.FullName.ToLower())) { if (runningPackageDir.Exists) { runningPackageDir.Delete(true); } runningPackageDir.Create(); LogString("Copying data from \"" + ep.ContentDirectory + "\" to \"" + runningPackageDir.FullName + "\""); DirectoryData.FromDirectory(new DirectoryInfo(ep.ContentDirectory)).DumpContentsToDir(runningPackageDir); ep.ContentDirectory = runningPackageDir.FullName; } LogString("Loading external test DLL: " + ep.JobRunnerDLLName + " , " + ep.JobRunnerClassName); JobRunner jr = LoadJobRunner(ep.JobRunnerClassName, Path.Combine(runningPackageDir.FullName, ep.JobRunnerDLLName)); LogString("Executing Execute() method on external DLL"); er = jr.Execute(this); } catch (Exception ex) { LogString(ex.ToString()); result.Completed = false; er = new ExecutionResult(ex.ToString(), null); } Logger.Instance.Pause(); result.Logs.Add(FileData.FromFile(new FileInfo(Logger.Instance.FileName))); Logger.Instance.Resume(); if (er != null) { result.ExecutionResults.Add(er); } //lets save the current job result using (TextWriter tw = new StreamWriter(Path.Combine(Utilities.ExecutingAssembly.Directory.FullName, "jobresult.xml"), false)) { tw.Write(result.ToXML()); } if (er == null) { //The automation is likely not finished, the computer is likely going to reboot and //we want this execution to continue after reboot so we should exit now instead of going to the next package. //the executable package should have already called startuponnextrun return; } if (!er.Success) { //stop on first error break; } packageToRun++; j.Properties["PackageToRun"] = packageToRun.ToString(); if (er.Success && er.RestartAfter) { StartupOnNextRun(); LogString("Restarting ..."); system.Shutdown(true); return; } } LogString("Sending Job Result"); msr.ReportJobStatus(new JobCompleted(j, result)); LogString("Job Result Sent"); //cleanup if (File.Exists(Path.Combine(Utilities.ExecutingAssembly.Directory.FullName, "jobresult.xml"))) { File.Delete(Path.Combine(Utilities.ExecutingAssembly.Directory.FullName, "jobresult.xml")); } if (ShutdownOnCompletion) { LogString("Shuting Down ..."); system.Shutdown(false); //so, lets exit the program System.Windows.Forms.Application.Exit(); } } catch (ThreadAbortException) { //eat it, get out right away. Program is exiting or user has stopped automation return; } catch (Exception e) { LogString("Exception in thread: " + e.ToString()); return; } }
public SaveMq(MessageSendRecieve messageSendRecieve, string mqName) { this.messageSendRecieve = messageSendRecieve; this.mqName = mqName; }
public Form1() { InitializeComponent(); msr = new MessageSendRecieve(AppConfig.ServerInbox, AppConfig.ServerOutbox); }