Advertisement
Timendainum

nperi

Nov 24th, 2013
197
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.98 KB | None | 0 0
  1. -- opt/lib/nperi
  2. -- by Timendainum
  3. ---------------------------------------------------
  4.  
  5. -- local declarations
  6. ---------------------------------------------
  7. local port = 88
  8. local timeout = 5
  9. local serverConnections = {}
  10. local response = false
  11. local slp = 0.0001
  12. local maxRetrys = 3
  13.  
  14. ---------------------------------------------
  15. -- local functions
  16. ---------------------------------------------
  17. local function connectToServer(server)
  18.     sleep(slp)
  19.     if not serverConnections[server] then
  20.         --txt.sPrint("Attempting to connect to ", server, " on port ", port)
  21.         -- attempt to connect
  22.         local myConn, response = connection.open(server, port, timeout)
  23.         if not myConn then
  24.             txt.sPrint("--Connection to ", server, " Failed!")
  25.             serverConnections[server], response = false, false
  26.             return false
  27.         else
  28.             --txt.sPrint("--Connected to ", server, " Response: ", response)
  29.             serverConnections[server] = myConn
  30.             return true
  31.         end
  32.     else
  33.         --print("Server already connected!")
  34.         return true
  35.     end
  36. end
  37.  
  38. local function safeSend(server, mType, ...)
  39.     if connectToServer(server) then
  40.         return nets.send(serverConnections[server], mType, ...)
  41.     else
  42.         return false
  43.     end
  44. end
  45.  
  46. local function gatherResponse(server)
  47.     --print("Awaiting result...")
  48.     local messType, tMessage = nil, nil, nil
  49.     messType, tMessage = nets.awaitResponse(serverConnections[server], timeout)
  50.  
  51.     -- preprocess message --
  52.     if tMessage == nil then
  53.         tMessage = { nil }
  54.     end
  55.  
  56.     -- process message
  57.     if messType == "close" then
  58.         -- close
  59.         --txt.sPrint("Server responded with close: ", tMessage[1])
  60.         return false
  61.     elseif messType == "data" then
  62.         -- data
  63.         --txt.sPrint("Server responded with data: ", tMessage[1])
  64.         return unpack(tMessage)
  65.     elseif messType == "response" then
  66.         -- response
  67.         txt.sPrint("Server responded with response: ", tMessage[1])
  68.         return false
  69.     else
  70.         -- anything else - invalid response
  71.         return false
  72.     end
  73. end
  74.  
  75.  
  76.  
  77. local function closeConnection(server)
  78.     if connection.close(serverConnections[server]) then
  79.         safeSend(server, "close", "close")
  80.         serverConnection = false
  81.         --print("--Connection Closed.")
  82.         return true
  83.     else
  84.         --print("--Could not close connection!")
  85.         return false
  86.     end
  87. end
  88.  
  89. ---------------------------------------------
  90. -- functions
  91. ---------------------------------------------
  92.  
  93. function closeAllConnections()
  94.     for k,v in pairs(serverConnections) do
  95.         closeConnection(k)
  96.     end
  97. end
  98.  
  99. function isPresent(server, side)
  100.     -- declarations
  101.     local bResult = false
  102.  
  103.     -- request
  104.     --print("Requesting isPresent()")
  105.     if safeSend(server, "instruction", "isPresent", side) then
  106.         bResult = gatherResponse(server)
  107.     end
  108.  
  109.     return bResult
  110. end
  111.  
  112. function getType(server, side)
  113.     -- declarations
  114.     local sResult = false
  115.  
  116.     -- request
  117.     --print("Requesting getType()")
  118.     if safeSend(server, "instruction", "getType", side) then
  119.         sResult = gatherResponse(server)
  120.     end
  121.    
  122.     return sResult
  123. end
  124.  
  125. function getMethods(server,  side)
  126.     -- declarations
  127.     local tResult = { }
  128.  
  129.     -- request
  130.     --print("Requesting getMethods()")
  131.     if safeSend(server, "instruction", "getMethods", side) then
  132.         tResult = gatherResponse(server)
  133.     end
  134.  
  135.     return tResult
  136. end
  137.  
  138. function call(server, side, method, ...)
  139.     -- declarations
  140.     local result = nil
  141.  
  142.     -- request
  143.     --print("Requesting call()")
  144.     if safeSend(server, "instruction", "call", side, method, ...) then
  145.         result = { gatherResponse(server) }
  146.     else
  147.         return nil
  148.     end
  149.  
  150.     return unpack(result)
  151. end
  152.  
  153. function wrap(server,  side)
  154.     if isPresent(server, side) then
  155.         local tMethods = getMethods(server, side)
  156.         local tResult  = { }
  157.         for n,method in ipairs(tMethods) do
  158.             tResult[method] = function(...)
  159.                 return call(server, side, method, ...)
  160.             end
  161.         end
  162.         return tResult
  163.     end
  164.     return nil
  165. end
  166.  
  167. function getNames(server)
  168.     -- declarations
  169.     local tResult = { }
  170.  
  171.     -- request
  172.     --print("Requesting getNames()")
  173.     if safeSend(server, "instruction", "getNames") then
  174.         tResult = gatherResponse(server)
  175.     end
  176.  
  177.     return tResult
  178. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement