lulu 0.0.721

A mini lua runtime
Documentation


class!
@into_collectible("collect")
InterprocSocket(addr), {
  init(addr){
    self.__on_send = {}
    self.__on_recv = {}
    self.__recv = function() end
    self.__host = interproc.listen(addr, function(data)
      for _, r in ipairs(self.__on_recv) do
        local res = r(data)
        if res then
          data = res
        end
      end
      self.__recv(data)
    end)
  }

  on_recv(fn){
    table.insert(self.__on_recv, fn)
    return self
  }
  on_send(fn){
    table.insert(self.__on_send, fn)
    return self
  }

  listen(fn){
    self.__recv = fn
    return self
  }

  with(ext){
    if type(ext) == "table" then
      self:on_recv(ext.on_recv)
      self:on_send(ext.on_send)
    end
    return self
  }

  send(data){
    for _, r in ipairs(self.__on_send) do
      local res = r(data)
      if res then
        data = res
      end
    end
    if type(data) ~= "userdata" then
      data = ByteArray(tostring(data))
    end
    interproc.send(self.addr, data)
  }

  stop(){
    self.__host:stop()
    interproc.send(self.addr, ByteArray(""))
  }
}

interproc.JSON = {
  on_send = function(data) return serde.json.encode(data) end,
  on_recv = function(data) return serde.json.decode(data:to_string()) end,
}

interproc.String = {
  on_send = function(data) return ByteArray(data) end,
  on_recv = function(data) return data:to_string() end,
}

interproc.Serialize = {
  on_send = function(data) if data.serialize then return data:serialize() else return data end end,
}

interproc.Deserialize = function(type) return {
  on_recv = function(data) try_catch!{
    return type:deserialize(data:to_string())
  }, {
    return data
  }
  return err end,
} end