static void Main(string[] args) { string logFile = null; string settingsFile = null; string autoPurge = null; string numberOfFiles = null; // take a list of strings (refer to PathToData) and add it to a dictionary of paths + save the value to use Func <string, string, string, string> CheckOption = (string arg, string option, string data) => { try { if ((arg.StartsWith(option, true, null)) && option.Length < arg.Length && string.IsNullOrEmpty(data)) { return(arg.Substring(option.Length)); } return(data); } catch (Exception) { } return(null); }; // get start options foreach (string s in args) { // has the settings file been specified //if ((s.StartsWith(OPTION_SETTINGS_FILE_NAME, true, null)) && OPTION_SETTINGS_FILE_NAME.Length < s.Length && string.IsNullOrEmpty(settingsFile)) //settingsFile = s.Substring(OPTION_SETTINGS_FILE_NAME.Length); // has the log file been specified //if ((s.StartsWith(OPTION_LOG_FILE_NAME, true, null)) && OPTION_LOG_FILE_NAME.Length < s.Length && string.IsNullOrEmpty(logFile)) // logFile = s.Substring(OPTION_LOG_FILE_NAME.Length); settingsFile = CheckOption(s, OPTION_SETTINGS_FILE_NAME, settingsFile); logFile = CheckOption(s, OPTION_LOG_FILE_NAME, logFile); numberOfFiles = CheckOption(s, OPTION_LOG_NUMBER_OF_FILES, numberOfFiles); autoPurge = CheckOption(s, OPTION_LOG_AUTO_PURGE, autoPurge); } if (string.IsNullOrEmpty(settingsFile)) { settingsFile = LISTENER_SETTINGS_FILE; } if (string.IsNullOrEmpty(logFile)) { logFile = LISTENER_LOG_FILE; } try { CLog.AutoPurgeLogFiles = bool.Parse(autoPurge); } catch { CLog.AutoPurgeLogFiles = true; } try { CLog.NumberOfFilesToKeep = int.Parse(numberOfFiles); } catch { CLog.NumberOfFilesToKeep = 3; } CLog.LogFileName = logFile; CLogger.Add($"Using settings file: {settingsFile}"); MenuList menu = new MenuList(); menu.Add(TEST_LISTENER, new CMenu() { Text = "Test listener", Fnc = TestListener }); menu.Add(TEST_LISTENER_CREATE, new CMenu() { Text = "Generate listener test file", Fnc = TestListenerCreate }); menu.Add(DISPLAY_SETTINGS, new CMenu() { Text = "Display settings", Fnc = DisplaySettings }); menu.Add(RELOAD_SETTINGS, new CMenu() { Text = "Reload settings", Fnc = ReloadSettings }); //menu.Add(i++.ToString()[0], new CMenu() { Text = ACTIVATE_DISPLAY, Fnc = ActivityDisplay }); menu.Add('X', new CMenu() { Text = "Exit", Fnc = Exit }); // Start listener CListener listener = new CListener(); bool ok = listener.Start(settingsFile); TestListenerType testListenerType = new TestListenerType() { FileToUse = LISTENER_TEST_FILE, Port = listener.Port, IP = listener.IP }; while (ok) { CMenu entry = DisplayMenu(menu, out char option); if (null != entry) { switch (option) { case RELOAD_SETTINGS: { ReloadSettingsType type = new ReloadSettingsType() { SettingsFile = settingsFile, Listener = listener }; if (ok = entry.Fnc(menu, entry, option, type)) { settingsFile = type.SettingsFile; listener = type.Listener; } break; } case TEST_LISTENER: { ok = entry.Fnc(menu, entry, option, testListenerType); break; } case DISPLAY_SETTINGS: { ok = entry.Fnc(menu, entry, option, listener); break; } default: ok = entry.Fnc(menu, entry, option, null); break; } } } listener.Stop(); }