fugitiveplatypus

Bluenet.lua

Jun 23rd, 2013
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.00 KB | None | 0 0
  1. print("--Loading Bluenet v0.1--")
  2.  
  3. Bluenet = {}
  4.  
  5. function Bluenet:respond(message, id, rmessage)
  6.         if not message or not rmessage then
  7.                 return false
  8.         end
  9.  
  10.         while true do
  11.                 sleep(0)
  12.                 ret = Bluenet:get(id, message)
  13.                 if ret then
  14.                         Bluenet:send(id, rmessage)
  15.                         return ret
  16.                 end
  17.         end
  18.  
  19. end
  20.  
  21. function safe_broadcast(message, cmessage, list, rmessage, timeout)
  22.         if not list then
  23.                 return false
  24.         end
  25.  
  26.         Bluenet:broadcast(message, list)
  27.  
  28.         for i=1,table.getn(list) do
  29.                 Bluenet:ping_ack(cmessage, list[i], rmessage, timeout)
  30.         end
  31. end
  32.  
  33. function Bluenet:broadcast(message, list)
  34.  
  35.         if not message then
  36.                 return false
  37.         end
  38.  
  39.         if not list then
  40.                 rednet.broadcast(message)
  41.                 return true
  42.         end
  43.  
  44.         for i=1,table.getn(list) do
  45.                 Bluenet:send(list[i], message)
  46.         end
  47. end
  48.  
  49. function Bluenet:get(id, message, timeout)
  50.         local loc_id, loc_message = rednet.receive(timeout)
  51.         if loc_id and loc_message then
  52.  
  53.                 if id and message then
  54.                         if loc_id == id and loc_message == message then
  55.                                 return true
  56.                         end
  57.                         return false
  58.  
  59.                 elseif id then
  60.                         if loc_id == id then
  61.                                 return loc_message
  62.                         end
  63.                         return nil
  64.  
  65.                 elseif message then
  66.                         if loc_message == message then
  67.                                 return loc_id
  68.                         end
  69.                         return nil
  70.  
  71.                 else
  72.                         return { loc_id, loc_message }
  73.                 end
  74.  
  75.         end
  76. end
  77.  
  78. function Bluenet:ping_ack(smessage, id, message, timeout)
  79.  
  80.         local loc_message = nil
  81.         while true do
  82.                 sleep(0)
  83.                 Bluenet:send(id, smessage)
  84.                 ret = Bluenet:get(id, message, timeout)
  85.                 if ret then
  86.                         break
  87.                 end
  88.         end
  89. end
  90.  
  91. function Bluenet:send(id, message)
  92.         rednet.send(id, message)
  93. end
  94.  
  95. function Bluenet:open()
  96.  
  97.         local sides = {"right", "left", "front", "back", "top", "bottom" }
  98.         local status = false
  99.         local n = nil
  100.         for i=1,table.getn(sides) do
  101.                 local ret = pcall(rednet.open, sides[i])
  102.                 if ret and rednet.isOpen(sides[i]) then
  103.                         status = true
  104.                         n = i
  105.                         break
  106.                 end
  107.         end
  108.  
  109.         if not status then
  110.                 error("Bluenet: No wireless modem!")
  111.         else
  112.                 print("--Bluenet loaded! (side: "..sides[n]..")--")
  113.         end
  114.  
  115. end
  116.  
  117. Bluenet:open()
Advertisement
Add Comment
Please, Sign In to add comment