Epoc

RailStatus

Aug 25th, 2013
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.89 KB | None | 0 0
  1. --    ___              _       _      ___     _               _                    
  2. --   | _ \   __ _     (_)     | |    / __|   | |_    __ _    | |_    _  _     ___  
  3. --   |   /  / _` |    | |     | |    \__ \   |  _|  / _` |   |  _|  | +| |   (_-<  
  4. --   |_|_\  \__,_|   _|_|_   _|_|_   |___/   _\__|  \__,_|   _\__|   \_,_|   /__/_  
  5. -- _|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|
  6. -- "`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'
  7. --
  8. --                                    RailStatus
  9. --
  10. -- Un programme permettant de connaître en temps réel sur une page web
  11. -- le statut des aiguillages d'un réseau ferroviaire en
  12. -- utilisant RailCraft, ComputerCraft et RedPower
  13. --
  14. -- Utilisation :
  15. -- 1. Dans un ordinateur, importer ce programme depuis Pastebin :
  16. --     pastebin get NHPwHjmi railstatus
  17. -- 2. Lancer le programme :
  18. --     railstatus [Identifiant de l'ordinateur regroupant les aiguillages] [côté sur lequel arrive le bundled cable] [URL de base d'appel vers l'API qui enregistre les données]
  19. --     Exemple : railstatus 1 left http://exemple.fr/api
  20.  
  21. term.clear()
  22. term.setCursorPos(1,1)
  23.  
  24. print("...........   RailStatus is starting   ............")
  25.  
  26. -- Arguments passés au programme
  27. args = {...}
  28.  
  29. if table.getn(args) < 3 then
  30.   print("  One or more parameters are missing")
  31.   return
  32. end
  33.  
  34. -- --------------------------------------------------------
  35. -- Constantes
  36.  
  37. -- Identifiant de l'ordinateur regroupant les aiguillages
  38. COMPUTER_ID = args[1]
  39.  
  40. print("  Computer ID : "..COMPUTER_ID)
  41.  
  42. -- De quel côté de l'ordinateur arrive le bundled cable ?
  43. CABLE_SIDE = args[2]
  44.  
  45. print("  Cable side : "..CABLE_SIDE)
  46.  
  47. -- URL de base d'appel vers l'API qui enregistre les données
  48. API_ENDPOINT = args[3]
  49.  
  50. print("  Endpoint : "..API_ENDPOINT)
  51.  
  52. print("")
  53. print("To stop RailStatus, hold CTRL+T for some seconds.")
  54.  
  55. -- Tableau de correspondance nom de couleur > identifiant décimal
  56. COLORS_ARRAY = {}
  57.  
  58. COLORS_ARRAY["white"] = colors.white
  59. COLORS_ARRAY["orange"] = colors.orange
  60. COLORS_ARRAY["magenta"] = colors.magenta
  61. COLORS_ARRAY["lightBlue"] = colors.lightBlue
  62. COLORS_ARRAY["yellow"] = colors.yellow
  63. COLORS_ARRAY["lime"] = colors.lime
  64. COLORS_ARRAY["pink"] = colors.pink
  65. COLORS_ARRAY["gray"] = colors.gray
  66. COLORS_ARRAY["lightGray"] = colors.lightGray
  67. COLORS_ARRAY["cyan"] = colors.cyan
  68. COLORS_ARRAY["purple"] = colors.purple
  69. COLORS_ARRAY["blue"] = colors.blue
  70. COLORS_ARRAY["brown"] = colors.brown
  71. COLORS_ARRAY["green"] = colors.green
  72. COLORS_ARRAY["red"] = colors.red
  73. COLORS_ARRAY["black"] = colors.black
  74.  
  75. -- --------------------------------------------------------
  76. -- Fonctions
  77.  
  78. -- Teste un bundled cable avec toutes les couleurs possible, et retourne un tableau indexé contenant
  79. -- en index la couleur et en valeur un booléen (sous forme d'entier) indiquant si le signal redstone est actif ou non
  80. function getBundledInputAsTable(side)
  81.   local ret = {}
  82.  
  83.   for key,value in pairs(COLORS_ARRAY) do
  84.     ret[key] = redstone.testBundledInput(side, value) and 1 or 0 -- Convertit le booléen retourné en entier
  85.   end
  86.  
  87.   return ret
  88. end
  89.  
  90. -- Convertit un table en chaîne de caractères paramètres POST
  91. function tableToURIString(t)
  92.   local ret = ""
  93.   local i = 1
  94.  
  95.   for key,value in pairs(t) do
  96.     ret = ret..textutils.urlEncode(key).."="..textutils.urlEncode(value)
  97.  
  98.     if table.getn(t) ~= i then
  99.       ret = ret.."&"
  100.     end
  101.  
  102.     i = i + 1
  103.   end
  104.  
  105.   return ret
  106. end
  107.  
  108. -- --------------------------------------------------------
  109. -- Démarrage du programme
  110.  
  111. while true do
  112.   event = os.pullEvent("redstone") -- Dès qu'un aiguillage est changé
  113.   local bundled_cable = getBundledInputAsTable(CABLE_SIDE) -- On chope le statut de chaque câbles de couleur
  114.   http.request(API_ENDPOINT, "ci="..COMPUTER_ID.."&"..tableToURIString(bundled_cable)) -- Et on les envoient via HTTP POST pour enregistrer
  115. end
Advertisement
Add Comment
Please, Sign In to add comment