Перейти к содержимому

Network

Network связывает main.lua и server.lua одного Reflex-модуля. Сообщение представляет собой Lua-таблицу: одна сторона отправляет её через SendTable(), другая принимает через OnTableReceived().

Передача не отображается игроку автоматически. Сервер обычно принимает решение и отправляет клиенту компактное состояние, а клиент уже обновляет UI, ImGui, звук или уведомление. SendTable() также не ждёт ответ и не подтверждает доставку возвращаемым значением.

SendTable() сериализует поддерживаемые значения из таблицы и передаёт пакет второй части того же Reflex-модуля. При получении её runtime создаёт новую Lua-таблицу и вызывает callback, зарегистрированный через OnTableReceived().

Отправитель не вызывает серверную функцию напрямую и не получает её результат. Если протоколу нужен ответ, принимающая сторона должна отправить отдельное сообщение с собственным kind и идентификатором запроса.

Клиент запрашивает текущее состояние раунда.

scripts/main.lua
Network:OnTableReceived(function(data)
if data.kind == "round_state" then
print("Round: " .. tostring(data.roundId))
end
end)
Network:SendTable({
kind = "get_round_state"
})

Сервер отвечает на запрос.

scripts/server.lua
Network:OnTableReceived(function(data)
if data.kind == "get_round_state" then
Network:SendTable({
kind = "round_state",
roundId = DefusalGame.RoundId
})
end
end)

Передаются:

  • 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
}
})
Network:OnTableReceived(callback)

Регистрирует callback для таблиц, отправленных противоположной стороной модуля.

Аргумент Тип Описание
callback function(data) Функция, получающая восстановленную Lua-таблицу.

Метод возвращает nil.

Network:SendTable(data)

Отправляет таблицу противоположной стороне Reflex-модуля.

Аргумент Тип Описание
data table Данные сообщения.

Метод возвращает nil. Отправка не является запросом сама по себе: если нужен ответ, договоритесь о полях сообщения и обработайте его через OnTableReceived().

  • попытка передать Vector3, Agent, Texture или функцию напрямую;
  • ожидание возвращаемого значения от SendTable();
  • отсутствие поля, различающего типы сообщений;
  • доверие клиентским данным в серверной игровой логике без проверки.