82 lines
3.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
Сервис интеграции ПП Парус 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;