flipperipper

gpsServerSub

Apr 21st, 2022 (edited)
481
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.75 KB | None | 0 0
  1. --pastebin get Lq1GgMw0 gpsServerSub
  2. local wirelessModem
  3. local wiredModem
  4.  
  5. args = {...}
  6.  
  7. shell.run("delete mathLib")
  8. shell.run("pastebin get PkFcWZJi mathLib")
  9. os.loadAPI("mathLib")
  10. shell.run("delete vector3Lib")
  11. shell.run("pastebin get Xruma0TN vector3Lib")
  12. os.loadAPI("vector3Lib")
  13. shell.run("delete fileUtils")
  14. shell.run("pastebin get m0yUeGbS fileUtils")
  15. os.loadAPI("fileUtils")
  16.  
  17. worldPosition = vector3Lib.vector3(0,0,0)
  18.  
  19. if #args > 3 then
  20.     worldPosition = vector3Lib.vector3(args[1], args[2], args[3])
  21.     fileUtils.saveToFile(worldPosition, "gpsPosition", "saves", true)
  22.     print(textutils.serialiseJSON(worldPosition))
  23. else
  24.     worldPosition = fileUtils.loadFromFile("saves/gpsPosition")
  25.     if worldPosition ~= nil and worldPosition.x ~= nil then
  26.         print("pos xyz ("..worldPosition.x..", "..worldPosition.y..", "..worldPosition.z..")")
  27.     else
  28.         error("Wrong Usage (worldPosX worldPosY worldPosZ) for first time setup")
  29.     end
  30. end
  31.  
  32. function setupWireless()
  33.     wirelessModem = peripheral.wrap("top")
  34.     if not wirelessModem.isWireless() then
  35.         wirelessModem = peripheral.wrap("bottom")
  36.         print("bottom wireless")
  37.     else
  38.         print("top wireless")
  39.     end
  40. end
  41.  
  42. function setupWired()
  43.         wiredModem = peripheral.wrap("top")
  44.     if wiredModem.isWireless() then
  45.         wiredModem = peripheral.wrap("bottom")
  46.         print("bottom wired")
  47.     else
  48.         print("top wired")
  49.     end
  50. end
  51.  
  52.  
  53. setupWired()
  54. setupWireless()
  55.  
  56. wiredModem.open(88)
  57.  
  58. local replyRecieved = false
  59.  
  60. parallel.waitForAny(
  61.     function()
  62.         while not replyRecieved do
  63.             local data = {type = "register gps", subGPSName = os.getComputerID(), location = worldPosition}
  64.             wiredModem.transmit(89, 88, textutils.serialise(data))
  65.             sleep(5)
  66.         end
  67.     end,
  68.  
  69.     function()
  70.         while true do
  71.             local event, modemSide, senderChannel,
  72.             replyChannel, message, senderDistance = os.pullEvent("modem_message")
  73.            
  74.             local package = textutils.unserialise(message)
  75.             if senderChannel == 88 and package.id == os.getComputerID() then
  76.                 replyRecieved = true
  77.                 print("Registered to main server")
  78.             end
  79.         end
  80.     end
  81. )
  82.  
  83. wirelessModem.open(33)
  84.  
  85. while true do
  86.     local event, modemSide, senderChannel,
  87.     replyChannel, message, senderDistance = os.pullEvent("modem_message")
  88.  
  89.     local recievedMessage = textutils.unserialise(message)
  90.  
  91.     local package = {distance = senderDistance, subGPSName = os.getComputerID(), clientID = recievedMessage.clientID, type = "distance"}
  92.  
  93.     if senderChannel == 33 then
  94.         wiredModem.transmit(89, replyChannel, textutils.serialise(package))
  95.     end
  96. end
Add Comment
Please, Sign In to add comment