public SkillDumpsManager([NotNull] IWurmCharacter character, [NotNull] IWurmPaths wurmPaths, IWurmApiLogger logger) { if (character == null) { throw new ArgumentNullException(nameof(character)); } if (wurmPaths == null) { throw new ArgumentNullException(nameof(wurmPaths)); } this.character = character; this.logger = logger; skillDumpsDirectory = new DirectoryInfo(wurmPaths.GetSkillDumpsFullPathForCharacter(character.Name)); skillDumpsDirectory.Create(); skillDumpFilesMonitor = new FileSystemWatcher() { Path = skillDumpsDirectory.FullName, IncludeSubdirectories = false }; skillDumpFilesMonitor.Created += SkillDumpFilesMonitorOnChanged; skillDumpFilesMonitor.Changed += SkillDumpFilesMonitorOnChanged; skillDumpFilesMonitor.Renamed += SkillDumpFilesMonitorOnChanged; skillDumpFilesMonitor.Deleted += SkillDumpFilesMonitorOnChanged; skillDumpFilesMonitor.EnableRaisingEvents = true; }
//todo: consider converting to non-static dependency public static void ValidateFullPath(string directoryPath, IWurmPaths wurmPaths) { var dirInfo = new DirectoryInfo(directoryPath); if (!dirInfo.Exists) { throw new ValidationException("Directory does not exist: " + directoryPath); } var files = dirInfo.EnumerateFiles(); var configFile = files.FirstOrDefault(info => info.Name.Equals("config.txt", StringComparison.InvariantCultureIgnoreCase)); if (configFile == null) { throw new ValidationException("config.txt does not exist at: " + directoryPath); } var contents = File.ReadAllText(configFile.FullName); if (string.IsNullOrWhiteSpace(contents)) { throw new ValidationException("config.txt is empty at: " + directoryPath); } var directories = dirInfo.EnumerateDirectories(); var logsDir = directories.FirstOrDefault( info => info.Name.Equals(wurmPaths.LogsDirName, StringComparison.InvariantCultureIgnoreCase)); if (logsDir == null) { throw new ValidationException("logs subdir does not exist, character dir path: " + directoryPath); } }
public WurmUnlimitedLogsDirChecker([NotNull] IWurmApi wurmApi, [NotNull] IUserNotifier userNotifier, [NotNull] IWurmAssistantConfig wurmAssistantConfig) { this.wurmPaths = wurmApi.Paths ?? throw new ArgumentNullException(nameof(wurmPaths)); this.wurmCharacters = wurmApi.Characters ?? throw new ArgumentNullException(nameof(wurmCharacters)); this.userNotifier = userNotifier ?? throw new ArgumentNullException(nameof(userNotifier)); this.wurmAssistantConfig = wurmAssistantConfig ?? throw new ArgumentNullException(nameof(wurmAssistantConfig)); }
internal WurmLogFiles(IWurmCharacterDirectories wurmCharacterDirectories, IWurmApiLogger logger, IWurmLogDefinitions wurmLogDefinitions, [NotNull] IInternalEventAggregator eventAggregator, [NotNull] IInternalEventInvoker internalEventInvoker, [NotNull] TaskManager taskManager, [NotNull] IWurmPaths wurmPaths) { if (wurmCharacterDirectories == null) { throw new ArgumentNullException(nameof(wurmCharacterDirectories)); } if (logger == null) { throw new ArgumentNullException(nameof(logger)); } if (wurmLogDefinitions == null) { throw new ArgumentNullException(nameof(wurmLogDefinitions)); } if (eventAggregator == null) { throw new ArgumentNullException(nameof(eventAggregator)); } if (internalEventInvoker == null) { throw new ArgumentNullException(nameof(internalEventInvoker)); } if (taskManager == null) { throw new ArgumentNullException(nameof(taskManager)); } if (wurmPaths == null) { throw new ArgumentNullException(nameof(wurmPaths)); } this.wurmCharacterDirectories = wurmCharacterDirectories; this.logger = logger; this.wurmLogDefinitions = wurmLogDefinitions; this.eventAggregator = eventAggregator; this.internalEventInvoker = internalEventInvoker; this.taskManager = taskManager; this.wurmPaths = wurmPaths; try { Refresh(); } catch (Exception exception) { logger.Log(LogLevel.Error, "Error at initial WurmLogFiles refresh", this, exception); } eventAggregator.Subscribe(this); taskHandle = new TaskHandle(Refresh, "WurmLogFiles refresh"); taskManager.Add(taskHandle); taskHandle.Trigger(); }
public WurmConfigDirectories(IWurmPaths wurmPaths, [NotNull] IInternalEventAggregator eventAggregator, TaskManager taskManager, ILogger logger) : base(wurmPaths.ConfigsDirFullPath, taskManager, () => eventAggregator.Send(new ConfigDirectoriesChanged()), logger, ValidateDirectory) { if (eventAggregator == null) throw new ArgumentNullException("eventAggregator"); this.eventAggregator = eventAggregator; }
public WurmCharacterSkills([NotNull] IWurmCharacter character, [NotNull] IPublicEventInvoker publicEventInvoker, [NotNull] IWurmLogsMonitorInternal logsMonitor, [NotNull] IWurmLogsHistory logsHistory, [NotNull] IWurmApiLogger logger, IWurmPaths wurmPaths, [NotNull] IInternalEventAggregator internalEventAggregator) { if (character == null) { throw new ArgumentNullException(nameof(character)); } if (publicEventInvoker == null) { throw new ArgumentNullException(nameof(publicEventInvoker)); } if (logsMonitor == null) { throw new ArgumentNullException(nameof(logsMonitor)); } if (logsHistory == null) { throw new ArgumentNullException(nameof(logsHistory)); } if (logger == null) { throw new ArgumentNullException(nameof(logger)); } if (internalEventAggregator == null) { throw new ArgumentNullException(nameof(internalEventAggregator)); } this.character = character; this.publicEventInvoker = publicEventInvoker; this.logsMonitor = logsMonitor; this.logsHistory = logsHistory; this.logger = logger; skillsMap = new SkillsMap(); skillDumps = new SkillDumpsManager(character, wurmPaths, logger); UpdateCurrentServer(); onSkillsChanged = publicEventInvoker.Create( InvokeOnSkillsChanged, WurmApiTuningParams.PublicEventMarshallerDelay); internalEventAggregator.Subscribe(this); logsMonitor.SubscribeInternal(character.Name, LogType.Skills, EventHandler); }
public WurmConfigDirectories(IWurmPaths wurmPaths, [NotNull] IInternalEventAggregator eventAggregator, TaskManager taskManager, IWurmApiLogger logger) : base( wurmPaths.ConfigsDirFullPath, taskManager, () => eventAggregator.Send(new ConfigDirectoriesChanged()), logger, ValidateDirectory, wurmPaths) { if (eventAggregator == null) { throw new ArgumentNullException(nameof(eventAggregator)); } this.eventAggregator = eventAggregator; }
static void ValidateDirectory(string directoryFullPath, IWurmPaths wurmPaths) { // no validation required here }
static void ValidateDirectory(string directoryPath, IWurmPaths wurmPaths) { CharacterDirectoryValidator.ValidateFullPath(directoryPath, wurmPaths); }
public WurmCharacter([NotNull] CharacterName name, [NotNull] string playerDirectoryFullPath, [NotNull] IWurmConfigs wurmConfigs, [NotNull] IWurmServers wurmServers, [NotNull] IWurmServerHistory wurmServerHistory, [NotNull] IWurmApiLogger logger, [NotNull] TaskManager taskManager, [NotNull] IWurmLogsMonitorInternal logsMonitor, [NotNull] IPublicEventInvoker publicEventInvoker, [NotNull] InternalEventAggregator internalEventAggregator, [NotNull] IWurmLogsHistory logsHistory, [NotNull] IWurmPaths wurmPaths, [NotNull] IWurmServerGroups wurmServerGroups) { if (name == null) { throw new ArgumentNullException(nameof(name)); } if (playerDirectoryFullPath == null) { throw new ArgumentNullException(nameof(playerDirectoryFullPath)); } if (wurmConfigs == null) { throw new ArgumentNullException(nameof(wurmConfigs)); } if (wurmServers == null) { throw new ArgumentNullException(nameof(wurmServers)); } if (wurmServerHistory == null) { throw new ArgumentNullException(nameof(wurmServerHistory)); } if (logger == null) { throw new ArgumentNullException(nameof(logger)); } if (taskManager == null) { throw new ArgumentNullException(nameof(taskManager)); } if (logsMonitor == null) { throw new ArgumentNullException(nameof(logsMonitor)); } if (publicEventInvoker == null) { throw new ArgumentNullException(nameof(publicEventInvoker)); } if (internalEventAggregator == null) { throw new ArgumentNullException(nameof(internalEventAggregator)); } if (logsHistory == null) { throw new ArgumentNullException(nameof(logsHistory)); } if (wurmPaths == null) { throw new ArgumentNullException(nameof(wurmPaths)); } if (wurmServerGroups == null) { throw new ArgumentNullException(nameof(wurmServerGroups)); } this.wurmConfigs = wurmConfigs; this.wurmServers = wurmServers; this.wurmServerHistory = wurmServerHistory; this.logger = logger; this.taskManager = taskManager; this.logsMonitor = logsMonitor; this.publicEventInvoker = publicEventInvoker; this.internalEventAggregator = internalEventAggregator; this.logsHistory = logsHistory; this.wurmServerGroups = wurmServerGroups; internalEventAggregator.Subscribe(this); Name = name; configDefiningFileFullPath = Path.Combine(playerDirectoryFullPath, ConfigDefinerFileName); RefreshCurrentConfig(); configUpdateTask = new TaskHandle(RefreshCurrentConfig, "Current config update for player " + Name); taskManager.Add(configUpdateTask); configFileWatcher = new FileSystemWatcher(playerDirectoryFullPath) { Filter = ConfigDefinerFileName }; configFileWatcher.Changed += ConfigFileWatcherOnChanged; configFileWatcher.Created += ConfigFileWatcherOnChanged; configFileWatcher.Deleted += ConfigFileWatcherOnChanged; configFileWatcher.Renamed += ConfigFileWatcherOnChanged; configFileWatcher.EnableRaisingEvents = true; configUpdateTask.Trigger(); try { wurmServerHistory.BeginTracking(Name); } catch (Exception exception) { logger.Log(LogLevel.Error, string.Format("Failed to initiate tracking of server history for character {0}", name), this, exception); } skills = new WurmCharacterSkills(this, publicEventInvoker, logsMonitor, logsHistory, logger, wurmPaths, internalEventAggregator); Logs = new WurmCharacterLogs(this, wurmServerGroups, logsHistory, wurmServers, logger); }
protected WurmSubdirsMonitor([NotNull] string directoryFullPath, [NotNull] TaskManager taskManager, [NotNull] Action onChanged, [NotNull] IWurmApiLogger logger, [NotNull] Action <string, IWurmPaths> validateDirectory, [NotNull] IWurmPaths wurmPaths) { if (directoryFullPath == null) { throw new ArgumentNullException(nameof(directoryFullPath)); } if (taskManager == null) { throw new ArgumentNullException(nameof(taskManager)); } if (onChanged == null) { throw new ArgumentNullException(nameof(onChanged)); } if (validateDirectory == null) { throw new ArgumentNullException(nameof(validateDirectory)); } if (wurmPaths == null) { throw new ArgumentNullException(nameof(wurmPaths)); } if (logger == null) { throw new ArgumentNullException(nameof(logger)); } DirectoryFullPath = directoryFullPath; this.taskManager = taskManager; this.onChanged = onChanged; this.validateDirectory = validateDirectory; this.wurmPaths = wurmPaths; this.logger = logger; directoryBlacklist = new Blacklist <string>(logger, "Character directories blacklist"); task = new TaskHandle(Refresh, "WurmSubdirsMonitor for path: " + directoryFullPath); taskManager.Add(task); try { Refresh(); } catch (Exception exception) { logger.Log(LogLevel.Error, "Error at initial Refresh of " + GetType().Name, this, exception); } fileSystemWatcher = new FileSystemWatcher(directoryFullPath) { NotifyFilter = NotifyFilters.DirectoryName }; fileSystemWatcher.Created += DirectoryMonitorOnDirectoriesChanged; fileSystemWatcher.Renamed += DirectoryMonitorOnDirectoriesChanged; fileSystemWatcher.Deleted += DirectoryMonitorOnDirectoriesChanged; fileSystemWatcher.Changed += DirectoryMonitorOnDirectoriesChanged; fileSystemWatcher.EnableRaisingEvents = true; task.Trigger(); }
public WurmCharacters([NotNull] IWurmCharacterDirectories characterDirectories, [NotNull] IWurmConfigs wurmConfigs, [NotNull] IWurmServers wurmServers, [NotNull] IWurmServerHistory wurmServerHistory, [NotNull] IWurmApiLogger logger, [NotNull] TaskManager taskManager, [NotNull] IWurmLogsMonitorInternal wurmLogsMonitor, [NotNull] IPublicEventInvoker publicEventInvoker, [NotNull] InternalEventAggregator internalEventAggregator, [NotNull] IWurmPaths wurmPaths, [NotNull] IWurmLogsHistory wurmLogsHistory, [NotNull] IWurmServerGroups serverGroups) { this.characterDirectories = characterDirectories; this.wurmConfigs = wurmConfigs; this.wurmServers = wurmServers; this.wurmServerHistory = wurmServerHistory; this.logger = logger; this.taskManager = taskManager; this.wurmLogsMonitor = wurmLogsMonitor; this.publicEventInvoker = publicEventInvoker; this.internalEventAggregator = internalEventAggregator; this.wurmPaths = wurmPaths; this.wurmLogsHistory = wurmLogsHistory; this.serverGroups = serverGroups; if (characterDirectories == null) { throw new ArgumentNullException(nameof(characterDirectories)); } if (wurmConfigs == null) { throw new ArgumentNullException(nameof(wurmConfigs)); } if (wurmServers == null) { throw new ArgumentNullException(nameof(wurmServers)); } if (wurmServerHistory == null) { throw new ArgumentNullException(nameof(wurmServerHistory)); } if (logger == null) { throw new ArgumentNullException(nameof(logger)); } if (taskManager == null) { throw new ArgumentNullException(nameof(taskManager)); } if (wurmLogsMonitor == null) { throw new ArgumentNullException(nameof(wurmLogsMonitor)); } if (publicEventInvoker == null) { throw new ArgumentNullException(nameof(publicEventInvoker)); } if (internalEventAggregator == null) { throw new ArgumentNullException(nameof(internalEventAggregator)); } if (wurmPaths == null) { throw new ArgumentNullException(nameof(wurmPaths)); } if (wurmLogsHistory == null) { throw new ArgumentNullException(nameof(wurmLogsHistory)); } if (serverGroups == null) { throw new ArgumentNullException(nameof(serverGroups)); } var allChars = characterDirectories.GetAllCharacters(); foreach (var characterName in allChars) { try { Create(characterName); } catch (Exception exception) { logger.Log(LogLevel.Error, string.Format("Could not initialize character for name {0}", characterName), this, exception); } } }