lua-enet (Français)

Disponible depuis LÖVE 0.9.0
Ce-tte module n'est pas supporté-e par des versions plus anciennes.


O.png La documentation officielle de lua-enet est disponible ici. Les fonctionnalités d'ENet sont listées sur sa page web. La documentation officielle pourrait contenir quelques fautes de frappe. La documentation de ce wiki reflète son implémentation dans Löve, cela signifie qu'il peut être considéré comme sûr de suivre ce qui est écrit ici.  


lua-enet consiste en quelques bindings en Lua d'ENet.

Le but d'ENet est de fournir une couche de communication réseau relativement finne, simple et robuste pour les jeux basée sur UDP (User Datagram Protocol). La fonctionnalité première qu'il fournit est une délivrance de paquets (réseau) optionnellement fiable, et dans l'ordre.

ENet omet certaines fonctionnalités réseau de plus haut niveau telles que l'authentification, le lobbying, la découverte de serveurs, le chiffrement, ou les tâches similaires qui sont très spécifiques aux applications, cela permet à la bibliothèque de rester flexible, portable, et facilement embarquable.

Types

Type Description
host Un hôte ENet pour communiquer avec les pairs.
peer Un pair ENet avec lequel les paquets de données peuvent être envoyé ou reçu.
event Une simple table contenant les informations d'un événement.

Fonctions

Fonction Description
host_create Retourne un nouvel hôte.
linked_version Retourne la chaîne de la version d'ENet incluse.


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.

Exemples

serveur.lua

-- serveur.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("Message reçu: ", event.data, event.peer)
      event.peer:send( "pong" )
    elseif event.type == "connect" then
      print(event.peer, "connecté.")
    elseif event.type == "disconnect" then
      print(event.peer, "déconnecté.")
    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("Message reçu: ", event.data, event.peer)
      event.peer:send( "ping" )
    elseif event.type == "connect" then
      print(event.peer, "connecté.")
      event.peer:send( "ping" )
    elseif event.type == "disconnect" then
      print(event.peer, "déconnecté.")
    end
    event = host:service()
  end
end

Ceci est un autre exemple qui crée un serveur (récepteur) et un client (émetteur) sur le même ordinateur, avec le même script. Le client va dire « Hi » au serveur à l'infini car ClientSend() est appelé à l'intérieur de la fonction love.update.

enet = require "enet"

enethost = nil
hostevent = nil
clientpeer = nil

function love.load(args)

	-- Ouvre une connexion hôte afin de recevoir des messages
	enethost = enet.host_create("localhost:6750")
	
	-- Établit une connexion à cet hôte sur le même ordinateur
	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

Voir également



Autres langues