Difference between revisions of "Multiplayer"

From GiderosMobile
Line 5: Line 5:
 
There are three ways to implement multiplayer games:
 
There are three ways to implement multiplayer games:
 
* '''Server Mode''': Dedicated server with public IP
 
* '''Server Mode''': Dedicated server with public IP
* '''Host Mode''': One player is the host, all other players connect to them
+
* '''Host Mode''': One player is the host, all other players connect to him
 
* '''Shared Mode''': Cloud Room has StateAuthority
 
* '''Shared Mode''': Cloud Room has StateAuthority
  
 +
''Server Mode'' and ''Shared Mode'' can be daunting and won't be covered here.
  
''Server Mode'' and ''Shared Mode'' can be daunting and won't be covered here. Some multiplayer platforms SDK you can check:
+
=== Host Mode ===
 +
Host Mode is the easiest way to get started with multiplayer games. In order to implement it in Gideros, we will use the '''Gideros Unite Framework''' written by Arturs Sosins (@'''ar2rsawseen''').
 +
 
 +
Get started here: '''[[Gideros Unite Framework]]'''
 +
 
 +
=== Some Multiplayer Platforms SDK ===
 
* https://noobhub.co.za/
 
* https://noobhub.co.za/
 
* https://github.com/Overtorment/NoobHub
 
* https://github.com/Overtorment/NoobHub
Line 15: Line 21:
 
* https://github.com/EsotericSoftware/kryonet
 
* https://github.com/EsotericSoftware/kryonet
  
And to get you started using Noobhub:
+
To get you started using Noobhub with Gideros:
 
* https://forum.gideros.rocks/discussion/4293/noobhub-free-opensource-multiplayer-and-network-messaging-for-gideros-coronasdk/p1
 
* https://forum.gideros.rocks/discussion/4293/noobhub-free-opensource-multiplayer-and-network-messaging-for-gideros-coronasdk/p1
  
 
=== Host Mode ===
 
Host Mode is the easiest way to get started with multiplayer games. In order to implement it in Gideros, we will use the '''Gideros Unite Framework''' written by Arturs Sosins (@'''ar2rsawseen''').
 
 
==== '''[[Gideros Unite Framework]]''' ====
 
The Gideros Unite framework allows a host (server) and clients to connect over a Local Area Network.
 
 
Some demo code:
 
<syntaxhighlight lang="lua">
 
-- we can get all devices that are connected to our network
 
local devices = {}
 
serverlink:addEventListener("device", function(e)
 
print(e.data.id, e.data.ip, e.data.host)
 
devices[e.data.id] = {}
 
devices[e.data.id].ip = e.data.ip
 
devices[e.data.id].name = e.data.host
 
end)
 
 
serverlink:getDevices()
 
 
-- add some methods, that could be called by other clients or server through network
 
-- draw something
 
serverlink:addMethod("draw", self.drawLine, self)
 
-- end drawing
 
serverlink:addMethod("end", self.stopDrawing, self)
 
-- clear drawing
 
serverlink:addMethod("clear", self.reset, self)
 
 
-- then you can call this methods when needed
 
serverlink:callMethod("clear")
 
serverlink:callMethod("draw", someX, someY)
 
 
-- or call method of specific device using its id
 
serverlink:callMethodOf("clear", 112233)
 
serverlink:callMethodOf("draw", someX, someY, 112233)
 
 
-- and when game is finished
 
serverlink:close()
 
</syntaxhighlight>
 
 
'''Server example code'''
 
<syntaxhighlight lang="lua">
 
function onAccept(e)
 
-- auto accept client with provided id
 
serverlink:accept(e.data.id)
 
end
 
 
-- create a server instance
 
serverlink = Server.new({username = 'myServer'})
 
-- add event to monitor when new client wants to join
 
serverlink:addEventListener('newClient', onAccept)
 
-- start broadcasting to discover devices
 
serverlink:startBroadcast()
 
 
-- and then before entering game logic
 
-- if we are ready to play stop broadcasting
 
serverlink:stopBroadcast()
 
-- and start only listening to clients
 
serverlink:startListening()
 
</syntaxhighlight>
 
 
'''Client example code'''
 
<syntaxhighlight lang="lua">
 
function onJoin(e)
 
-- auto connect to server with provided id
 
serverlink:connect(e.data.id)
 
end
 
 
-- create client instance
 
serverlink = Client.new({username = 'IAmAClient'})
 
-- create event to monitor when new server starts broadcasting
 
serverlink:addEventListener('newServer', onJoin)
 
 
-- event to listen if server accepted our connection
 
serverlink:addEventListener('onAccepted', function()
 
print('server accepted our connection')
 
end)
 
</syntaxhighlight>
 
 
'''Game logic example'''
 
The game logic is the same for server and clients
 
<syntaxhighlight lang="lua">
 
-- we can get all devices that are connected to our network
 
local devices = {}
 
serverlink:addEventListener('device', function(e)
 
print(e.data.id, e.data.ip, e.data.host)
 
devices[e.data.id] = {}
 
devices[e.data.id].ip = e.data.ip
 
devices[e.data.id].name = e.data.host
 
end)
 
serverlink:getDevices()
 
 
-- add some methods, that could be called by other clients or server through network
 
-- draw something
 
serverlink:addMethod('draw', self.drawLine, self)
 
-- end drawing
 
serverlink:addMethod('end', self.stopDrawing, self)
 
-- clear drawing
 
serverlink:addMethod('clear', self.reset, self)
 
 
-- then you can call these methods when needed
 
serverlink:callMethod('clear')
 
serverlink:callMethod('draw', someX, someY)
 
 
-- or call method of specific device using its id
 
serverlink:callMethodOf('clear', 112233)
 
serverlink:callMethodOf('draw', someX, someY, 112233)
 
 
-- when game is finished
 
serverlink:close()
 
</syntaxhighlight>
 
  
 
{{GIDEROS IMPORTANT LINKS}}
 
{{GIDEROS IMPORTANT LINKS}}

Revision as of 08:22, 26 August 2024

Supported platforms: Platform android.pngPlatform ios.pngPlatform mac.pngPlatform pc.pngPlatform html5.pngPlatform winrt.pngPlatform win32.pngPlatform linux.png

Multiplayer

There are three ways to implement multiplayer games:

  • Server Mode: Dedicated server with public IP
  • Host Mode: One player is the host, all other players connect to him
  • Shared Mode: Cloud Room has StateAuthority

Server Mode and Shared Mode can be daunting and won't be covered here.

Host Mode

Host Mode is the easiest way to get started with multiplayer games. In order to implement it in Gideros, we will use the Gideros Unite Framework written by Arturs Sosins (@ar2rsawseen).

Get started here: Gideros Unite Framework

Some Multiplayer Platforms SDK

To get you started using Noobhub with Gideros: