-
Notifications
You must be signed in to change notification settings - Fork 4
Example: Client Server Validation
Seppi edited this page Apr 26, 2016
·
3 revisions
When adding ops to client/server operations, you may add validation.
When using :addValidateOnServer() or :addValidateOnClient(), you may validate by an object, function or mixture thereof.
When validating against an object, LoverNet will recursively compare types.
For example, if you have:
{
name = "Linus Torvalds",
children = 3,
programmer = true,
phone_number = "123 456 7890",
friends = {
"Richard Stallman",
"Ken Thompson",
"Dennis Ritchie",
"Douglas McIlroy",
},
}You can validate this object with:
{
name = "string",
children = "number",
programmer = "boolean",
phone_number = function(data)
local valid = is_phone_number(data) == true
return valid, valid and nil or "Invalid Phone Number"
end,
friends = function(data)
if type(data) ~= "table" then
return false,"data is not a table"
end
for i,v in pairs(data) do
if type(v) ~= "string" then
return false,"value in table data is not a string"
end
end
return true
end,
}In this example, we will validate the mouse coordinates to be a number, and then the return as a string.
For the server:
lovernetlib = require('lovernet')
lovernet = lovernetlib.new{type=lovernetlib.mode.server}
lovernet:addOp('p') -- (p)oint .. use single character to reduce bandwidth
lovernet:addValidateOnServer('p',{x='number',y='number'})
lovernet:addProcessOnServer('p',function(self,peer,arg,storage)
local user = self:getUser(peer)
user.x, user.y = arg.x, arg.y
return "good job!"
end)
function love.update(dt)
lovernet:update(dt)
endFor the client:
lovernetlib = require('lovernet')
lovernet = lovernetlib.new()
lovernet:addOp('p')
lovernet:addValidateOnClient('p',"string")
function love.update(dt)
lovernet:sendData('p',{
x=love.mouse.getX(),
y=love.mouse.getY(),
})
lovernet:update(dt)
end