Вы же помните OpenNet? Сетка такая была для OpenComputers. Хорошая вещь, только непонятно, как она работает, как её обслуживать, а ещё она централизованная. И огромная. В общем, неудобно.
Поэтому предлагаем вам решение. Удобное и простое.
Вкратце
Zn (читать как "дзен") — это очень простая (код без комментов занимает меньше четырёх килобайт) децентрализованная (нет центрального сервера, все узлы сети равны) неструктурированная (отсутствует какая-либо структуризация клиентов) сетка для OpenComputers, созданная мною и @Totoro.
Сеть абсолютно не защищена от какого-либо вмешательства: все в радиусе рестранслятора могут получить исходное сообщение и подменить его. Поэтому если требуется что-то более надёжное, нужно сделать систему шифрования.
Из-за того, что мы выбросили защиту от подмены и структуризацию, к сети подключиться может любой хост: как сервер, планшет, робот и компьютер, так и дрон или микроконтроллер. Для последних двух хостов есть специальный билд.
Каждый подключённый к сети клиент является её узлом: он может ретранслировать, отсылать, броадкастить, принимать сообщения и пинговать соседей.
Кроме того, при отправке сообщения можно запросить подтверждение его получения.
API
Функции
zn.connect(): boolean Подключиться к сети. Аргументы Нет. Возврат true, если всё ок. false, если клиент уже подключён.
zn.disconnect(): boolean Отключиться от сети. Аргументы Нет. Возврат true при успешном отключении. false, если уже отключён.
zn.send(address: string, message: string): boolean Отправить сообщение какому-либо узлу. Аргументы address — адрес модема конечного узла. message — сообщение для отправки. Возврат true — сообщение отправлено (не обязательно успешно доставлено).
zn.broadcast(message: string): boolean Послать сообщение для всех узлов сети. Аргументы message — сообщение для отправки. Возврат true.
zn.ping() Пингануть соседние узлы. Аргументы Нет. Возврат Нет.
События
zn_message(message: string, receiverAddr: string, senderAddr: string) Получено сообщения от узла сети. Аргументы message — сообщение. receiverAddr — адрес модема, поймавшего сообщение. senderAddr — адрес модема отправителя.
zn_ping(senderAddr: string, distance: number) Получен запрос на пинг. Аргументы senderAddr — адрес модема отправителя. distance — расстояние до узла.
zn_pong(senderAddr: string, distance: number) Получен ответ на пинг. Аргументы senderAddr — адрес модема отправителя. distance — расстояние до узла.
Пример кода
local event = require('event')
local zn = require('zn')
zn.connect()
zn.broadcast("Hello Zn members!")
while true do
local _, message = event.pull("zn_message")
if message == "bye" then
break
else
print(message)
end
end
zn.disconnect()
Установка
Качаем hpm: http://computercraft.ru/topic/1855-repozitorii-programm-hel/?do=findComment&comment=27287
Ставим пакет: hpm install zn.
Версия для EEPROM хранится в /usr/share/zn/eeprom.lua. Чтобы записать его, вставьте чистый EEPROM в комп и пропишите
$ flash -q /usr/share/zn/eeprom.lua "Zn node"
А затем вставьте EEPROM в дрона, µC или куда-либо ещё.
Ссылка на пакет.