Network
Network связывает main.lua и server.lua одного Reflex-модуля. Сообщение представляет собой Lua-таблицу: одна сторона отправляет её через SendTable(), другая принимает через OnTableReceived().
Передача не отображается игроку автоматически. Сервер обычно принимает решение и отправляет клиенту компактное состояние, а клиент уже обновляет UI, ImGui, звук или уведомление. SendTable() также не ждёт ответ и не подтверждает доставку возвращаемым значением.
Как обрабатывается сообщение
Заголовок раздела «Как обрабатывается сообщение»SendTable() сериализует поддерживаемые значения из таблицы и передаёт пакет второй части того же Reflex-модуля. При получении её runtime создаёт новую Lua-таблицу и вызывает callback, зарегистрированный через OnTableReceived().
Отправитель не вызывает серверную функцию напрямую и не получает её результат. Если протоколу нужен ответ, принимающая сторона должна отправить отдельное сообщение с собственным kind и идентификатором запроса.
Быстрый пример
Заголовок раздела «Быстрый пример»Клиент запрашивает текущее состояние раунда.
Network:OnTableReceived(function(data) if data.kind == "round_state" then print("Round: " .. tostring(data.roundId)) endend)
Network:SendTable({ kind = "get_round_state"})Сервер отвечает на запрос.
Network:OnTableReceived(function(data) if data.kind == "get_round_state" then Network:SendTable({ kind = "round_state", roundId = DefusalGame.RoundId }) endend)Поддерживаемые значения
Заголовок раздела «Поддерживаемые значения»Передаются:
string;number;boolean, включаяfalse;- вложенные таблицы;
- последовательные таблицы вида
{ "first", "second" }.
nil, функции и объекты API вроде Vector3 не передаются. Если они находятся в поле таблицы, это поле отсутствует на принимающей стороне.
Network:SendTable({ position = Vector3.zero, -- поле будет исключено callback = function() end, -- поле будет исключено visible = false, -- передаётся options = { color = "blue", size = 2 }})Чтобы передать вектор, разложите его на числа:
local position = Vector3.new(10, 20, 30)
Network:SendTable({ position = { x = position.x, y = position.y, z = position.z }})OnTableReceived
Заголовок раздела «OnTableReceived»Network:OnTableReceived(callback)Регистрирует callback для таблиц, отправленных противоположной стороной модуля.
| Аргумент | Тип | Описание |
|---|---|---|
callback |
function(data) |
Функция, получающая восстановленную Lua-таблицу. |
Метод возвращает nil.
SendTable
Заголовок раздела «SendTable»Network:SendTable(data)Отправляет таблицу противоположной стороне Reflex-модуля.
| Аргумент | Тип | Описание |
|---|---|---|
data |
table |
Данные сообщения. |
Метод возвращает nil. Отправка не является запросом сама по себе: если нужен ответ, договоритесь о полях сообщения и обработайте его через OnTableReceived().