Advertisement
kovakovi2000

CC: P++ RNC2 - RedNetContinue2

Apr 18th, 2020 (edited)
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.80 KB | None | 0 0
  1. os.loadAPI("ldb2")
  2.  
  3. local db = "rnc2"
  4.  
  5. local modems = {peripheral.find("modem")}
  6. local modem = nil
  7. i = 1
  8. repeat
  9.     modem = modems[i]
  10.     if modem == nil then
  11.         error("Wireless modem not found", 0)
  12.     end
  13.     i = i + 1
  14. until modem.isWireless()
  15. print("API:RNC2 - Inited modem")
  16.  
  17. local function rmvdot(str)
  18.     return string.gsub(str,"%.", "")
  19. end
  20.  
  21. local portWasOpen = false
  22. function setPort(prog, _nPort)
  23.     if portWasOpen then modem.close(_nPort) end portWasOpen = true
  24.     ldb2.set(db .. "/" .. rmvdot(prog), "port", _nPort)
  25.     modem.open(_nPort)
  26. end
  27.  
  28. function getPort(prog)
  29.     return ldb2.get(db .. "/" .. rmvdot(prog), "port")
  30. end
  31.  
  32. function setIdenty(prog, _nIdenty)
  33.     ldb2.set(db .. "/" .. rmvdot(prog), "identy", _nIdenty)
  34. end
  35.  
  36. function getIdenty(prog)
  37.     return ldb2.get(db .. "/" .. rmvdot(prog), "identy")
  38. end
  39.  
  40. function setTimeOut(prog, _nTimeout)
  41.     ldb2.set(db .. "/" .. rmvdot(prog), "timeout", _nTimeout)
  42. end
  43.  
  44. function getTimeOut(prog)
  45.     return ldb2.get(db .. "/" .. rmvdot(prog), "timeout")
  46. end
  47.  
  48. function setTunnel(prog, _nTunnel)
  49.     ldb2.set(db .. "/" .. rmvdot(prog), "tunnel", _nTunnel)
  50. end
  51.  
  52. function getTunnel(prog)
  53.     return ldb2.get(db .. "/" .. rmvdot(prog), "tunnel")
  54. end
  55.  
  56. function resive(prog, identy, timeout)
  57.     identy = identy or getIdenty(prog)
  58.     timeout = timeout or getTimeOut(prog)
  59.  
  60.    
  61.     timer = os.startTimer( timeout )
  62.     while true do
  63.         local event, side, fec, refec, message, distance = os.pullEvent()
  64.         if event == "modem_message" then
  65.         -- print("p:" .. port)
  66.         -- print("i:" .. identy)
  67.         -- print("fi:" .. refec)
  68.             if refec == identy then
  69.                 if(message == "ping") then
  70.                     sleep(0.01)
  71.                     modem.transmit(getPort(prog), identy, "pong")
  72.                 else
  73.                     return textutils.unserialize(message)
  74.                 end
  75.             end
  76.         elseif event == "timer" then
  77.             if side == timer then
  78.                 break
  79.             end
  80.         end
  81.     end
  82.     return nil
  83. end
  84.  
  85. function ping(prog, identy)
  86.     identy = identy or getIdenty(prog)
  87.  
  88.     modem.transmit(getPort(prog), identy, "ping")
  89. end
  90.  
  91. function getEmptyTunnel(prog)
  92.     tunnel = 0
  93.     repeat
  94.         tunnel = math.random(101,1000)
  95.     until checkTunnel(prog, tunnel) == 0
  96.     setTunnel(prog, tunnel)
  97.     return tunnel
  98. end
  99.  
  100. function checkTunnel(prog, identy)
  101.     identy = identy or getIdenty(prog)
  102.  
  103.     local pingC = 0
  104.     timer = os.startTimer(1)
  105.     modem.transmit(getPort(prog), identy, "ping")
  106.     while true do
  107.         local event, side, fec, refec, message, distance = os.pullEvent()
  108.         if event == "modem_message" then
  109.             if refec == identy then
  110.                 if(message == "pong") then
  111.                     pingC = pingC + 1
  112.                 end
  113.             end
  114.         elseif event == "timer" then
  115.             if side == timer then
  116.                 break
  117.             end
  118.         end
  119.     end
  120.     return pingC
  121. end
  122.  
  123. function send(prog, message, identy)
  124.     identy = identy or getIdenty(prog)
  125.  
  126.     modem.transmit(getPort(prog), identy, textutils.serialize(message))
  127. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement