/// <summary>
        /// Запуск приложения-сервера передачи котировок.
        /// </summary>
        internal void Run()
        {
            UdpClient sender = new UdpClient();

            IPAddress  remoteAddress = IPAddress.Parse(_endPointSettings.IPAddress);
            IPEndPoint endPoint      = new IPEndPoint(remoteAddress, _endPointSettings.Port);

            int counter = 0;

            while (true)
            {
                //получаем цену котировок
                double price = _quotesService.GetPrice();

                //отправляемая информацию о котировке
                QuoteDTO package = new QuoteDTO()
                {
                    Price = price,
                    Index = counter++
                };

                byte[] buffer = JsonDataSerializer.Serialize(package);
                sender.Send(buffer, buffer.Length, endPoint);
            }
        }
Beispiel #2
0
        private void SerializeHeader(MemoryStream fileHeaderStream, IBlobFileMetadata fileMetadata, long contentLength, DateTime versionTimeCreated)
        {
            if (fileHeaderStream == null)
            {
                throw new ArgumentNullException("fileHeaderStream");
            }

            if (fileMetadata == null)
            {
                throw new ArgumentNullException("fileMetadata");
            }

            //текущая версия заголовка = BlobConsts.BlobFile.FileHeaderCurrentVersion
            JsonBlobFileHeaderV1 header = new JsonBlobFileHeaderV1()
            {
                ContentAbsoluteStartPosition = this.BlobStream.Position,
                ContentLength   = contentLength,
                FileName        = fileMetadata.Name,
                FolderUrl       = fileMetadata.FolderMetadata.Url,
                UniqueID        = fileMetadata.UniqueID,
                TimeCreated     = versionTimeCreated,
                VersionUniqueID = fileMetadata.VersionUniqueID,
            };

            JsonDataSerializer.Serialize(fileHeaderStream, header);
        }
Beispiel #3
0
 public TestRuntimeManager(JsonDataSerializer dataSerializer, IProcessHelper processHelper, JSProcess process)
 {
     this.dataSerializer       = dataSerializer;
     this.jsProcess            = process;
     this.versionCheckComplete = new ManualResetEventSlim();
     this.executionComplete    = new ManualResetEventSlim();
 }
        public void TestSerialization()
        {
            var resources = new List <LocalizationResource>
            {
                new LocalizationResource()
                {
                    Id               = 1,
                    Author           = "migration-tool",
                    ResourceKey      = "test-key",
                    ModificationDate = new DateTime(2016, 1, 1),
                    Translations     = new List <LocalizationResourceTranslation>
                    {
                        new LocalizationResourceTranslation
                        {
                            Id       = 11,
                            Language = "en",
                            Value    = "test value"
                        }
                    }
                }
            };

            var serializer = new JsonDataSerializer();
            var result     = serializer.Serialize(resources);

            Assert.NotNull(result);
        }
        public void TestSerialization()
        {
            var resources = new List<LocalizationResource>
                            {
                                new LocalizationResource()
                                {
                                    Id = 1,
                                    Author = "migration-tool",
                                    ResourceKey = "test-key",
                                    ModificationDate = new DateTime(2016, 1, 1),
                                    Translations = new List<LocalizationResourceTranslation>
                                                   {
                                                       new LocalizationResourceTranslation
                                                       {
                                                           Id = 11,
                                                           Language = "en",
                                                           Value = "test value"
                                                       }
                                                   }
                                }
                            };

            var serializer = new JsonDataSerializer();
            var result = serializer.Serialize(resources);

            Assert.NotNull(result);
        }
 public SerializationHelper(GetSerializer getSerializer)
 {
     _bonsaiSerializer   = getSerializer(SerializeConstantFactory, DeserializeConstantFactory);
     _dataSerializer     = (JsonDataSerializer)DataSerializer.Create(_bonsaiSerializer);
     _genericSerialize   = _dataSerializer.GetType().GetMethod(nameof(DataSerializer.Serialize));
     _genericDeserialize = _dataSerializer.GetType().GetMethod(nameof(DataSerializer.Deserialize));
 }
