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