コード例 #1
0
 public static DatabaseWorker GetInstance(string connectionString, Logger logger)
 {
     if (Instance == null)
     {
         Instance = new DatabaseWorker(connectionString, logger);
     }
     return(Instance);
 }
コード例 #2
0
        private void SendDataToService()
        {
            try
            {
                if (!DatabaseWorker.GetInstance(connectionString, logger).isConnected)
                {
                    DatabaseWorker.GetInstance(connectionString, logger).Connect();
                }
                //string result = DatabaseWorker.GetInstance(connectionString, logger).GetXml(get_xml_Query);
                var result = DatabaseWorker.GetInstance(connectionString, logger).GetXml(get_xml_Query);

                //if (!string.IsNullOrEmpty(result))
                if (result != null && result.Count != 0)
                {
                    logger.LogInformation($"Got xml string. Result count = {result.Count}");
                    foreach (string s in result)
                    {
                        XmlSerializer serializer = new XmlSerializer(typeof(ier));
                        ier           ier        = new ier();
                        using (TextReader reader = new StringReader(s))
                        {
                            ier = (ier)serializer.Deserialize(reader);
                            // iers.Add((ier)serializer.Deserialize(reader));
                        }
                        logger.LogInformation($"Xml deserialized successfully.");

                        var res = emercitService.newIER(ier);
                        logger.LogInformation($"Data sent to the service. Result = {res}");
                    }
                }
                else
                {
                    logger.LogError($"Xml string is empty. Result = {result}");
                }
            }
            catch (Exception ex)
            {
                logger.LogError($"Error with sending data to the service. {ex.Message} {ex.InnerException}");
            }
            finally
            {
                isDataSending = false;
            }
        }
コード例 #3
0
 public void ProcessData(Archive archive)
 {
     Logger.LogInformation($"Получены данные от {archive.Controller}." +
                           $"Данные {archive.Data.Count}, " +
                           $"статусы {archive.States.Count}, " +
                           $"оповещения: {archive.Notifications.Count}.");
     try
     {
         //create json string
         string json = JsonConvert.SerializeObject(archive);
         //write to database
         if (!DatabaseWorker.GetInstance(working.connectionString, working.logger).isConnected)
         {
             DatabaseWorker.GetInstance(working.connectionString, working.logger).Connect();
         }
         var response = DatabaseWorker.GetInstance(working.connectionString, working.logger).WriteToDb(Working.write_sqlQuery, json);
         Logger.LogInformation($"Результат записи в бд = {response}");
     }
     catch (Exception ex)
     {
         Logger.LogError($"Json parse error. {ex.Message}");
     }
 }
コード例 #4
0
        public void Initialize()
        {
            var dataProcessor = new DataProcessor(logger, this);

            emercitService = new EmercitAdapterService(serviceUrl);

            int value = 0;

            if (int.TryParse(sendingDataTimeout, out value))
            {
                sendingTimeout = value;
            }
            else
            {
                logger.LogError("Проблема при считывании таймаута отправки данных из конфига. Установлено значение 3600 секунд.");
                sendingTimeout = 3600;
            }

            int controllerValue = 0;

            if (int.TryParse(reconnectControllersTimeout, out controllerValue))
            {
                reconnectTimeout = controllerValue;
            }
            else
            {
                logger.LogError("Проблема при считывании таймаута переподключения контроллеров. Установлено значение 3600 секунд.");
                reconnectTimeout = 3600;
            }

            int portValue = 0;

            if (int.TryParse(controllerPort, out portValue))
            {
                port = portValue;
            }
            else
            {
                logger.LogError("Проблема при считывании порта контроллеров. Установлен порт 8081.");
                port = 8081;
            }

            int q = 0;

            if (int.TryParse(queue, out q))
            {
                queueSize = q;
            }
            else
            {
                logger.LogError("Проблема при считывании количества контроллеров в очереди. Установлено значение 5.");
                queueSize = 5;
            }

            sendingDataTimer = new Timer(Callback, null, TimeSpan.FromSeconds(sendingTimeout), Timeout.InfiniteTimeSpan);

            //Cоздание загрузчика и хранилища обновлений. При добавлении/удалении файлов обновлений в указанную
            //директорию автоматически будет выполенено добавление или удаление данного обновления в хранилище.
            //Это позволяет выполнять добавление файла обновления не перезапуская сервис.
            //const string updatesPath = @"C:\";

            FilesFirmwaresStore store = null;

            try
            {
                store = new FilesFirmwaresStore(new FirmwaresWatcher(logger, NotifyFilters.FileName, updatesPath), new FileLoader(), logger);
                logger.LogInformation($"Обновление загружено. Версии в store:");
                foreach (var s in store.GetVersions)
                {
                    logger.LogInformation(s.ToString());
                }
            }
            catch (Exception ex)
            {
                logger.LogError($"Ошибка при обновлении. {ex.Message}. Путь из конфига: {updatesPath}");
            }

            if (store == null)
            {
                logger.LogInformation($"По указанному пути обновления не найдены, проверка директории С:.");
                updatesPath = @"C:\";
                store       = new FilesFirmwaresStore(new FirmwaresWatcher(logger, NotifyFilters.FileName, updatesPath), new FileLoader(), logger);
            }

            //Создание экземпляра класса сервера (прослушивание всех интерфейсов и TCP порта 4090, размер очереди
            //подключения контроллеров равен 5
            var exchangeServer =
                ExchangeServer.CreateInstance(dataProcessor, store, new IPEndPoint(IPAddress.Any, port), queueSize);

            logger.LogInformation("Добавление контроллеров в хранилище");

            try
            {
                controllers = DatabaseWorker.GetInstance(connectionString, logger).ReadData(read_sqlQuery);

                foreach (var controller in controllers)
                {
                    exchangeServer.KeyStore.AddOrUpdate(controller.Id, controller.Key, false);
                    logger.LogInformation($"Контроллер {controller.Key} добавлен.");
                }
                logger.LogInformation("Запуск сервера");
            }
            catch (Exception ex)
            {
                logger.LogError($"Проблема при добавлении контроллеров в Exchange Server. {ex.Message}");
            }
            exchangeServer.Start();


            Console.WriteLine("Нажмите клавишу Enter для выхода...");
            Console.ReadLine();
            logger.LogInformation("Останов сервера");

            try
            {
                Dispose();

                exchangeServer.Stop();
            }
            catch (Exception ex)
            {
                logger.LogError($"Ошибка при остановке сервера. {ex.Message}. {ex.InnerException}");
            }
        }