Beispiel #7
0
        private Blob CreateBlob()
        {
            //создание нового блоба
            string name = string.Format("{0}_{1}",
                                        BlobConsts.Blobs.Name,
                                        Guid.NewGuid().ToString(),
                                        BlobConsts.Blobs.Extension);

            IBlobMetadata blobMetadata = this.DataAdapter.BlobMetadataAdapter.CreateBlob(name, this.ID);

            this.DataAdapter.BlobMetadataAdapter.SaveBlob(blobMetadata);

            Blob newBlob = new Blob(this, blobMetadata);

            DateTime timeCreated = DateTime.Now;

            //создаем физический файл блоба
            //т.к. это первичное созадние файла, то "шарить" файл не нужно
            //пишем в него заголовок и закрываем поток
            using (FileStream fs = newBlob.File.Open(FileMode.Append, FileAccess.Write, FileShare.None))
            {
                if (fs.Position != 0)
                {
                    throw new Exception(string.Format("Невозможно записать заголовок блоба в непустой блоб. Заголовок блоба должен быть записан в начало блоба!"));
                }

                //записываем заголовок в начало блоба
                byte[] allBlobHeaderBytes = new byte[BlobConsts.Blobs.BlobHeaderSize];
                //фиксированные байты заголовка блоба
                byte[] fixedHeaderBytes = Encoding.UTF8.GetBytes(BlobConsts.Blobs.BlobSystemHeader);
                Array.Copy(fixedHeaderBytes, 0, allBlobHeaderBytes, 0, fixedHeaderBytes.Length);
                int destinationOffset = fixedHeaderBytes.Length;

                //версия блоба
                int    blobHeaderVersion      = BlobConsts.Blobs.BlobHeaderCurrentVersion;
                byte[] blobHeaderVersionBytes = BitConverter.GetBytes(blobHeaderVersion);
                Array.Copy(blobHeaderVersionBytes, 0, allBlobHeaderBytes, destinationOffset, blobHeaderVersionBytes.Length);
                destinationOffset += blobHeaderVersionBytes.Length;

                BlobeHeaderV1 blobHeader = new BlobeHeaderV1()
                {
                    ID          = newBlob.ID,
                    Name        = newBlob.File.Name,
                    FullName    = newBlob.File.FullName,
                    ContainerID = newBlob.Metadata.ContainerID,
                    MachineName = Environment.MachineName,
                    TimeCreated = timeCreated
                };

                string blobHeaderJson  = JsonDataSerializer.SerializeJson(blobHeader);
                byte[] blobHeaderBytes = Encoding.UTF8.GetBytes(blobHeaderJson);
                Array.Copy(blobHeaderBytes, 0, allBlobHeaderBytes, destinationOffset, blobHeaderBytes.Length);

                //запись всего заголовка блоба в файл блоба
                fs.Write(allBlobHeaderBytes, 0, allBlobHeaderBytes.Length);
            }

            return(newBlob);
        }
