modem = {} network = {} function modem:init(addr, handler) local o = {} setmetatable(o, self) self.__index = self o.network = network o.address = addr o.network[addr] = handler return o end function modem:open(port) return true end function modem:send(address, port, msg) if self.network[address] ~= nil then self.network[address](address, self.address, port, 0, msg) end end function modem:broadcast(port, msg) for addr in pairs(self.network) do if addr ~= self.address then self:send(addr, port, msg) end end end function modem:remove_self() self.network[self.address] = nil end return modem