Advertisement
bcash8

ModemAPI

Aug 7th, 2022 (edited)
659
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.65 KB | None | 0 0
  1. local channel = 0
  2. local modem
  3.  
  4.  
  5. function setModem(side)
  6.     modem = peripheral.wrap(side)
  7. end
  8.  
  9. function setChannel(ch)
  10.     channel = ch
  11. end
  12.  
  13. function openModem(ch)
  14.     ch = ch or channel
  15.     if not modem.isOpen(ch) then
  16.         modem.open(ch)
  17.         print("Opened modem: " .. ch)
  18.     else
  19.         print("Modem already opened: " .. ch)
  20.     end
  21. end
  22.  
  23. function closeModem(ch)
  24.     ch = ch or channel
  25.     if modem.isOpen(ch) then
  26.         modem.close(ch)
  27.         print("Closed modem: " .. ch)
  28.     else
  29.         print("Modem already closed: " .. ch)
  30.     end
  31. end
  32.  
  33. function modemSetup(side, ch)
  34.     modem = peripheral.wrap(side)
  35.     setChannel(ch)
  36.     openModem()
  37. end
  38.  
  39. function sendMessage(msg, ch, returnCh)
  40.     ch = ch or channel
  41.     returnCh = returnCh or channel
  42.  
  43.     if type(msg) == "table" then
  44.         msg = textutils.serialize(msg)
  45.     end
  46.    
  47.     modem.transmit(ch, returnCh, msg)
  48. end
  49.  
  50.  
  51. function waitForMessage(ch, timeout)
  52.     ch = ch or channel
  53.     local myTimer
  54.     if timeout then
  55.         myTimer = os.startTimer(timeout)
  56.     end
  57.     while true do
  58.         local event, par1, senderChannel,
  59.         replyChannel, message, senderDistance = os.pullEvent()
  60.  
  61.         if event == "timer" and par1 == myTimer then
  62.             print("message timeout")
  63.             return false
  64.         end
  65.  
  66.         if senderChannel == ch then
  67.             return true, message, replyChannel
  68.         end
  69.     end
  70. end
  71.  
  72. function sendAndWaitForResponse(msg, ch, returnCh, timeout)
  73.     sendMessage(msg, ch, returnCh)
  74.  
  75.     local worked, message, replyChannel = waitForMessage(returnCh, timeout)
  76.     return worked, message, replyChannel    
  77. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement