Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- server.lua
- -- AE2-Server, sammelt Daten vom meBridge und sendet sie per rednet
- -------------------------
- -- 1) KONFIG
- -------------------------
- local meSide = "top" -- Da sitzt deine meBridge
- local modemSide = "buttom" -- Hier sitzt dein Wireless Modem
- local REFRESH_INT = 10 -- Alle x Sekunden Daten broadcasten
- -------------------------
- -- 2) Init
- -------------------------
- local me = peripheral.wrap(meSide)
- if not me then
- error("meBridge an '"..meSide.."' nicht gefunden!")
- end
- local modem = peripheral.wrap(modemSide)
- if not modem then
- error("Modem an '"..modemSide.."' nicht gefunden!")
- end
- rednet.open(modemSide)
- -- Test, ob listCells existiert
- if not me.listCells then
- error("meBridge hat keine Funktion 'listCells'! Version zu alt?")
- end
- -------------------------
- -- 3) Hilfsfunktionen
- -------------------------
- -- Summiert usedBytes + totalBytes aller Cells
- local function getTotalUsedAndTotal(cells)
- local sumUsed, sumTotal = 0, 0
- for _, cell in ipairs(cells) do
- sumUsed = sumUsed + (cell.usedBytes or 0)
- sumTotal = sumTotal + (cell.totalBytes or 0)
- end
- return sumUsed, sumTotal
- end
- -- Sammelt alle Daten, die der Client braucht
- local function gatherData()
- local rawCells = me.listCells() or {}
- local itemList = me.listItems() or {}
- -- Zellen-Daten in einfaches Array packen (ID, used, total)
- local cells = {}
- for i, cell in ipairs(rawCells) do
- table.insert(cells, {
- usedBytes = cell.usedBytes or 0,
- totalBytes = cell.totalBytes or 0,
- })
- end
- local sumUsed, sumTotal = getTotalUsedAndTotal(rawCells)
- local freePercent = 0
- if sumTotal > 0 then
- freePercent = math.floor((sumTotal - sumUsed) / sumTotal * 100)
- end
- -- Sortiere Items nach Menge DESC, für Detailanzeige
- table.sort(itemList, function(a,b)
- return (a.amount or 0) > (b.amount or 0)
- end)
- -- Das senden wir an den Client
- local data = {
- cells = cells, -- Array der Zellen
- itemCount = #itemList, -- Anzahl Items
- freePercent = freePercent, -- Prozent freier Speicher
- items = itemList, -- Komplettes Item-Array für Detail
- }
- return data
- end
- -------------------------
- -- 4) Hauptschleife
- -------------------------
- while true do
- -- Sammle Daten
- local data = gatherData()
- -- Broadcast an alle Clients mit Protokoll "AE2_DATA"
- rednet.broadcast(data, "AE2_DATA")
- sleep(REFRESH_INT)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement