forked from CITKParus/P8-ExchangeService
82 lines
3.4 KiB
JavaScript
82 lines
3.4 KiB
JavaScript
/*
|
||
Сервис интеграции ПП Парус 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;
|