/// <summary>
        /// Creates a new instance monitor.
        /// </summary>
        public InstanceMonitor(TileApiConfiguration apiConfiguration, InstanceConfiguration instanceConfiguration, ApiBootstrapper.InstanceLoaderDelegate instanceLoader)
        {
            _filesToMonitor = new List<FileMonitor>();
            _hasChanged = false;
            _lastChange = DateTime.Now.Ticks;
            _reloadDelegate = instanceLoader;
            _apiConfiguration = apiConfiguration;
            _instanceConfiguration = instanceConfiguration;

            _timer = new Timer(Tick, null, System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite);
        }
        /// <summary>
        /// Loads a new instance.
        /// </summary>
        /// <param name="apiConfiguration"></param>
        /// <param name="instanceConfiguration"></param>
        /// <returns></returns>
        private static bool LoadInstance(TileApiConfiguration apiConfiguration, InstanceConfiguration instanceConfiguration)
        {
            // get data file configuration.
            var data = instanceConfiguration.Data;

            // get mapcss configuration.
            var mapCSS = instanceConfiguration.MapCSS;
            if (string.IsNullOrWhiteSpace(mapCSS))
            {

            }

            // get the format.
            var format = instanceConfiguration.Format;

            // get the include file.
            try
            {
                // create routing instance.
                OsmSharp.Logging.Log.TraceEvent("Bootstrapper", OsmSharp.Logging.TraceEventType.Information,
                    string.Format("Creating {0} instance...", instanceConfiguration.Name));
                switch (format.ToLowerInvariant())
                {
                    case "osm-xml":
                        using (var stream = new FileInfo(data).OpenRead())
                        {
                            var streamSource = new XmlOsmStreamSource(stream);
                            using (var cssStream = new FileInfo(mapCSS).OpenRead())
                            {
                                ApiBootstrapper.BuildTileServer("tiles_" +
                                    instanceConfiguration.Name, streamSource, cssStream, apiConfiguration.Cache);
                            }
                        }
                        break;
                    case "osm-pbf":
                        using (var stream = new FileInfo(data).OpenRead())
                        {
                            var streamSource = new PBFOsmStreamSource(stream);
                            using (var cssStream = new FileInfo(mapCSS).OpenRead())
                            {
                                ApiBootstrapper.BuildTileServer("tiles_" +
                                    instanceConfiguration.Name, streamSource, cssStream, apiConfiguration.Cache);
                            }
                        }
                        break;
                    default:
                        throw new Exception(string.Format("Unrecognised raw osm format: {0}", format));
                }
                OsmSharp.Logging.Log.TraceEvent("Bootstrapper", OsmSharp.Logging.TraceEventType.Information,
                    string.Format("Instance {0} created successfully!", instanceConfiguration.Name));
            }
            catch (Exception ex)
            {
                OsmSharp.Logging.Log.TraceEvent("Bootstrapper", OsmSharp.Logging.TraceEventType.Error,
                    string.Format("Exception occured while creating instance {0}:{1}",
                    instanceConfiguration.Name, ex.ToInvariantString()));
                return false;
            }
            return true;
        }