_bc_backend = { local_addr = "address_light", power = 12, iscb = false, cbid = 0, cbn = "" } function _bc_backend:init(cb_handler) local o = {} setmetatable(o, self) self.__index = self o.cb_handler = cb_handler return o end function _bc_backend:fetch_list(master_id) return { nouns = { ["power"] = "address_power", ["light"] = "address_light", }, verbs = { ["inc_pwr"] = "address_power", ["toggle_light"] = "address_light", } } end function _bc_backend:request_noun(addr, n) if addr == "address_power" and n == "power" then return self.power end return nil end function _bc_backend:call_verb(addr, v, param) if addr == "address_power" and v == "inc_pwr" then self.power = param if self.iscb then self.cb_handler("listen", 101010) end end end function _bc_backend:register_callback(addr, n, query, qparam) self.iscb = true return 101010 end function _bc_backend:cancel_callback(addr, n, id) self.iscb = false end function _bc_backend:call_listener(addr, n, id, value) if id == self.cbid and addr == "foobar" and n == self.cbn then self.cb(value) end end -- Debug handlers function _bc_backend:debug_request_noun(n) -- Ask cb for noun value return self.cb_handler("noun", n) end function _bc_backend:debug_call_verb(v, arg) self.cb_handler("verb", v, arg) end function _bc_backend:debug_register_cb(n, query, qparam, cb) self.cbid = self.cb_handler("reg_nl", n, {query = query, qparam = qparam, addr = "foobar"}) self.cbn = n self.cb = cb end function _bc_backend:debug_cancel_cb() self.cb_handler("unreg_nl", self.cbn, self.cbid) end return _bc_backend