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(); } }
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); }