Пример #1
0
        /// <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;
        }
Пример #2
0
        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 });
        }
Пример #3
0
        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);
                }
            }
        }