Пример #1
0
        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);
            }
        }
Пример #3
0
 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));
 }
Пример #4
0
        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();
        }
Пример #5
0
 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;
 }
Пример #6
0
        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);
        }
Пример #7
0
 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;
 }
Пример #8
0
 static void ValidateDirectory(string directoryFullPath, IWurmPaths wurmPaths)
 {
     // no validation required here
 }
Пример #9
0
 static void ValidateDirectory(string directoryPath, IWurmPaths wurmPaths)
 {
     CharacterDirectoryValidator.ValidateFullPath(directoryPath, wurmPaths);
 }
Пример #10
0
        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);
        }
Пример #11
0
        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();
        }
Пример #12
0
        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);
                }
            }
        }