Beispiel #8
0
        internal object GetFileHeader(long startPosition)
        {
            if (startPosition < 0)
            {
                throw new ArgumentNullException("startPosition");
            }

            //читаем системный заголовок
            this.BlobStream.Seek(startPosition, SeekOrigin.Begin);
            byte[] systemHeaderBytes = new byte[BlobStreamAdapter.SystemHeaderLength];
            this.BlobStream.Read(systemHeaderBytes, 0, BlobStreamAdapter.SystemHeaderLength);

            //проверка целостности системного заголовка
            for (int i = 0; i < SystemHeaderFixedBytes.Length; i++)
            {
                if (SystemHeaderFixedBytes[i] != systemHeaderBytes[i])
                {
                    throw new Exception(string.Format("Битый заголовок файла (позиция {0}). Не удалось прочитать системный заголовок файла.",
                                                      i));
                }
            }

            //целостность системного заголовока не нарушена, значит можно поднять заголовок файла
            //сразу за фиксированной частью системного заголовка есть 4 байта, в которых указана длина заголовка файла
            //длина заголовка файла
            int headerLength = BitConverter.ToInt32(systemHeaderBytes, SystemHeaderFixedBytes.Length);

            if (headerLength < 1)
            {
                throw new Exception(string.Format("Не удалось считать длину заголовка файла"));
            }

            byte[] headerBytes = new byte[headerLength];
            this.BlobStream.Seek(startPosition + BlobStreamAdapter.SystemHeaderLength, SeekOrigin.Begin);
            this.BlobStream.Read(headerBytes, 0, headerBytes.Length);

            int    headerVersionNumber = BitConverter.ToInt32(systemHeaderBytes, SystemHeaderFixedBytes.Length + BlobConsts.BlobFile.HeaderSizeBytesLength + BlobConsts.BlobFile.AllHashBytesLength);
            object header = null;

            using (MemoryStream headerStream = new MemoryStream(headerBytes))
            {
                headerStream.Position = 0;
                JsonBlobFileHeaderV1 typedHeader = JsonDataSerializer.Deserialize <JsonBlobFileHeaderV1>(headerStream);
                typedHeader.HeaderLength = headerLength;

                if (typedHeader.ContentLength == 0)
                {
                    //длина на момент записи заголовка не была вычислина (потоковая передача)
                    //смотрим эту длину по системному заголовку
                    long contentLengBytesAbsolutePosition = FileStructure.GetContentLengBytesAbsolutePosition();
                    typedHeader.ContentLength = BitConverter.ToInt64(systemHeaderBytes, (int)contentLengBytesAbsolutePosition);
                }

                header = typedHeader;
            }

            return(header);
        }
Beispiel #9
0
        static AssetManager()
        {
            DataSerializer = new JsonDataSerializer();

            LoadedAudioFiles = new Dictionary <string, AudioClip>();
            LoadedTextures   = new Dictionary <string, Texture2D>();
            LoadedSprites    = new Dictionary <string, Sprite>();
            LoadedAnimations = new Dictionary <string, Data.Animation>();
        }
Beispiel #10
0
        //http://stackoverflow.com/questions/12739114/asp-net-mvc-4-async-child-action
        private TResponse Send <TResponse>(object request, string operationType)
        {
            HttpResponseMessage response = SendOneWay(request, operationType);

            using (Stream stream = response.Content.ReadAsStreamAsync().Result)
            {
                return(JsonDataSerializer.ToValue <TResponse>(stream));
            }
        }
Beispiel #11
0
        public ViewResult ImportResources(bool?previewImport, HttpPostedFileBase importFile, bool?showMenu)
        {
            var model = new ImportResourcesViewModel {
                ShowMenu = showMenu ?? false
            };

            if (importFile == null || importFile.ContentLength == 0)
            {
                return(View("ImportResources", model));
            }

            var fileInfo = new FileInfo(importFile.FileName);

            if (fileInfo.Extension.ToLower() != ".json")
            {
                ModelState.AddModelError("file", "Uploaded file has different extension. Json file expected");
                return(View("ImportResources", model));
            }

            var importer     = new ResourceImporter();
            var serializer   = new JsonDataSerializer();
            var streamReader = new StreamReader(importFile.InputStream);
            var fileContent  = streamReader.ReadToEnd();

            try
            {
                var newResources = serializer.Deserialize <IEnumerable <LocalizationResource> >(fileContent);

                if (previewImport.HasValue && previewImport.Value)
                {
                    var changes = importer.DetectChanges(newResources, new GetAllResources.Query().Execute());

                    var availableLanguagesQuery = new AvailableLanguages.Query();
                    var languages = availableLanguagesQuery.Execute();

                    var previewModel = new PreviewImportResourcesViewModel(changes, showMenu ?? false, languages);

                    return(View("ImportPreview", previewModel));
                }

                var result = importer.Import(newResources, previewImport ?? true);

                ViewData["LocalizationProvider_ImportResult"] = result;
            }
            catch (Exception e)
            {
                ModelState.AddModelError("importFailed", $"Import failed! Reason: {e.Message}");
            }

            return(View("ImportResources", model));
        }
