Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[
- Quantum Beacon
- A script that runs on computers connected to an AE quantum ring to ping their
- status back to a central computer.
- ]]
- local SEND_CHANNEL = 100
- local RECEIVE_CHANNEL = 101
- local NODE_NAME = "TMP"
- local TRANSMIT_INTERVAL = 15
- local function drawScreen(online)
- local w, h = term.getSize()
- term.setBackgroundColor(colors.black)
- term.clear()
- term.setCursorPos(1, 1)
- term.setBackgroundColor(colors.gray)
- term.setTextColor(colors.white)
- term.clearLine()
- term.write("Quantum Beacon")
- term.setBackgroundColor(colors.black)
- term.setTextColor(colors.lightGray)
- term.setCursorPos(1, 3)
- term.write("Node:")
- term.setCursorPos(1, 5)
- term.write("Channel:")
- term.setCursorPos(1, 7)
- term.write("Transmit Interval:")
- term.setCursorPos(1, 9)
- term.write("Online Status:")
- term.setTextColor(colors.white)
- term.setCursorPos(20, 3)
- term.write(NODE_NAME)
- term.setCursorPos(20, 5)
- term.write(tostring(SEND_CHANNEL))
- term.setCursorPos(20, 7)
- term.write(tostring(TRANSMIT_INTERVAL))
- local str = nil
- if online then
- str = "Online"
- term.setTextColor(colors.lime)
- else
- str = "Offline"
- term.setTextColor(colors.red)
- end
- term.setCursorPos(20, 9)
- term.write(str)
- end
- local function clearMessageLine()
- local _, h = term.getSize()
- term.setBackgroundColor(colors.gray)
- for i = 0, 3 do
- term.setCursorPos(1, h - i)
- term.clearLine()
- end
- end
- local function showError(msg)
- clearMessageLine()
- local _, h = term.getSize()
- term.setCursorPos(1, h - 2)
- term.setBackgroundColor(colors.gray)
- term.setTextColor(colors.red)
- write(msg)
- end
- local function showMessage(msg)
- clearMessageLine()
- local _, h = term.getSize()
- term.setCursorPos(1, h - 2)
- term.setBackgroundColor(colors.gray)
- term.setTextColor(colors.lightBlue)
- write(msg)
- end
- local function getPeripheralOrWait(name)
- local p = nil
- repeat
- p = peripheral.find(name)
- if p == nil then
- showError("Error: Couldn't find an attached peripheral with name \"" .. name .. "\". Please attach one.")
- os.pullEvent("peripheral")
- if p ~= nil then
- showMessage("Peripheral \"" .. name .. "\" connected. Resuming operations shortly.")
- os.sleep(3)
- end
- end
- until p ~= nil
- return p
- end
- -- We consider a foreign quantum link to be connected if we detect crafting
- -- CPUs on the network, since subnetworks shouldn't ever have these.
- local function meSystemConnected(meBridge)
- local craftingCpus = meBridge.getCraftingCPUs()
- return craftingCpus ~= nil and #craftingCpus > 0
- end
- drawScreen(false)
- local lastOnlineStatus = false
- while true do
- local modem = getPeripheralOrWait("modem")
- local meBridge = getPeripheralOrWait("meBridge")
- local packet = {
- node = NODE_NAME,
- date = os.date("*t"),
- online = meSystemConnected(meBridge)
- }
- modem.transmit(SEND_CHANNEL, RECEIVE_CHANNEL, packet)
- drawScreen(packet.online)
- if lastOnlineStatus == true and packet.online == false then
- showError("The quantum link just went offline.")
- os.sleep(3)
- else
- os.sleep(TRANSMIT_INTERVAL)
- end
- lastOnlineStatus = packet.online
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement