Инструкция по установке SailfishX

Первое покупаем или находим устройства от Sony

  • Sony Xperia XA2 Single SIM (H3113 & H3123 & H3133)
  • Sony Xperia XA2 Dual SIM (H4113 & H4133)
  • Sony Xperia XA2 Plus Single-SIM (H3413)
  • Sony Xperia XA2 Plus Dual-SIM (H4413 & H4493)
  • Sony Xperia XA2 Ultra Single-SIM (H3213 & H3223)
  • Sony Xperia XA2 Ultra Dual-SIM (H4213 & H4233)

Далее нужен сервис который позволит поднять VPN, которое укажет, что вы находиться в одной из стран Европы. Я выбрал Germany и программу (сервис) windscribe. И утилиту Download Master

Указанный сервис может внезапно прервать загрузку, для этого нам и поможет Download Master.

Переходим на сайт shop.jolla.com (если надо регистрируемся).

Переходим на страницу https://shop.jolla.com/downloads/ и скачиваем требуемую версию операционной системы.

Далее следуем инструкции
https://jolla.com/sailfishx-windows-instructions-xa2/

HTTP-сервис

При добавлении новых таблиц/представлений/функций требуется перезапускать серверное приложение на сервере. Эта возможность позволит серверному приложению перестроить внутреннюю схему базы данных. Если эта операция не будет выполнена, то вызов новых RPC функций будет не доступен.

sudo stop mobnius
sudo start mobnius

Скрипт генерации версии

В соответствии с соглашением об определении версии приложения был создан небольшой скрипт на NodeJS, который позволяет вычислять последнее число в версии (последнее число указывает на количество пройденных часов со дня рождения приложения) и записывать его в определенный файл. 

Генерация контекста для работы с базой данных

Для работы с базой данный был создан механизм автоматической перегенерации сущностей. Суть данного механизма состоит в том, что при каждом запуске приложения:

node bin/www

происходит перестроение файла ~/modules/dbcontext.js. Данный файл предоставляет API для работы с базой данных. 

Читать далее «Генерация контекста для работы с базой данных»

Подписка на socket вызовы

Для создания собственных обработчиков для socket требуется регистрация обработчика. Примером для регистрации может быть rpc. В данном приложение вызов всех RPC функций возможен не только по HTTP, но и через WebSocket. 

Регистрация происходит в файле ~/modules/socket/main.js. Для этого требуется подписаться на определенное событие. В текущем примере будет идти речь об rpc.

socket.on(‘rpc', function);  

, где function — это функция которая будет вызвана при получении сообщения от rpc. Данная функция должна выглядеть примерно так: 

function(req, res, socket) { // (1) 
return function (data) { // (2) 
 
} 
} 

, где:

  • res и req (1) — объекты которые примерно эмитируют стандартные response и request;
  • socket (1) — объект подключения;
  • data (2) — данные которые были переданы.

RPC — инъекция

Данная возможность позволяет внедрять собственный код при вызове стандартной RPC-функции. Например, нам требуется при создании нового пользователя записать информацию в лог.  

Для начала нам нужно создать файл, который будет заниматься перехватом функции и реализует запись в лог. 

Создаем файл ~/modules/injections/notification.js.

exports.userCreateWithLog = function(state, action, method, data) {  // (1) 
if(action == ‘sys_users’ && method == ‘Add’) { // (2) 
var login = data.login; // (3) 
console.log(‘Пользователь с логином ’ + login + ‘ создан.’); 
} 
} 

Файл должен экспортировать функцию (1), в нашем случаи это — userCreateWithLogДанная функция принимает несколько параметров (1)

  • state: any — информация об авторизованном пользователе. 
  • action: string — имя RPC — объекта (сущности базы данных); 
  • method: string — имя метода RPC объекта. 
  • data: any — данные переданные RPC функции. 

В функции создаем условие на проверку объекта и метода, который хотим обрабатывать (2)

Далее получаем (3) данные из объекта и выполняем с ним требуемую работу. 

Создание собственных RPC — функций

Создание функция заключается формирование объекта в определенном формате. Для работы 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) 
        } 
    } 
} 
Читать далее «Создание собственных RPC — функций»

Правило формирования токена

Если применяется «Basic – авторизация», то токен должен состоят из строки «Token», символа пробела, плюс логина и пароля, которые разделены символом «:» (двоеточие) и закодированы в строку base64. Например, «Token » + convertToBase64(user:password);.  

Рисунок 1.Пример токена авторизации. 

Токен авторизации должен передаваться в заголовке запроса, например, это – заголовок «rpc-autorization». 

Примечание: Имя заголовка может отличаться в зависимости от проекта. Применение не стандартного заголовка обусловлено тем, что при использовании proxy-серерва, стандартные заголовки могут быть переопределены. 

Пакет для передачи данных

«Пакет» — единица данных для обмена информацией. Обмен данными между мобильным устройством происходить при помощи «пакетов». Пакет состоит из:

  • заголовка;
  • метаданных;
  • строкового блока;
  • бинарного блока.

Заголовок

– представляет из себя строку, в которой указывается число. Число предназначено для определения длины метаданных. Строка имеет длину 16 символов и состоит из типа, чисел, «наполнителя» и статуса пакета. Наполнителем должен являться символ «.» (точка). Статусы пакета: 

  • 0 – создан
  • 1 – доставлен 
  • 2 – в обработке 
  • 3 – обработан 
  • 9 – обработан с ошибкой

Пример

NML950………0

, где NML — тип пакета, 950 – это длина строки, в которой содержатся метаданные «пакета», а остальные символы — это «наполнители».

Примечание: Длина строки должна равняться 16 символам.

Читать далее «Пакет для передачи данных»