Beispiel #12
0
        public FileResult ExportResources()
        {
            var stream     = new MemoryStream();
            var writer     = new StreamWriter(stream, Encoding.UTF8);
            var serializer = new JsonDataSerializer();

            var resources = new GetAllResources.Query().Execute();

            writer.Write(serializer.Serialize(resources));
            writer.Flush();
            stream.Position = 0;

            return(File(stream, "application/json", $"localization-resources-{DateTime.Now.ToString("yyyyMMdd")}.json"));
        }
Beispiel #13
0
        private async Task <TResponse> ProcessWithResponseAsync <TResponse>(
            object request, string operationType)
        {
            string urlRequest = request.ToUrl(_serviceAddress, operationType);

            using (HttpClient client = CreateHttpClient())
            {
                HttpResponseMessage response;

                switch (operationType)
                {
                case OperationType.Get:
                    response = await client.GetAsync(urlRequest);

                    break;

                case OperationType.Post:
                    response = await client.PostAsync(urlRequest, CreateContent(request));

                    break;

                case OperationType.Put:
                    response = await client.PutAsync(urlRequest, CreateContent(request));

                    break;

                case OperationType.Delete:
                    response = await client.DeleteAsync(urlRequest);

                    break;

                default:
                    string errorMessage = string.Format("OperationType {0} with Response return is absent",
                                                        operationType);
                    throw Error.InvalidOperation(errorMessage);
                }
                if (!response.IsSuccessStatusCode)
                {
                    throw new WebFaultException(response.StatusCode);
                }
                using (Stream stream = await response.Content.ReadAsStreamAsync())
                {
                    return(JsonDataSerializer.ToValue <TResponse>(stream));
                }
            }
        }
Beispiel #14
0
        public void JsonSerializationAndDeserlializationTest()
        {
            DataContext dataContext = new DataContext();
            IDataFiller dataFiller  = new DataManualFiller();

            dataFiller.InsertData(dataContext);

            JsonDataSerializer.Serialize(dataContext, pathToFile);

            DataContext deserializedDataContext = JsonDataSerializer.Deserialize <DataContext>(pathToFile);

            CollectionAssert.AreEqual(dataContext.Clients, deserializedDataContext.Clients);
            CollectionAssert.AreEqual(dataContext.Cars, deserializedDataContext.Cars);
            CollectionAssert.AreEqual(dataContext.WarehouseItems, deserializedDataContext.WarehouseItems);

            CollectionAssert.AreEqual(dataContext.BoughtCars, deserializedDataContext.BoughtCars);
            CollectionAssert.AreEqual(dataContext.SoldCars, deserializedDataContext.SoldCars);
        }
        protected IDataSerializer CreateDataSerializer()
        {
            // choose what serializer you want to use
            IDataSerializer dataSerializer = null;

            switch (m_serializerType)
            {
            case DataSerializerType.JsonUtility:
                dataSerializer = new JsonDataSerializer();
                m_adapterType  = DataSerializationAdapterType.Concrete;
                break;

            case DataSerializerType.Odin:
                dataSerializer = new OdinDataSerializer(m_dataFormat);
                break;
            }

            return(dataSerializer);
        }
        public void Initialize()
        {
            var serializer  = new JsonDataSerializer();
            var persistence = new PlayFabPersistence(_key, serializer);

            _dataLayer = new PersistenceDataLayer(persistence);

            Deferred def = GameFoundationSdk.Initialize(_dataLayer);

            if (def.isDone)
            {
                if (def.isFulfilled)
                {
                    _onInitOrLoadComplete?.Invoke();
                    OnInitOrLoadComplete?.Invoke();
                }
                else
                {
                    Debug.LogError(def.error.Message);
                    _onInitOrLoadFail?.Invoke();
                }
            }
            else
            {
                IEnumerator Routine(Deferred aDef)
                {
                    yield return(aDef.Wait());

                    if (aDef.isFulfilled)
                    {
                        _onInitOrLoadComplete?.Invoke();
                        OnInitOrLoadComplete?.Invoke();
                    }
                    else
                    {
                        Debug.LogError(aDef.error.Message);
                        _onInitOrLoadFail?.Invoke();
                    }
                }

                StartCoroutine(Routine(def));
            }
        }
