Difference between revisions of "Multiplayer"
Line 29: | Line 29: | ||
About protocols, it is possible to use tcp, udp or both (by binding some method to tcp, if reliability is needed, and others to udp for faster data processing). | About protocols, it is possible to use tcp, udp or both (by binding some method to tcp, if reliability is needed, and others to udp for faster data processing). | ||
− | Package | + | ==== Unite Package '''[[Media:Unite.zip|Unite.zip]]''' ==== |
+ | ==== Gideros application project '''[[Media:DrawTogetherV2.zip|DrawTogetherV2.zip]]''' ==== | ||
Some demo code: | Some demo code: |
Revision as of 02:12, 14 December 2023
Description
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 them
- Shared Mode: Cloud Room has StateAuthority
Server Mode and Shared Mode can be daunting and won't be covered here. Some multiplayer platforms SDK you can check:
- https://noobhub.co.za/
- https://github.com/Overtorment/NoobHub
- https://www.smartfoxserver.com/
- https://github.com/EsotericSoftware/kryonet
And to get you started using Noobhub:
Here we will cover the Host Mode using Gideros Unite Framework written by Arturs Sosins (@ar2rsawseen), which is the easiest way to get started with multiplayer.
Gideros Unite Framework
Gideros Unite framework provides a way to implement Multiplayer games. It uses LuaSocket to establish socket connections and even create server/client instances.
It provides the means of device discovery in Local Area Network, and allows to call methods of other devices through network.
About protocols, it is possible to use tcp, udp or both (by binding some method to tcp, if reliability is needed, and others to udp for faster data processing).
Unite Package Unite.zip
Gideros application project DrawTogetherV2.zip
Some demo code:
-- 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()