static void Main(string[] args) { var serverHostName = ""; var serverPortNumber = 0; var collectionInterval = 1000; var zmiName = ""; Parser.Default.ParseArguments <Options>(args) .WithParsed(opts => { serverHostName = opts.ServerHostName; serverPortNumber = opts.ServerPortNumber; zmiName = opts.ZmiName; _contactsFilename = opts.ContactsFileName; using var file = File.OpenRead(opts.IniFileName); using var stream = new StreamReader(file); if (!INIParser.ParseIni(stream).TryGetValue("collectionInterval", out var value) || !int.TryParse(value, out collectionInterval)) { Console.WriteLine($"COULDN'T FIND COLLECTION INTERVAL IN {opts.IniFileName} file"); Environment.Exit(1); } }) .WithNotParsed(errs => { foreach (var err in errs) { Console.WriteLine($"OPTIONS PARSE ERROR: {err}"); } Environment.Exit(1); }); var cts = new CancellationTokenSource(); Console.WriteLine("Fetcher running. Press Enter to stop it..."); var t = RunAsync(serverHostName, serverPortNumber, FileName, collectionInterval, zmiName, cts.Token); Console.ReadLine(); cts.Cancel(); try { t.Wait(); } catch (AggregateException) { // it is foreseen } catch (Exception e) { Console.WriteLine($"Exception: {e}"); } finally { File.Delete(FileName); } }
public static void Main(string[] args) { var zmiName = string.Empty; ZMI fatherZmi = null; RSA rsa = null; var receiverHost = string.Empty; var receiverPort = 0; var rpcHost = string.Empty; var rpcPort = 0; IDictionary <string, string> configuration = new Dictionary <string, string>(); Parser.Default.ParseArguments <Options>(args) .WithParsed(opts => { zmiName = opts.ZmiName.Trim(' '); if (string.IsNullOrEmpty(opts.ConfigFile) || !TryParseConfig(opts.ConfigFile, out fatherZmi)) { fatherZmi = ZMI.FromPathName(zmiName); } receiverHost = opts.ReceiverHost; receiverPort = opts.ReceiverPort; rpcHost = opts.RpcHost; rpcPort = opts.RpcPort; rsa = RSAFactory.FromPublicKey(opts.PublicKeyPath); if (string.IsNullOrEmpty(opts.IniFileName)) { return; } using var file = File.OpenRead(opts.IniFileName); using var stream = new StreamReader(file); configuration = INIParser.ParseIni(stream); }) .WithNotParsed(errs => { foreach (var err in errs) { Console.WriteLine($"OPTIONS PARSE ERROR: {err}"); } Environment.Exit(1); }); var creationTimestamp = new ValueTime(DateTimeOffset.Now); fatherZmi.ApplyForEach(zmi => zmi.Attributes.AddOrChange("update", creationTimestamp)); if (!fatherZmi.TrySearch(zmiName, out var myZmi)) { Console.WriteLine($"Could not find node {zmiName} in ZMIs"); Environment.Exit(1); } myZmi.Attributes.AddOrChange("timestamp", creationTimestamp); myZmi.Attributes.AddOrChange("contacts", new ValueSet( new HashSet <Value>(new[] { new ValueContact(myZmi.PathName, IPAddress.Parse(receiverHost), receiverPort) }), AttributeTypePrimitive.Contact)); myZmi.Attributes.AddOrChange("isSingleton", new ValueBoolean(true)); var manager = ManagerFromIni(receiverHost, receiverPort, rpcHost, rpcPort, configuration, rsa, myZmi); Console.WriteLine("Press ENTER to exit..."); Console.ReadLine(); Console.WriteLine("End"); manager.Dispose(); }