Beispiel #17
0
        private object GetFileHeader(byte[] contentWithHeadersData)
        {
            if (contentWithHeadersData == null)
            {
                throw new ArgumentNullException("fileData");
            }

            object header = null;

            //сразу за системным заголовком 4 байта, в которых указана длина заголовка файла
            //длина заголовка файла
            int headerLength = BitConverter.ToInt32(contentWithHeadersData, SystemHeaderFixedBytes.Length);

            if (headerLength < 1)
            {
                throw new Exception(string.Format("Не удалось считать длину заголовка файла"));
            }

            byte[] headerBytes = new byte[headerLength];
            Array.Copy(contentWithHeadersData, BlobStreamAdapter.SystemHeaderLength, headerBytes, 0, headerLength);

            int headerVersionNumber = BitConverter.ToInt32(contentWithHeadersData, SystemHeaderFixedBytes.Length + BlobConsts.BlobFile.HeaderSizeBytesLength + BlobConsts.BlobFile.AllHashBytesLength);

            using (MemoryStream headerStream = new MemoryStream(headerBytes))
            {
                headerStream.Position = 0;
                JsonBlobFileHeaderV1 typedHeader = JsonDataSerializer.Deserialize <JsonBlobFileHeaderV1>(headerStream);
                typedHeader.HeaderLength = headerLength;

                if (typedHeader.ContentLength == 0)
                {
                    //длина на момент записи заголовка не была вычислина (потоковая передача)
                    //смотрим эту длину по системному заголовку
                    long contentLengBytesAbsolutePosition = FileStructure.GetContentLengBytesAbsolutePosition();
                    typedHeader.ContentLength = BitConverter.ToInt64(contentWithHeadersData, (int)contentLengBytesAbsolutePosition);
                }

                header = typedHeader;
            }

            return(header);
        }
Beispiel #18
0
        /// <summary>
        /// Получение котировок.
        /// </summary>
        /// <param name="state"></param>
        private void GetQuotes(object state)
        {
            try
            {
                IPEndPoint endPoint = null;
                byte[]     result   = _client.Receive(ref endPoint);
                QuoteDTO   quote    = JsonDataSerializer.Deserialize <QuoteDTO>(result);

                //обновление статистики
                Statistics.UpdateStatistics(quote.Price);
            }
            catch (SocketException ex)
            {
                OnSocketError(ex.SocketErrorCode);
            }
            catch (Exception ex)
            {
                throw new Exception($"В процессе получения котировок произошла неожиданная ошибка: {ex}");
            }
        }
Beispiel #19
0
        private Task <TResponse> SendAsync4 <TResponse>(object request, string operationType)
        {
            string urlRequest = request.ToUrl(_serviceAddress, operationType);

            Task <HttpResponseMessage> response;

            switch (operationType)
            {
            case OperationType.Get:
                response = _httpClient.GetAsync(urlRequest);
                break;

            case OperationType.Post:
                response = _httpClient.PostAsync(urlRequest, CreateContent(request));
                break;

            case OperationType.Put:
                response = _httpClient.PutAsync(urlRequest, CreateContent(request));
                break;

            case OperationType.Delete:
                response = _httpClient.DeleteAsync(urlRequest);
                break;

            default:
                string errorMessage = string.Format("OperationType {0} with Response return is absent", operationType);
                throw Error.InvalidOperation(errorMessage);
            }
            return(response.ContinueWith(x =>
            {
                HttpResponseMessage responseMessage = x.Result;
                if (responseMessage.IsSuccessStatusCode == false)
                {
                    throw new WebFaultException(responseMessage.StatusCode);
                }
                using (Stream stream = responseMessage.Content.ReadAsStreamAsync().Result)
                {
                    return JsonDataSerializer.ToValue <TResponse>(stream);
                }
            }));
        }
