diff --git a/bc_cc.lua b/bc_cc.lua new file mode 100644 index 000000000000..c7d16df8717a --- /dev/null +++ b/bc_cc.lua @@ -0,0 +1,58 @@ +local BaseControl = require("bc") + +-- ComputerCraft RedNet Compatibility +local Network = { + default_protocol = string.format("bc-%d.%d", BaseControl.version[1], BaseControl.version[2]), +} + +function Network:new(modem, protocol) + local self = { + rednet = rednet, + modem = modem or peripheral.getName(peripheral.find("modem")), + protocol = protocol or Network.default_protocol, + } + setmetatable(self, {__index=Network}) + + return self +end + +function Network:start(callback) + self.rednet.open(self.modem) + self.callback = callback +end + +function Network:send(addr, msg) + self.rednet.send(addr, msg, self.protocol) +end + +function Network:broadcast(msg) + self.rednet.broadcast(msg, self.protocol) +end + +function Network:pull(filter, timeout) + while true do + local remote, msg = self.rednet.receive(self.protocol, timeout) + if remote ~= nil and filter(remote, msg) then + return msg + end + end +end + +function Network:stop() + self.rednet.close(self.modem) +end + +function Network:serve() + while true do + local remote, msg = self.rednet.receive(self.protocol) + self.callback(remote, msg) + end +end + +BaseControl.Network = Network + +function BaseControl:serve() + self.network:serve() +end + +return BaseControl