Skip to content

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)
end

For 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

Clone this wiki locally