Beispiel #20
0
        public ViewResult ImportResources(bool?importOnlyNewContent, HttpPostedFileBase importFile, bool?showMenu)
        {
            var model = new ImportResourcesViewModel
            {
                ShowMenu = showMenu ?? false
            };

            if (importFile == null || importFile.ContentLength == 0)
            {
                return(View("ImportResources", model));
            }

            var fileInfo = new FileInfo(importFile.FileName);

            if (fileInfo.Extension.ToLower() != ".json")
            {
                ModelState.AddModelError("file", "Uploaded file has different extension. Json file expected");
                return(View("ImportResources", model));
            }

            var importer     = new ResourceImporter();
            var serializer   = new JsonDataSerializer();
            var streamReader = new StreamReader(importFile.InputStream);
            var fileContent  = streamReader.ReadToEnd();

            try
            {
                var newResources = serializer.Deserialize <IEnumerable <LocalizationResource> >(fileContent);
                var result       = importer.Import(newResources, importOnlyNewContent ?? true);

                ViewData["LocalizationProvider_ImportResult"] = result;
            }
            catch (Exception e)
            {
                ModelState.AddModelError("importFailed", $"Import failed! Reason: {e.Message}");
            }

            return(View("ImportResources", model));
        }
        public void TestDeserialization()
        {
            string input = @"[
              {
            ""id"": 1,
            ""resourceKey"": ""test-key"",
            ""modificationDate"": ""2016-01-01T00:00:00Z"",
            ""author"": ""migration-tool"",
            ""translations"": [
              {
            ""id"": 11,
            ""language"": ""en"",
            ""value"": ""test value""
              }
            ]
              }
            ]";

            var serializer = new JsonDataSerializer();
            var result = serializer.Deserialize<List<LocalizationResource>>(input);

            Assert.NotNull(result);
            Assert.Equal(1, result.Count);
        }
        public void TestDeserialization()
        {
            string input = @"[
  {
    ""id"": 1,
    ""resourceKey"": ""test-key"",
    ""modificationDate"": ""2016-01-01T00:00:00Z"",
    ""author"": ""migration-tool"",
    ""translations"": [
      {
        ""id"": 11,
        ""language"": ""en"",
        ""value"": ""test value""
      }
    ]
  }
]";

            var serializer = new JsonDataSerializer();
            var result     = serializer.Deserialize <List <LocalizationResource> >(input);

            Assert.NotNull(result);
            Assert.Equal(1, result.Count);
        }
 public JsonDataSerializerTests()
 {
     _sut = new JsonDataSerializer <MockCountry>();
 }
