/// <summary> /// Main method that is invoked by SubmitJob Program /// </summary> /// <param name="args"></param> public static void Main(string[] args) { var getIp = GetLocalIpAddress(); getIp.Wait(); // try to connect to the NodeManager var jobRef = new JobRef(); var loader = new CoreLoader <Job>(args[0]); var userArgs = new string[args.Length - 1]; for (var i = 1; i < args.Length; i++) { userArgs[i - 1] = args[i]; } // setup the job reference jobRef.RequestedNodes = (int)loader.CallMethod("RequestedNodes", new object[] {}); jobRef.Username = GetUserName(); jobRef.PathToDll = args[0]; jobRef.FileName = Path.GetFileName(args[0]); Console.WriteLine(jobRef.FileName); jobRef.UserArgs = userArgs; // call the initial method loader.CallMethod("RunInitialTask", new object[] {}); var sj = new SubmitJob(_ipAddr, NetworkSendReceive.ServerPort, jobRef); Console.CancelKeyPress += sj.OnUserExit; }
public static void Main2(string[] args) { CoreLoader <Foo> foo = new CoreLoader <Foo>("PathToDllContainingFoo"); int x = (int)foo.GetProperty("MyIntegerProperty"); foo.CallMethod("MySimpleMethod", new object[] {}); var result = (string)foo.CallMethod( "MyLessSimpleMethod", new object[] { 1, "hello", 3.4 }); }
public override void Run() { int count = 0; while (!DoneSending) { JobEventArgs data; if (_messageQueue.TryDequeue(out data)) { _parent.Logger.Log("Job Sending Message"); switch (data.Protocol) { case JobEventArgs.MessageType.Id: _parent.Logger.Log("Sending Job Id"); SendMessage(new string[] { "job" }); break; case JobEventArgs.MessageType.Submit: _parent.Logger.Log("Sending Job"); // job in this context corresponds to job manager. var args = new List <string> { "job", JsonConvert.SerializeObject(_job) }; SendMessage(args.ToArray()); break; case JobEventArgs.MessageType.Results: var j = JArray.Parse(data.Args[1]); var userOut = JsonConvert.DeserializeObject <UserOutput>(j[0].ToString()); _parent.Logger.Log(userOut.ConsoleOutput); if (j.Count > 1) { for (var i = 1; i < j.Count; i++) { var result = JobResult.DeserializeString(j[i].ToString()); _loader.CallMethod("AddResult", new object[] { result }); } } count++; if (count == _job.RequestedNodes) { _loader.CallMethod("RunFinalTask", new object[] { }); _parent.Logger.Log("Done"); Proxy.QueueDataEvent(new JobEventArgs("shutdown")); Environment.Exit(0); } break; case JobEventArgs.MessageType.Shutdown: DoneSending = true; break; case JobEventArgs.MessageType.Quit: SendMessage(new string[] { "connectionquit" }); // hack to get final message to actually send... Task t = new Task(FlushSender); // this will actually wait forever... // unless given a timeout TODO find out why t.Wait(100); DoneSending = true; break; } } else { Thread.Sleep(100); } } }