示例#1
0
        private static void Main(string[] args)
        {
            try
            {
                var json          = Utils.GetFileContent(DeploymentManager.WorkerType, "config.json");
                var sessionConfig = JsonConvert.DeserializeObject <SessionConfig>(json);
                var workerConfig  = WorkerConfig.ParseArguments(args);

                // Prepare Logger
                var logFileName = workerConfig.LogFile;
                if (string.IsNullOrEmpty(logFileName))
                {
                    logFileName = Path.Combine(Environment.CurrentDirectory, $"{workerConfig.WorkerId}.log");
                }

                Log.Init(logFileName);
                Log.Print(LogLevel.Debug, $"Opened logfile {logFileName}");

                AppDomain.CurrentDomain.UnhandledException += (sender, eventArgs) =>
                {
                    Log.Print(LogLevel.Fatal, eventArgs.ExceptionObject.ToString());

                    if (eventArgs.IsTerminating)
                    {
                        Log.Shutdown();
                    }
                };

                // Load GeneratedCode assembly.
                var generatedCode = Assembly.Load("GeneratedCode");
                Log.Print(LogLevel.Debug, $"Loaded generated code from {generatedCode.Location}");

                // Start deployment manager.
                var deploymentManager = new DeploymentManager(workerConfig, sessionConfig);
                deploymentManager.ObserveDeployments();
            }
            catch (Exception e)
            {
                Log.Print(LogLevel.Debug, $"Failed to run deployment manager with exception: {e.Message}\n{e.StackTrace}");
            }
            finally
            {
                Log.Shutdown();
            }
        }
示例#2
0
        public static WorkerConfig ParseArguments(ICollection <string> args)
        {
            var options   = new WorkerConfig();
            var optionSet = new OptionSet
            {
                {
                    "receptionist-host=", "REQUIRED: The host of the receptionist that the deployment manager connects to",
                    r => options.ReceptionistHost = r
                },
                {
                    "receptionist-port=", "REQUIRED: The port of the receptionist that the deployment manager connects to",
                    r => options.ReceptionistPort = ushort.Parse(r)
                },
                {
                    "worker-id=", "REQUIRED: The id of the deployment manager",
                    w => options.WorkerId = w
                },
                {
                    "log-file=", "REQUIRED: Path to the log file",
                    l => options.LogFile = l
                },
                {
                    "project-name=", "REQUIRED: The name of the SpatialOS project",
                    p => options.ProjectName = p
                },
                {
                    "assembly-name=", "REQUIRED: The name of the assembly",
                    a => options.AssemblyName = a
                },
                {
                    "h|help", "show help",
                    h => options.ShouldShowHelp = h != null
                }
            };

            optionSet.Parse(args);

            using (var sw = new StringWriter())
            {
                optionSet.WriteOptionDescriptions(sw);
                options.HelpText = sw.ToString();
            }

            return(options);
        }