From be3dd2553eee0b334ac40e3131a7954bae7becc4 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Tue, 20 Nov 2018 17:25:22 +0300 Subject: [PATCH] =?UTF-8?q?=D0=92=D1=8B=D0=BD=D0=BE=D1=81=20=D1=81=D0=B5?= =?UTF-8?q?=D1=80=D0=B2=D0=B5=D1=80=D0=B0=20=D0=BF=D1=80=D0=B8=D0=BB=D0=BE?= =?UTF-8?q?=D0=B6=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=B2=20=D0=BE=D1=82=D0=B4?= =?UTF-8?q?=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20=D0=BC=D0=BE=D0=B4=D1=83?= =?UTF-8?q?=D0=BB=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.js | 2 +- core/app.js | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++ index.js | 70 ++++++++------------------------------------- 3 files changed, 94 insertions(+), 59 deletions(-) create mode 100644 core/app.js diff --git a/config.js b/config.js index 64b6a50..49faa60 100644 --- a/config.js +++ b/config.js @@ -26,7 +26,7 @@ let outgoing = { //Размер блока одновременно обрабатываемых исходящих сообщений nPortionSize: 1, //Скорость проверки наличия исходящих сообщений (мс) - nCheckTimeout: 500 + nCheckTimeout: 5000 }; //----------------- diff --git a/core/app.js b/core/app.js new file mode 100644 index 0000000..b682304 --- /dev/null +++ b/core/app.js @@ -0,0 +1,81 @@ +/* + Сервис интеграции ПП Парус 8 с WEB API + Модуль ядра: сервер приложений +*/ + +//---------------------- +// Подключение библиотек +//---------------------- + +const lg = require("../core/logger.js"); //Протоколирование работы +const db = require("../core/db_connector.js"); //Взаимодействие с БД +const oq = require("../core/out_queue.js"); //Прослушивание очереди исходящих сообщений + +//------------ +// Тело модуля +//------------ + +//Класс сервера приложений +class ParusAppServer { + //конструктор класса + constructor(prms) { + //Создаём подключение к БД + this.dbConn = new db.DBConnector(prms.dbConnect); + //Создаём логгер для протоколирования работы + this.logger = new lg.Logger(); + //Создаём обработчик очереди исходящих + this.outQ = new oq.OutQueue(prms.outgoing, this.dbConn, this.logger); + //Привяжем методы к указателю на себя для использования в обработчиках событий + this.onDBConnected = this.onDBConnected.bind(this); + this.onDBDisconnected = this.onDBDisconnected.bind(this); + } + //При подключении к БД + async onDBConnected(connection) { + this.logger.setDBConnector(this.dbConn); + await this.logger.info("Сервер приложений подключен к БД"); + } + //При отключении от БД + async onDBDisconnected() { + this.logger.removeDBConnector(); + await this.logger.warn("Сервер приложений отключен от БД"); + } + //Запуск сервера + async run() { + await this.logger.info("Запуск сервера приложений..."); + this.dbConn.on(db.SEVT_DB_CONNECTOR_CONNECTED, this.onDBConnected); + this.dbConn.on(db.SEVT_DB_CONNECTOR_DISCONNECTED, this.onDBDisconnected); + await this.logger.info("Подключение сервера приложений к БД..."); + try { + await this.dbConn.connect(); + } catch (e) { + await this.logger.error("Ошибка подключения к БД: " + e.sCODE + ": " + e.sMessage); + stop(); + return; + } + await this.outQ.startProcessing(); + await this.logger.info("Сервер приложений запущен"); + } + //Останов сервера + async stop() { + await this.logger.warn("Останов сервера приложений..."); + await this.outQ.stopProcessing(); + if (this.dbConn.bConnected) { + await this.logger.warn("Отключение сервера приложений от БД..."); + try { + await this.dbConn.disconnect(); + process.exit(0); + } catch (e) { + await this.logger.error("Ошибка отключения от БД: " + e.sCODE + ": " + e.sMessage); + process.exit(1); + } + } else { + process.exit(0); + } + } +} + +//------------------ +// Интерфейс модуля +//------------------ + +exports.ParusAppServer = ParusAppServer; diff --git a/index.js b/index.js index ac4687a..15e571e 100644 --- a/index.js +++ b/index.js @@ -7,81 +7,30 @@ // Подключение библиотек //---------------------- -require("module-alias/register"); -const cfg = require("./config.js"); -const lg = require("./core/logger.js"); -const db = require("./core/db_connector.js"); -const oq = require("./core/out_queue.js"); +require("module-alias/register"); //Поддержка псевонимов при подключении модулей +const cfg = require("./config.js"); //Настройки сервера приложений +const app = require("./core/app.js"); //Сервер приложений //-------------------------- // Глобальные идентификаторы //-------------------------- -let dbConn = new db.DBConnector(cfg.dbConnect); //Взаимодействие с БД -let logger = new lg.Logger(); //Протоколирование работы -let outQ = new oq.OutQueue(cfg.outgoing, dbConn, logger); //Отслеживание очереди исходящих +let appSrv = new app.ParusAppServer(cfg); //Экземпляр сервера приложений //---------------------------------------- // Управление процессом сервера приложений //---------------------------------------- -//При подключении к БД -const onDBConnected = async connection => { - logger.setDBConnector(dbConn); - await logger.info("Сервер приложений подключен к БД"); -}; - -//При отключении от БД -const onDBDisconnected = async () => { - logger.removeDBConnector(); - await logger.info("Сервер приложений отключен от БД"); -}; - -//Запуск сервера -const run = async () => { - await logger.info("Запуск сервера приложений..."); - dbConn.on(db.SEVT_DB_CONNECTOR_CONNECTED, onDBConnected); - dbConn.on(db.SEVT_DB_CONNECTOR_DISCONNECTED, onDBDisconnected); - await logger.info("Подключение сервера приложений к БД..."); - try { - await dbConn.connect(); - } catch (e) { - await logger.error("Ошибка подключения к БД: " + e.sCODE + ": " + e.sMessage); - stop(); - return; - } - await outQ.startProcessing(); - await logger.info("Сервер приложений запущен"); -}; - -//Останов сервера -const stop = async () => { - await logger.warn("Останов сервера приложений..."); - outQ.stopProcessing(); - if (dbConn.bConnected) { - await logger.warn("Отключение сервера приложений от БД..."); - try { - await dbConn.disconnect(); - process.exit(0); - } catch (e) { - await logger.error("Ошибка отключения от БД: " + e.sCODE + ": " + e.sMessage); - process.exit(1); - } - } else { - process.exit(0); - } -}; - //Обработка события "выход" жизненного цикла процесса process.on("exit", code => { //Сообщим о завершении процесса - logger.warn("Сервер приложений остановлен (код: " + code + ") "); + appSrv.logger.warn("Сервер приложений остановлен (код: " + code + ") "); }); //Перехват CTRL + C (останова процесса) process.on("SIGINT", () => { //Инициируем выход из процесса - stop(); + appSrv.stop(); }); //------------ @@ -89,4 +38,9 @@ process.on("SIGINT", () => { //------------ //Старутем -run(); +appSrv + .run() + .then(r => {}) + .catch(e => { + appSrv.logger.error("НЕОЖИДАННАЯ ОШИБКА: " + e); + });