Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local m = peripheral.find "modem"
- local CHAN = 7101
- m.open(CHAN)
- local function send(ms) m.transmit(CHAN, CHAN, ms) end
- local function receive()
- while true do
- local _, _, c, rc, ms = os.pullEvent "modem_message"
- if type(ms) == "table" then
- return ms
- end
- end
- end
- local nodes = {}
- parallel.waitForAny(function()
- send { "ping" }
- while true do
- local ty, id = unpack(receive())
- if ty == "pong" then
- print(id, "detected")
- table.insert(nodes, id)
- end
- end
- end, function() sleep(0.5) end)
- local d_min = {202, 65, 231}
- local d_max = {202 + 63, 65 + 63, 231 + 63}
- local block = "botania:managlass"
- local eqn = ...
- local fn, err = load(("local x, y, z = ...; return %s"):format(eqn), "=eqn", "t", math)
- if not fn then error("syntax error: " .. err, 0) end
- print(#nodes, "nodes are available")
- local x_range = d_max[1] - d_min[1] + 1
- local split = math.floor(x_range / #nodes)
- local commands = {}
- local x_acc = d_min[1]
- for k, v in ipairs(nodes) do
- local x_size = split
- if k == #nodes then
- x_size = x_range - ((#nodes - 1) * split)
- end
- local t = x_acc
- x_acc = x_acc + x_size
- send {"plot", {
- x_min = d_min[1], x_max = d_max[1],
- y_min = d_min[2], y_max = d_max[2],
- z_min = d_min[3], z_max = d_max[3],
- x_mod = #nodes, x_mod_eq = k - 1,
- block = block,
- equation = eqn,
- id = v,
- f_min = d_min,
- f_max = d_max
- }}
- end
- local responses = {}
- while #responses ~= #nodes do
- local m = receive()
- if m[1] == "response" then
- table.insert(responses, m[2])
- print("response from", m[2].id, m[2].response)
- end
- end
- print "Plot plotted."
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement