97 lines
3.6 KiB
JavaScript
97 lines
3.6 KiB
JavaScript
/*
|
||
Сервис интеграции ПП Парус 8 с WEB API
|
||
Модуль ядра: обработчик исходящего сообщения
|
||
*/
|
||
|
||
//----------------------
|
||
// Подключение библиотек
|
||
//----------------------
|
||
|
||
const _ = require("lodash"); //Работа с массивами и коллекциями
|
||
const { makeModuleFullPath, validateObject } = require("./utils"); //Вспомогательные функции
|
||
const { ServerError } = require("./server_errors"); //Типовая ошибка
|
||
const { NQUEUE_EXEC_STATE_APP_OK, NQUEUE_EXEC_STATE_APP_ERR } = require("../models/obj_queue"); //Схема валидации сообщения очереди обмена
|
||
const objOutQueueProcessorSchema = require("../models/obj_out_queue_processor"); //Схема валидации сообщений обмена с бработчиком очереди исходящих сообщений
|
||
const {
|
||
SERR_MODULES_BAD_INTERFACE,
|
||
SERR_OBJECT_BAD_INTERFACE,
|
||
SERR_MODULES_NO_MODULE_SPECIFIED
|
||
} = require("./constants"); //Глобальные константы
|
||
|
||
//--------------------------
|
||
// Глобальные идентификаторы
|
||
//--------------------------
|
||
|
||
//Сообщени для родительского процесса
|
||
let result = {
|
||
nExecState: null,
|
||
sExecMsg: null,
|
||
blResp: null
|
||
};
|
||
|
||
//------------
|
||
// Тело модуля
|
||
//------------
|
||
|
||
//Установка состояния ошибки в ответном сообщении
|
||
const setErrorResult = e => {
|
||
//Выставим код состояния - ошибка обработки сервером приложений
|
||
result.nExecState = NQUEUE_EXEC_STATE_APP_ERR;
|
||
//Выставим сообщение об ошибке
|
||
result.sExecMsg = e.message;
|
||
};
|
||
|
||
//Установка состояния успеха в ответном сообщении
|
||
const setOKResult = () => {
|
||
//Выставим код состояния - ошибка обработки сервером приложений
|
||
result.nExecState = NQUEUE_EXEC_STATE_APP_OK;
|
||
//Выставим сообщение об ошибке
|
||
result.sExecMsg = null;
|
||
};
|
||
|
||
//Обработка задачи
|
||
const processTask = async task => {
|
||
setTimeout(() => {
|
||
setOKResult();
|
||
process.send(result);
|
||
}, 3000);
|
||
};
|
||
|
||
//---------------------------------
|
||
// Управление процессом обработчика
|
||
//---------------------------------
|
||
|
||
//Перехват CTRL + C (останов процесса)
|
||
process.on("SIGINT", async () => {});
|
||
|
||
//Перехват CTRL + \ (останов процесса)
|
||
process.on("SIGQUIT", () => {});
|
||
|
||
//Перехват мягкого останова процесса
|
||
process.on("SIGTERM", () => {});
|
||
|
||
//Перехват ошибок
|
||
process.on("uncaughtException", e => {
|
||
//Выставляем ошибку в сообщении
|
||
setErrorResult(e);
|
||
//Отправляем ответ родительскому процессу
|
||
process.send(result);
|
||
});
|
||
|
||
//Приём сообщений
|
||
process.on("message", task => {
|
||
//Проверяем структуру переданного сообщения
|
||
let sCheckResult = validateObject(
|
||
task,
|
||
objOutQueueProcessorSchema.OutQueueProcessorTask,
|
||
"Задача обработчика очереди исходящих сообщений"
|
||
);
|
||
//Если структура объекта в норме
|
||
if (!sCheckResult) {
|
||
//Запускаем обработку
|
||
processTask(task);
|
||
} else {
|
||
throw new ServerError(SERR_OBJECT_BAD_INTERFACE, sCheckResult);
|
||
}
|
||
});
|