Несколько способов передачи данных без сети (p2p)
Dmitry VorontsovВ этой статье я рассмотрю довольно узкую тему передачи данных между устройствами, когда нет сети интернет и локальной сети и расскажу о практических наработках, которые накопились за несколько лет практики в подобных вопросах. Для обмена данными «в полях» в нашей необъятной стране это иногда довольно животрепещущий вопрос, от которого зависят бизнес-процессы и эффективность работы. Данные способы реализованы в SimpleUI версии 12.05.25. Это экспериментальный релиз, он будет дорабатываться по мере необходимости.
Документация по данным способам тут: https://uitxt.readthedocs.io/ru/latest/sync.html#p2p
Вариант #1: «оптический между двумя мобильными устройствами»
Сразу оговорюсь, этот и следующий «оптический» вариант, не предназначены для передачи прям совсем больших объемов, т.е. «Войну и мир» ими лучше не передавать, но условную «накладную» - без проблем. Принцип действия основан на расширении QR-кода. Так как QR-код вмещает ограниченное количество информации, а потребоваться может больше, то требуется просто разбить информацию на несколько QR-кодов. т.е. буквально допустим исходной информацией, в которой содержится «накладная» является JSON, мы его записываем в виде строки, а строку режем примерно по 300-500 символов и получаем несколько QR кодов.
Дальше, т.к. на экран влезает только один мы должны воспроизвести следующий алгоритм
0. Разбиваем JSON на список строк не более N-символов(допустим 300)
1. Располагаем 2 устройства дуг напротив друга так чтобы они видели экран друг друга (нужна фронтальная камера)
2. Показываем на устройстве отправителе 1-й QR-код, в котором закодирован номер части
3. На устройстве отправителе считываем код и показываем номер считанной части
4. На устройстве получателе считываем код и показываем QR-код по списку с номером части+1
5. Это повторяется N-раз пока не закончатся коды и не будет принято подтверждение о последнем коде
В чем преимущества данного способа? Не смотря на невысокую скорость передачи у этого способа быстрая скорость подготовки – запустились камеры и произошел обмен. Не требуется соединения, он не капризный в отличии от Direct WIFI
Вариант #2: «С печатной формы или с экрана на устройство»
Это вариация предыдущего способа, только QR-коды выведены сразу, т.к. носитель позволяет. Алгоритм сканирования просто убеждается что все части собраны и завершает работу. ActiveCV тут помогает тем, что подсвечивает зеленым те коды, которые уже отсканированы. Как в компьютерной игрушке.
Вариант #3: WiFi Direct
Реализовано это так, что оба устройства одновременно поднимают точки доступа и являются клиентами, чтобы сделать обмен одноранговым. Обмен может быть инициирован из любого бизнес процесса из кода, т.е. можно подготовить данные в коде обработчика, запустить командой окно обмена в котором выполняется поиск устройств рядом, и на устройстве приемнике также запустить функцию обмена для приема из процесса или просто из общего меню приложения. На получение данных есть соответственно тоже свое событие и можно написать обработчик чтобы его записать например в СУБД как в примере.