Создание функция заключается формирование объекта в определенном формате. Для работы RPC требуется, чтобы каждый объект находился в определенном пространстве имен, например в текущем проекте это — PN.
Например, нам требуется создать собственный объект, который позволит получить серверное время. Для этого нам нужно создать файл, который должен располагаться в папке ~/modules/custom-context. Пусть это будет shell.js
Информация, которая находиться в файле shell.js
/**
* объект для формирования ответа
*/
var result_layout = require('mobnius-pg-dbcontext/modules/result-layout'); // (1)
/**
* Объект с набором RPC функций
*/
exports.shell = function (session) { // (2)
return { // (3)
isLocal: true, // нужно указывать, иначе безопасность при создании meta не пропустит (4)
/**
* Получение серверного времени
* @param {*} data
* @param {*} callback
* @example
* // никаких параметров не нужно передавать
* PN.shell.getServerTime({}, function(){})
*/
getServerTime: function (data, callback) { // (5)
callback(result_layout.ok([new Date()])); // (6)
}
}
}
Где, result_layout (1) — специальный объект, который позволяет возвращать данным в определенном формате. Подробнее тут https://docs.appcode.pw/docs?project=mobnius-pg-dbcontext&file=modules/result-layout.js.
Наш файл экспортирует (2) один объект shell, который должен являться функцией. Данная функция принимает объект session, к которой храниться информация пользователе.
Функция обязана вернуть объект (3) в котором должно быть свойство isLocal (4) со значением true. Отсутствие этого свойства со значение приведет к том, что функция будет не доступна для обработки.
Внутри этого же объекта объявляем наши функцию getServerTime (5) которая работает асинхронно. Данная функция принимает на вход два параметра:
- data: any — входные параметры запроса
- callback: ()=>void — функция обратного вызова. Вызывается при возвращении результата.
В функцию callback передается объект, который примет клиентское приложение. (6) Передаваемое значение должно быть указано как массив (это обязательно).
После создания данного файла, требуется зарегистрировать его. Для этого нужно перейти в файл ~/modules/rpc/index.js и найти строчки кода типа:
context.push(...);
Сюда и требуется передать наш RPC-объект.
context.push(require(‘../costom-context/shell’));