Beispiel #24
0
        private static StringContent CreateContent(object value)
        {
            string content = JsonDataSerializer.ToString(value);

            return(new StringContent(content, Encoding.UTF8, "application/json"));
        }
        public static void Main(string[] args)
        {
            _settings = ParseArguments(args);

            if (_settings.ShowHelp)
            {
                ShowHelp(_settings.OptionSet);
                return;
            }

            if (string.IsNullOrEmpty(_settings.SourceDirectory))
            {
                Console.WriteLine("ERROR: Source directory parameter is missing!");
                Console.WriteLine();
                ShowHelp(_settings.OptionSet);
                return;
            }

            if (!Directory.Exists(_settings.SourceDirectory))
            {
                throw new IOException($"Source directory {_settings.SourceDirectory} does not exist!");
            }

            Directory.SetCurrentDirectory(_settings.SourceDirectory);
            ReadConnectionString(_settings);
            AppDomain.CurrentDomain.SetData("DataDirectory", Path.Combine(_settings.SourceDirectory, "App_Data"));

            if (_settings.ExportResources)
            {
                try
                {
                    Console.WriteLine("Export started.");
                    var extractor = new ResourceExtractor();
                    var resources = extractor.Extract(_settings);
                    string generatedScript;

                    if (_settings.Json)
                    {
                        var serializer = new JsonDataSerializer();
                        generatedScript = serializer.Serialize(resources);
                    }
                    else
                    {
                        var scriptGenerator = new SqlScriptGenerator();
                        generatedScript = scriptGenerator.Generate(resources, _settings.ScriptUpdate);
                    }

                    var scriptFileWriter = new ResultFileWriter();
                    var outputFile = scriptFileWriter.Write(generatedScript, _settings.TargetDirectory, _settings.Json);

                    Console.WriteLine($"Output file: {outputFile}");
                    Console.WriteLine("Export completed!");
                }
                catch (Exception e)
                {
                    Console.WriteLine($"Error running tool: {e.Message}");
                    return;
                }
            }

            if (_settings.ImportResources)
            {
                Console.WriteLine("Import started!");

                var importer = new ResourceImporter();
                importer.Import(_settings);

                Console.WriteLine("Import completed!");
            }

            if (!_settings.ExportResources && !_settings.ImportResources)
            {
                Console.WriteLine("No command specified.");
                Console.WriteLine("Try 'DbLocalizationProvider.MigrationTool.exe --help' for more information.");
            }

            if (Debugger.IsAttached)
            {
                Console.ReadLine();
            }
        }
Beispiel #26
0
 public JsonDataSerializerTests()
 {
     this.jsonDataSerializer = JsonDataSerializer.Instance;
 }
Beispiel #27
0
        public static void Main(string[] args)
        {
            _settings = ParseArguments(args);

            if (_settings.ShowHelp)
            {
                ShowHelp(_settings.OptionSet);
                return;
            }

            if (string.IsNullOrEmpty(_settings.SourceDirectory))
            {
                Console.WriteLine("ERROR: Source directory parameter is missing!");
                Console.WriteLine();
                ShowHelp(_settings.OptionSet);
                return;
            }

            if (!Directory.Exists(_settings.SourceDirectory))
            {
                throw new IOException($"Source directory `{_settings.SourceDirectory}` does not exist!");
            }

            if (!File.Exists(Path.Combine(_settings.SourceDirectory, "web.config")))
            {
                throw new IOException($"File `web.config` file not found in `{_settings.SourceDirectory}`!");
            }

            Directory.SetCurrentDirectory(_settings.SourceDirectory);
            ReadConnectionString(_settings);
            AppDomain.CurrentDomain.SetData("DataDirectory", Path.Combine(_settings.SourceDirectory, "App_Data"));

            if (_settings.ExportResources)
            {
                try
                {
                    Console.WriteLine("Export started.");
                    var    extractor = new ResourceExtractor();
                    var    resources = extractor.Extract(_settings);
                    string generatedScript;

                    if (_settings.Json)
                    {
                        var serializer = new JsonDataSerializer();
                        generatedScript = serializer.Serialize(resources);
                    }
                    else
                    {
                        var scriptGenerator = new SqlScriptGenerator();
                        generatedScript = scriptGenerator.Generate(resources, _settings.ScriptUpdate);
                    }

                    var scriptFileWriter = new ResultFileWriter();
                    var outputFile       = scriptFileWriter.Write(generatedScript, _settings.TargetDirectory, _settings.Json);

                    Console.WriteLine($"Output file: {outputFile}");
                    Console.WriteLine("Export completed!");
                }
                catch (Exception e)
                {
                    Console.WriteLine($"Error running tool: {e.Message}");
                    return;
                }
            }

            if (_settings.ImportResources)
            {
                Console.WriteLine("Import started!");

                var importer = new ResourceImporter();
                importer.Import(_settings);

                Console.WriteLine("Import completed!");
            }

            if (!_settings.ExportResources && !_settings.ImportResources)
            {
                Console.WriteLine("No command specified.");
                Console.WriteLine("Try 'DbLocalizationProvider.MigrationTool.exe --help' for more information.");
            }

            if (Debugger.IsAttached)
            {
                Console.ReadLine();
            }
        }