lua-enet (Русский)

Available since LÖVE 0.9.0
This module is not supported in earlier versions.


O.png Официальная документация доступна здесь. Преимущества 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