A new easy-to-use networking system is coming soon to Leadwerks Game Engine. Built on the Enet library, Leadwerks networking provides a fast and easy way to quickly set up multiplayer games. Each computer in the game is either a server or a client. The server hosts the game and clients can join and leave the game at will. On the other hand, when the server leaves the game, the game is over!
Creating a Client
You can soon create a client with one command in Leadwerks:
client = Client:Create()
To connect to a server, you need to know the IP address of that computer:
To get information from the other computer, we simply update the client and retrieve a message:
local message = client:Update() if message.id == Message.Connected then print("Connected to server") elseif message.id == Message.Disconnected then print("Disconnected from server") elseif message.id == Message.Chat then print("New chat message: "..message.stream:ReadString()); end
You can even send messages, consisting of a simple message ID, a string, or a stream.
client:Send(Message.Chat,"Hello, how are you today?")
There are two optional flags you can use to control the way your messages are sent. If you specify Message.Ordered, your packets will arrive in the order they were sent (they won't necessarily otherwise). You can use this for updating the position of an object, so that the most recent information is always used. The Message.Reliable flag should be used for important messages that you don't want to miss. UDP packets are not guaranteed to ever arrive at their destination, but messages sent with this flag are. Just don't use it for everything, since it is slower!
When we're ready to leave the game, we can do that just as easily:
A dedicated server does not have anyone playing the game. The whole computer is used only for processing physics and sending and receiving information. You can create a dedicated server, but it's better to let your players host their own games. That way there's always a game to join, and you don't have to buy an extra computer and keep it running all the time.
Creating a Server
Your game should be able to run both as a client and as a server, so any player can host or join a game. Creating the game server is just as easy.
local server = Server:Create(port)
Once the server is created, you can look up your IP address and ask a friend to join your game. They would then type the IP address into their game and join.
The server can send and receive messages, too. Because the server can be connected to multiple clients, it must specify which client to send the message to. Fortunately, the Message structure contains the Peer we received a message from. A peer just means "someone else's computer". If your computer is the client, the server you connect to is a peer. If your computer is the server, all the other clients are peers:
local message = client:Update() if message.id == Message.Connected then player2 = message.peer end
You can use the peer object to send a message back to that computer:
server:Send(peer, Message.Chat, "I am doing just great! Thanks for asking.")
If you want to boot a player out of your game, that's easy too:
The broadcast command can be used to send the same message out to all clients:
server:Broadcast(Message.Chat, "I hope you are all having a great time in my cool chat program!")
You can make your game public, allowing anyone else in the world who has the game to play with you. You specify a name for your game, a description of your server, and call this command to send a message to the Leadwerks server:
server:Publish("SuperChat","My SuperChat Server of Fun")
All client machines, anywhere in the world, can retrieve a list of public games and choose one to join:
for n=0,client:CountServers("SuperChat")-1 do local remotegame = client:GetServer(n) print(remotegame.address) print(remotegame.description) end
This is a lot easier than trying to type in one person's IP address. For added control, you can even host a games database on your own server, and redirect your game to get information from there.