/// <summary>
 /// Create instance of MonitoredItemMessageEncoder.
 /// </summary>
 /// <param name="logger"> Logger to be used for reporting. </param>
 /// <param name="standaloneConfig"> injected configuration. </param>
 /// <param name="engineConfig"> injected configuration. </param>
 public MonitoredItemMessageEncoder(ILogger logger,
                                    IStandaloneCliModelProvider standaloneConfig,
                                    IEngineConfiguration engineConfig)
 {
     _logger          = logger;
     _jsonContentType = standaloneConfig.StandaloneCliModel.LegacyCompatibility
         ? ContentMimeType.UaLegacyPublisher
         : ContentMimeType.Json;
     _enableRoutingInfo = engineConfig.EnableRoutingInfo.GetValueOrDefault(false);
 }
        /// <summary>
        /// Provider of utilities for published nodes file.
        /// </summary>
        /// <param name="standaloneCliModelProvider"> standaloneCliModelProvider that will define location of published nodes file. </param>
        /// <param name="logger"> Logger </param>
        public PublishedNodesProvider(IStandaloneCliModelProvider standaloneCliModelProvider, ILogger logger)
        {
            _standaloneCliModel = standaloneCliModelProvider?.StandaloneCliModel ??
                                  throw new ArgumentNullException(nameof(standaloneCliModelProvider));
            _logger = logger ?? throw new ArgumentNullException(nameof(logger));

            var directory = Path.GetDirectoryName(_standaloneCliModel.PublishedNodesFile);

            if (string.IsNullOrWhiteSpace(directory))
            {
                directory = Environment.CurrentDirectory;
            }

            var file = Path.GetFileName(_standaloneCliModel.PublishedNodesFile);

            _fileSystemWatcher                     = new FileSystemWatcher(directory, file);
            _fileSystemWatcher.Deleted            += FileSystemWatcher_Deleted;
            _fileSystemWatcher.Created            += FileSystemWatcher_Created;
            _fileSystemWatcher.Changed            += FileSystemWatcher_Changed;
            _fileSystemWatcher.Renamed            += FileSystemWatcher_Renamed;
            _fileSystemWatcher.EnableRaisingEvents = true;

            _lock = new SemaphoreSlim(1, 1);
        }