**This is an old revision of the document!**

Peer-to-peer

This is a draft for a potential future feature of GDevelop.

This is an experimental feature, it is potentially subject to change and may contain bugs.

GDevelop supports peer-to-peer (P2P) connections to enable basic multiplayer games. This works through the concept of remote events. Connect multiple instances of the game using their ID, before remotely triggering conditions on the other instances.

This extension is not suitable for all types of multiplayer games and is potentially unsafe against cheating. As every instance of the game is connected, there is no machine more trusted than others that can verify if someone is cheating (unlike dedicated servers). P2P supports a maximum of 250 simultaneous connections, and is therefore also not suited for multiplayer-focused games like Agar.io or MMOs.


Selecting a broker server

Computers can't just connect to each other without being able to indentify themselves, to know where to send the data. To do so we need a broker server, a server with a fixed adress (so that he can be identified) that stores all the adresses of the connected clients and give them to the clients so that they can connect to each other. You have two options here:

Set up your own server

You can set up your own server easily. You will need to install Node JS. The LTS version is recommended. Then open a command line. To do so on Windows, you can press the Windows and r keys, then type cmd in the popup, and enter. In the command line, type the first time only (to install the server) npm install peer -g Then, whenever you want to start the server, just type in a command line peerjs --port <the port>. I will use the port 9000 through the article, but you can use any that is not already used by your machine. You can pass other options to the PeerJS server, see it's website for more informations.
You can the use the “Use custom broker server action” to connect to your server. You can enter localhost as host to point directly to your own address.

Note that this is a local server, so it will only work on your machine. When releasing your game you will need to deploy one to a hosting website like heroku.


Use the default server

It is not recommended to use that server, you should use your own if possible. The default server is not operated by GDevelop and GDevelop is not responsible if anything goes wrong using that server.

You can also use the default server provided by PeerJS. To use that server use the action “Use default server”.

Connecting

To connect instances, you need to enter their ID in the other instances. The ID can be found with the expression P2P::GetID(). To connect, use the “Connect to other instance” action and pass as parameter the ID of another instance. Both instances will then connect automatically. You can then send an event from one instance to the other one to make sure that the connection is established.

Interracting with connected games

Once you got connected, you can trigger actions remotely. You can select a specific other game instance (by it's id) or send an event to all

Data loss

You might be wondering what the data loss is for. Who would want to lose data right?