Advertisement
Feddis08

Router

Aug 10th, 2021 (edited)
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.18 KB | None | 0 0
  1. local component = require("component")
  2. local event = require("event")
  3. local serialization = require("serialization")
  4. local m = component.modem
  5. local allPortsOpen = true
  6. local clients = {}
  7.  
  8. function init()
  9. m.open(5)
  10. if m.isOpen(5) then
  11.     allPortsOpen = true
  12. end    
  13. m.open(10)
  14. if m.isOpen(10) then
  15.     allPortsOpen = true
  16. end
  17. if allPortsOpen == false then
  18.     print("Can't bind all ports")
  19. end
  20. end
  21. function handleRequest(from, port, message)
  22. message = serialization.unserialize(message)
  23. print(port, tostring(message.method, message.message))
  24. if port == 5 then
  25.     if message.to == "router" then
  26.         if message.method == "connection" then
  27.             m.send(from, 5, serialization.serialize({connected = true, serverAddress=localAddress}))
  28.             alreadyConnected = false
  29.             for index, clientId in ipairs(clients) do
  30.                 if clientId == from then
  31.                     alreadyConnected = true
  32.                 end
  33.             end
  34.             if alreadyConnected == false then
  35.                 table.insert(clients, from)
  36.             end
  37.             print("Client connected: " .. from)
  38.         end
  39.     end
  40.     if message.method == "broadcast" then
  41.             m.open(message.port)
  42.             for index, clientId in ipairs(clients) do
  43.                 print(clientId)
  44.                 m.send(clientId, message.port, serialization.serialize({port = message.port, from = from, time = message.time, message = message.message}))
  45.             end
  46.             m.close(message.port)
  47.             print("Broadcasted by: " .. from)
  48.     end
  49.     if message.message == "stop" then
  50.         print("stopping! from: " .. from)
  51.         os.exit()
  52.     end
  53. end
  54. if port == 10 then
  55.     m.open(message.port)
  56.     m.send(message.to, message.port, serialization.serialize({port = message.port, from = from, to = message.to,        time = message.time, message = message.message}))
  57.     m.close(message.port)
  58.     print("Routed message from: " .. from .. " to: " .. message.to)
  59. end
  60. end
  61. function listening()
  62. local _, localAddress, from, port, distance, message = event.pull("modem_message")
  63.     handleRequest(from, port, message)
  64.     m.open(10)
  65.     m.open(5)
  66.     listening()
  67. end
  68. init()
  69. print("Start listening")
  70. listening()
  71.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement