You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

99 lines
2.1 KiB

_bc_backend = { local_addr = "" }
network = false
fn = require("fake_net")
function _bc_backend:init(cb_handler)
local o = {}
setmetatable(o, self)
self.__index = self
o.cb_handler = cb_handler
o.network = network
o.local_addr = "address_light"
local function nw_handler(msg)
if msg.type == "noun_return" then
end
end
-- Init network
if network == false then
network = fn:init()
network:add_node("address_light", nw_handler)
-- Add second node
o.dbg_node = require("bc"):init("master")
o.dbg_node._backend.local_addr = "address_power"
o.dbg_node:set_noun("power", 12)
else
network:add_node("address_power", nw_handler)
end
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