Advertisement
LukasBor

CC_IR_switch_CNS_server

Feb 28th, 2021 (edited)
516
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.53 KB | None | 0 0
  1. --[[
  2. Server pro automatizaci vyhybek Immersive Railroading pomoci ComputerCraftu, instalace jako autorun:
  3. edit startup: multishell.launch({},"/Vyhybky.lua")
  4. pastebin get VAvHgZDv /Vyhybky.lua
  5.  
  6. Endermodem na strane "top" (komunikace CNS - odpovedi na dotaz, zda pro vlak aktivovat vyhybku a informace o poloze a smeru vlaku)
  7.  
  8. Prichozi: DVyhybka:tag (napr. "DHTJDepo:Dieselka" = DHTJDepo - Detector u vyhybky Hlavni Trat smer Jih u Depo, tag vlaku Dieselka).
  9. Odchozi: Vyhybka:1 (napr. "HTJDepo:1" = aktivuj vyhybku na Hlavni Trati ve smeru Jih na odbocce do Depa, nebo "...:0" pro klid).
  10.  
  11. Pokud pro prijaty detektor a dany vlak (jeho tag) existuje shoda, odesle se pozadavek na aktivaci vyhybky (není-li, posle se klid).
  12. Format seznamu detektoru a vlaku v souboru Vyhybky.txt je:
  13. {
  14. TagVlaku = {"jmena", "detektoru", "aktivujicich", "vyhybky"} -- dalsi tag jako nove podpole
  15. }
  16. --]]
  17.  
  18. -- Nacteni seznamu vlaku a jejich vyhybek ze souboru
  19. file = fs.open("Vyhybky.txt","r")
  20. Seznam = textutils.unserialize(file.readAll())
  21. file.close()
  22.  
  23. -- Kanal pro komunikaci s CNS
  24. local modemport = 6611
  25.  
  26. -- Potrebne komponenty
  27. local modem = peripheral.wrap("left")
  28. local monitor = peripheral.find("monitor")
  29.  
  30. -- Hlavni telo programu
  31. term.redirect(monitor)
  32. term.clear()
  33. term.setCursorPos(1,1)
  34. modem.open(modemport)
  35. print("Cekam na prijem dotazu ...")
  36. -- V nekonecne smycce cekame na zachyceni eventu...
  37. while true do
  38.   local event, modemSide, senderChannel, replyChannel, message, senderDistance = os.pullEvent("modem_message")
  39.   print("Prijato: "..message)
  40.   local act = false
  41.   local dvojtecka, _ = string.find(message,":")
  42.   local det = string.sub(message,2,dvojtecka-1)  -- Od druheho znaku (prvni znak je D) do znaku pred dvojteckou
  43.   local tag = string.sub(message,dvojtecka+1,-1) -- Od znaku za dvojteckou do posledniho (pozice -1 je posledni znak)
  44.   -- Pokud vlak nema tag, bude s nim CNS zachazet jako s tagem "testing"
  45.   if (string.len(tag) == 0) then tag = "testing"; print("Prazdny tag = \"testing\"") end
  46.   -- Vyhledani vyhybky podle tagu vlaku
  47.   for _,vyhybka in pairs(Seznam[tag]) do
  48.     -- Pokud je v seznamu, bude act = true a pokud ne, zustane act = false
  49.     if (det == vyhybka) then
  50.       act = true
  51.       break
  52.     end
  53.   end
  54.   -- Pokud je act = true, vyhybka je v seznamu a aktivujeme ji (jinak ji prepneme do klidu)
  55.   if (act) then
  56.     modem.transmit(modemport,modemport,det..":1")
  57.     print("Vyhybka "..det.." aktivni.")
  58.   else
  59.     modem.transmit(modemport,modemport,det..":0")
  60.     print("Vyhybka "..det.." v klidu.")
  61.   end
  62. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement