lua-enet

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


O.png Official documentation for lua-enet is available here. ENet's features are listed on its homepage. The official documentation may have typos. The documentation on this wiki reflects Löve's implementation, meaning it should be safe to follow what's written here.  


lua-enet is simply some Lua bindings for ENet.

ENet's purpose is to provide a relatively thin, simple and robust network communication layer for games on top of UDP (User Datagram Protocol).The primary feature it provides is optional reliable, in-order delivery of packets.

ENet omits certain higher level networking features such as authentication, lobbying, server discovery, encryption, or other similar tasks that are particularly application specific so that the library remains flexible, portable, and easily embeddable.

Types

Type Description
host An ENet host for communicating with peers.
peer An ENet peer which data packets may be sent or received from.
event A simple table containing information on an event.

Functions

Function Description
host_create Returns a new host.
linked_version Returns the included ENet's version string.


enet.host create (Français) Retourne un nouvel host (hôte)
enet.host:broadcast (Français) Met en file d'attente un paquet à envoyer à tous les pairs connectés.
enet.host:channel limit (Français) Règle le nombre maximum de canaux alloués.
enet.host:check events (Français) Vérifie tous les évènements en file d'attente et en distribue un si disponible.
enet.host:compress with range coder (Français) Commute un codage d'ingervalle, PPM adaptatif d'ordre 2, pour les transmissions des données à tous les pairs.
enet.host:connect (Français) Connecte un hôte à un autre hôte distant
enet.host:destroy (Français) Détruit la structure de l'hôte et ferme toutes ses connexions.
enet.host:flush (Français) Envoie tous les paquets en file d'attente.
enet.host:get peer (Français) Retourne le pair connecté à l'index spécifié (commence à 1).
enet.host:get socket address (Français) Retourne une chaîne de caractères décrivant l'adresse du socket de l'hôte donné.
enet.host:service (Français) Attend que des event (évènements), envoient ou reçoivent n'importe quel paquet préparé.
enet.linked version (Français) Retourne la version incluse d'ENet sous forme de chaîne de caractères.
enet.peer:disconnect (Français) Demande une déconnexion à un pair.
enet.peer:disconnect now (Français) Force une déconnexion immédiate du pair.
enet.peer:index (Français) Retourne l'index du pair.
enet.peer:ping (Français) Envoie un signal ping au pair.
enet.peer:ping interval (Français) Spécifie un intervalle en millisecondes entre les envois de pings à l'autre bout de la connexion.
enet.peer:receive (Français) Tente d'extraire de la file d'attente un paquet entrant pour ce pair.
enet.peer:send (Français) Met en fil d'attente, un paquet à émettre à un peer (pair).
enet.peer:state (Français) Retourne l'état d'un pair sous forme de chaîne de caractères.

Examples

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

This is another example that creates a server (receiver) and a client (sender) on the same computer with the same script. The client will say "Hi" to the server endlessly because ClientSend() is called inside love.update.

enet = require "enet"

enethost = nil
hostevent = nil
clientpeer = nil

function love.load(args)

	-- establish host for receiving msg
	enethost = enet.host_create("localhost:6750")
	
	-- establish a connection to host on same PC
	enetclient = enet.host_create()
        clientpeer = enetclient:connect("localhost:6750")

end

function love.update(dt)
	ServerListen()	
	ClientSend()
end

function love.draw()
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

See Also

Other Languages