lua-enet (Русский)
Available since LÖVE 0.9.0 |
This module is not supported in earlier versions. |
Официальная документация доступна здесь. Преимущества ENet описаны на домашней странице. Официальная документация может иметь расхождения с тем, что написано здесь. На этой странице описана реализация, используемая в LOVE - это значит, что желательно следовать этой документации. |
lua-enet это простой Lua-биндинг для библиотеки ENet.
Задача ENet предоставить разработчику простой и надёжный слой сетевой коммуникации для игр, работающий поверх UDP (User Datagram Protocol). Основным преимуществом является опционально активируемые надёжность канала и последовательная доставка (пакеты гарантированно будут доставлены клиенту в строго определённом порядке, если это нужно).
ENet НЕ занимается авторизацией, обнаружением серверов, созданием лобби, шифрованием и другими подобными задачами, которые специфичны для каждого отдельно взятого приложения. Это позволяет сохранять библиотеке гибкость, переносимость и лёгкую встраиваемость.
Типы
Тип | Описание |
---|---|
host | Ссылка на enet-host для взаимодействия с пирами. |
peer | Ссылка на пир, с помощью которой можно принимать, либо передавать данные. |
event | Простая таблица, содержащая информацию о событии. |
Функции
Function | Description |
---|---|
host_create | Создаёт новый enet-host и возвращает Lua-ссылку на него. |
linked_version | Возвращает строку, содержащую версию библиотеки ENet. |
Примеры
server.lua
-- server.lua
local enet = require "enet"
local host = enet.host_create("localhost:6789")
while true do
local event = host:service(100)
while event do
if event.type == "receive" then
print("Got message: ", event.data, event.peer)
event.peer:send( "pong" )
elseif event.type == "connect" then
print(event.peer, "connected.")
elseif event.type == "disconnect" then
print(event.peer, "disconnected.")
end
event = host:service()
end
end
client.lua
-- client.lua
local enet = require "enet"
local host = enet.host_create()
local server = host:connect("localhost:6789")
while true do
local event = host:service(100)
while event do
if event.type == "receive" then
print("Got message: ", event.data, event.peer)
event.peer:send( "ping" )
elseif event.type == "connect" then
print(event.peer, "connected.")
event.peer:send( "ping" )
elseif event.type == "disconnect" then
print(event.peer, "disconnected.")
end
event = host:service()
end
end
Другой пример, который создаёт сервер (приёмник) и клиент (передатчик) на одном компьютере в одном скрипте. Клиент бесконечно отправляет на сервер сообщение "Hi", так как ClientSend() вызывается в love.update.
enet = require "enet"
enethost = nil
hostevent = nil
clientpeer = nil
function love.load(args)
-- создаём хост для приёма клиентов
enethost = enet.host_create("localhost:6750")
-- подключаемся к созданному локальному хосту
enetclient = enet.host_create()
clientpeer = enetclient:connect("localhost:6750")
end
function love.update(dt)
ServerListen()
ClientSend()
end
function ServerListen()
hostevent = enethost:service(100)
if hostevent then
print("Server detected message type: " .. hostevent.type)
if hostevent.type == "connect" then
print(hostevent.peer, "connected.")
end
if hostevent.type == "receive" then
print("Received message: ", hostevent.data, hostevent.peer)
end
end
end
function ClientSend()
enetclient:service(100)
clientpeer:send("Hi")
end
Смотрите также
Other Languages
Dansk –
Deutsch –
English –
Español –
Français –
Indonesia –
Italiano –
Lietuviškai –
Magyar –
Nederlands –
Polski –
Português –
Română –
Slovenský –
Suomi –
Svenska –
Türkçe –
Česky –
Ελληνικά –
Български –
Русский –
Српски –
Українська –
עברית –
ไทย –
日本語 –
正體中文 –
简体中文 –
Tiếng Việt –
한국어
More info