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); + });