-
Notifications
You must be signed in to change notification settings - Fork 4
Example: Queuing Data To Client
Seppi edited this page Jun 13, 2016
·
4 revisions
To queue data from the server, we make use of an index.
In this example, we will queue chat messages to all clients.
For the server:
lovernetlib = require('lovernet')
lovernet = lovernetlib.new{type=lovernetlib.mode.server}
lovernet:addOp('g') -- (g)etMessages .. use single character to reduce bandwidth
lovernet:addValidateOnServer('g','number')
lovernet:addProcessOnServer('g',function(self,peer,arg,storage)
storage.chat = storage.chat or {}
local ret = {}
for _,line in pairs(storage.chat) do
if line.index > arg then
table.insert(ret,{i=line.index,t=line.text})
end
end
return ret
end)
lovernet:addOp('s') -- (s)endMessage .. use single character to reduce bandwidth
lovernet:addValidateOnServer('s',{t='string'})
lovernet:addProcessOnServer('s',function(self,peer,arg,storage)
storage.chat = storage.chat or {}
storage.current_index = (storage.current_index or 0) + 1
table.insert(storage.chat,{index=storage.current_index,text=arg.t})
end)
function love.update(dt)
lovernet:update(dt)
endFor the client:
lovernetlib = require('lovernet')
lovernet = lovernetlib.new()
lovernet:addOp('s')
lovernet:addOp('g')
chat = {}
function love.keypressed(key)
if key == "return" then
lovernet:pushData('s',{t=textinput})
textinput = nil
end
end
function love.textinput(char)
textinput = (textinput or "") .. char
end
function love.update(dt)
lovernet:sendData('g',chat_index or 0)
if lovernet:getCache('g') then
for _,message in pairs(lovernet:getCache('g')) do
chat_index = math.max(message.i,chat_index or 0)
table.insert(chat,message.t)
end
lovernet:clearCache('g')
end
lovernet:update(dt)
end
function love.draw()
love.graphics.print(textinput or "")
for i,text in pairs(chat) do
love.graphics.print(text,0,i*16)
end
end