Gideros LOSC
From GiderosMobile
LOSC
OSC 1.0 implementation for lua. Github: https://github.com/davidgranstrom/losc
License:
- MIT License
Features:
- implements the complete OSC 1.0 specification
- pure lua implementation, no platform dependent libraries
- support for extended OSC types
- plugin system for transport layers
- address pattern matching
- scheduled bundle evaluation (plugin dependent)
OSC
OpenSoundControl: https://ccrma.stanford.edu/groups/osc/index.html
From Wikipedia, the free encyclopedia
Open Sound Control (OSC) is a protocol for networking sound synthesizers, computers, and other multimedia devices for purposes such as musical performance or show control. OSC's advantages include interoperability, accuracy, flexibility and enhanced organization and documentation. Its disadvantages include inefficient coding of information, increased load on embedded processors, and lack of standardized messages/interoperability. The first specification was released in March 2002.
Gideros LOSC
The Gideros Unite framework allows a host (server) and clients to connect over a Local Area Network. Some demo code:
Get all connected devices
-- 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()
Server example code
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()
Client example code
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)
Game logic example (the game logic is the same for server and clients)
-- 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()
Using the Gideros Unite Framework
ar2rsawseen 2012/07/25 Gideros Mobile, updated 2023/12/13 (V2)
Gideros Unite framework provides a way to implement Multiplayer games:
- using LuaSocket to establish socket connections and create server/client instances
- device discovery over Local Area Network
- call methods on devices through the network
- protocols: tcp, udp or both. Binding some method to tcp if reliability is needed, and others to udp for faster data processing
You can download the Gideros Unite Framework here: Unite.zip
And a Gideros project: DrawTogetherV2.zip
Standard scenario
This is a standard scenario that can be created using Gideros Unite framework:
- Server starts broadcasting or skip to step 5, if all clients know server IP address
- Client's start listening to servers
- Client receives broadcast message from server, newServer event is initiated
- Client autoconnects to server or user manually (by pushing button) connects to specific server
- Server receives newClient event
- Server accepts client automatically or user manually (by pushing button) accepts specific client
- Client receives onAccept event
- Implement your game logic here, where both clients and server can call methods on all devices or on one specific device in the network
- When one of the clients becomes unreachable, all clients and server get onClientClose event
- When server becomes unreachable, all clients get onServerClose event
- When you are finished, close client or server using close method, which stops all timers, closes all connections and destroys instance
Framework
- 1 Unite Server Method list
- 2 Unite Client Method list
- 3 Unite Server Event list
- 4 Unite Client Event list