Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- if not fs.exists("crypt") then
- shell.run("pastebin get STRXsMfE crypt")
- end
- os.loadAPI("crypt")
- --Haltestelle hier eintragen:
- local haltestellen = {"ecke_einstein_park","zweitehaltestelle"}
- function randomNumber()
- return tonumber(tostring({}):sub(8),16)
- end
- function newStringFind(x, y)
- local a,b = string.find(x, y)
- return a
- end
- function calcTimeDiff(time1, time2)
- local hour1 = tonumber(string.sub(time1, 1, newStringFind(time1, ":")-1))
- local minute1 = tonumber(string.sub(time1, newStringFind(time1, ":")+1))
- local hour2 = tonumber(string.sub(time2, 1, newStringFind(time2, ":")-1))
- local minute2 = tonumber(string.sub(time2, newStringFind(time2, ":")+1))
- local diff = 0
- if hour1 > hour2 then
- diff = diff + (hour1*60) - (hour2*60)
- elseif hour1 < hour2 then
- diff = diff + 1440 + (hour1*60) - (hour2*60)
- end
- diff = diff + minute1 - minute2
- log("Calculated Time Diff ["..time1..","..time2.."]: "..diff)
- return diff
- end
- --UI
- local mon = peripheral.find("monitor")
- local prevterm = term.redirect(mon)
- local xsize,ysize = term.getSize()
- function drawArrows()
- while true do
- local i = 1
- while i <= ysize do
- term.setCursorPos(0,i)
- term.setTextColor(colors.black)
- term.write("\127 ")
- term.setCursorPos(17,i)
- term.write("\127 ")
- term.setTextColor(colors.gray)
- term.setCursorPos(0,i+1)
- term.write("\127 ")
- term.setCursorPos(17,i+1)
- term.write("\127 ")
- i = i + 1
- end
- sleep(0.5)
- i = 1
- while i <= ysize do
- term.setCursorPos(0,i)
- term.setTextColor(colors.gray)
- term.write("\127 ")
- term.setCursorPos(17,i)
- term.write("\127 ")
- term.setTextColor(colors.black)
- term.setCursorPos(0,i+1)
- term.write("\127 ")
- term.setCursorPos(17,i+1)
- term.write("\127 ")
- i = i + 1
- end
- sleep(0.5)
- end
- end
- arrivals = {}
- function drawArrivals()
- while true do
- if type(arrivals) == "table" then
- local len = table.getn(arrivals)
- if len > 0 then
- local array = arrivals
- local j
- local tempTime = textutils.formatTime(os.time(),true)
- for j = 2, len do
- local elem = array[j]
- local key = calcTimeDiff(array[j][1], tempTime)
- local i = j - 1
- while i > 0 and calcTimeDiff(array[j][1], tempTime) > key do
- array[i + 1] = array[i]
- i = i - 1
- end
- array[i + 1] = elem
- end
- local j = 1
- local i = 1
- while i < ysize and j <= len do
- term.setCursorPos(1,i)
- term.setBackgroundColor(colors.black)
- term.setTextColor(colors.orange)
- term.clearLine()
- term.setCursorPos(1,i)
- local diff = calcTimeDiff(arrivals[j][1], textutils.formatTime(os.time(), true))
- if diff < 0 and diff > -30 then
- if diff % 2 == 0 then
- term.write("")
- else
- term.write("Jetzt: "..arrivals[j][2])
- end
- else
- if diff < 30 then
- term.write("In "..diff.." Min: "..arrivals[j][2])
- else
- term.write(arrivals[j][1].." "..arrivals[j][2])
- end
- end
- i = i + 1
- j = j + 1
- end
- while i < ysize do
- term.setCursorPos(1,i)
- term.setBackgroundColor(colors.black)
- term.clearLine()
- i = i + 1
- end
- end
- end
- sleep(1)
- end
- end
- --Network
- local modem = nil
- local modem1, modem2 = peripheral.find("modem")
- if modem1.isWireless() then
- modem = modem1
- elseif modem2.isWireless() then
- modem = modem2
- else
- print("Error: Wireless Modem needed")
- end
- modem.open(1800)
- function getBasestation()
- local messg = {}
- messg["Protocol"] = "LTE"
- messg["Sender"] = os.getComputerID()..".transport.ctOS"
- messg["Receipient"] = "BROADCAST"
- messg["Request"] = "broadcast_station_ping"
- messg["LTE"] = {}
- messg["LTE"]["SI"] = "STATIC_TRANSPORT"
- local t = os.startTimer(2)
- local returns = nil
- local function a()
- modem.transmit(1800, 1800, messg)
- sleep(1)
- end
- local function b()
- while true do
- local sEvent, sModem, nChannel, nReplyChannel, tMessage = os.pullEvent()
- if sEvent == "modem_message" and type(tMessage) == "table" and tMessage["Receipient"] == os.getComputerID()..".transport.ctOS" and tMessage["Request"] == "broadcast_station_pingres" then
- os.cancelTimer(t)
- returns = tMessage["Sender"]
- return
- elseif sEvent == "timer" and sModem == t then
- local old = term.redirect(mon)
- term.setBackgroundColor(colors.red)
- term.clear()
- term.setTextColor(colors.white)
- term.setCursorPos(5,5)
- term.write("Ausser")
- term.setCursorPos(5,6)
- term.write("Betrieb")
- term.redirect(old)
- sleep(5)
- os.reboot()
- return
- end
- end
- end
- parallel.waitForAny(a,b)
- return returns
- end
- function networkRegistration()
- local basestation = getBasestation()
- local packet = {}
- packet["Sender"] = os.getComputerID()..".transport.ctOS"
- packet["Receipient"] = basestation
- packet["Protocol"] = "LTE"
- packet["LTE"] = {}
- packet["LTE"]["Request"] = "LTE_CLIENT_REGISTER"
- packet["LTE"]["SI"] = "STATIC_TRANSPORT"
- packet["LTE"]["Static"] = true
- packet["Data"] = crypt.encrypt("LTE_INTERN_HELLO", "STATIC_TRANSPORT")
- modem.transmit(1800, 1800, packet)
- local timer = os.startTimer(5)
- while true do
- local event, p1, p2, p3, p4 = os.pullEvent()
- if event == "modem_message" and type(p4) == "table" and p4["Receipient"] == os.getComputerID()..".transport.ctOS" and p4["Sender"] == basestation and p4["LTE"] and p4["LTE"]["Request"] == "LTE_CLIENT_WELCOME" then
- break
- elseif event == "timer" and p1 == timer then
- local old = term.redirect(mon)
- term.setBackgroundColor(colors.red)
- term.clear()
- term.setTextColor(colors.white)
- term.setCursorPos(5,5)
- term.write("Ausser")
- term.setCursorPos(5,6)
- term.write("Betrieb")
- term.redirect(old)
- sleep(5)
- os.reboot()
- break
- end
- end
- end
- function getArrivals()
- while true do
- networkRegistration()
- arrivals = {}
- for key, haltestelle in pairs(haltestellen) do
- local message = {}
- message["Protocol"] = "ctOS"
- message["Sender"] = haltestelle..".transport.ctOS"
- message["Receipient"] = "center.transport.ctOS"
- message["Request"] = "Arrivals.get"
- message["Data"] = crypt.encrypt("Fill", "STATIC_TRANSPORT")
- message["nMessageID"] = randomNumber()
- message["ResponseID"] = message["nMessageID"]+1
- message["LTE"] = {}
- message["LTE"]["SI"] = "STATIC_TRANSPORT"
- modem.transmit(1800, 1800, message)
- local timerx = os.startTimer(25)
- while true do
- local event, modemSide, senderChannel, replyChannel, tmessage, senderDistance = os.pullEvent()
- if event == "modem_message" then
- if tmessage["Protocol"] == "ctOS" then
- if tmessage["Receipient"] == haltestelle..".transport.ctOS" and tmessage["LTE"]["Receipient"] == "STATIC_TRANSPORT" and tmessage["ResponseID"] == message["ResponseID"] then
- local data = crypt.decrypt(tmessage["Data"], "STATIC_TRANSPORT")
- if type(data) == "table" and table.getn(data) > 0 then
- for key, entry in pairs(data) do
- table.insert(arrivals, entry)
- end
- end
- break
- end
- end
- elseif event == "timer" and modemSide == timerx then
- break
- end
- end
- end
- sleep(30)
- end
- end
- networkRegistration()
- term.setBackgroundColor(colors.white)
- term.setTextColor(colors.black)
- term.clear()
- parallel.waitForAll(drawArrows, getArrivals, drawArrivals)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement