Advertisement
Timendainum

nets

Nov 30th, 2013
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.65 KB | None | 0 0
  1. -- opt/lib/nets
  2. -- by Timendainum
  3. -- Network serialization wrapper functions for LyqydNet
  4. -- For LyqydNet by Lyqyd
  5. -- http://www.computercraft.info/forums2/index.php?/topic/1708-lyqydnet-rednet-api/
  6. ---------------------------------------------------
  7.  
  8.  
  9. ---------------------------------------------------
  10. -- local functions
  11. local function processMessageType(raw)
  12.     --txt.sPrint("processMessageType called: ", eaw)
  13.     local result = "nil"
  14.     if raw ~= nil then
  15.         if type(raw) == "string" then
  16.             result = raw
  17.         else
  18.             result = "invalid"
  19.         end
  20.     end
  21.     --txt.sPrint("processMessageType done: ", result)
  22.     return result
  23. end
  24.  
  25. local function processMessage(raw)
  26.     --txt.sPrint("processMessage called: ", raw)
  27.     local tMessage = {}
  28.     -- preprocess message --
  29.     if raw == nil then
  30.         tMessage = nil
  31.     elseif string.len(raw) > 2 and string.sub(raw, 1, 1) == "{" and string.sub(raw, -1) == "}" then
  32.         local tResult = textutils.unserialize(raw)
  33.         if tResult[1] then
  34.             tMessage = tResult
  35.         else
  36.             tMessage = nil
  37.         end
  38.     else
  39.         tMessage = { raw }
  40.     end
  41.  
  42.     if tMessage == nil then
  43.         tMessage = { nil }
  44.     end
  45.    
  46.     -- handle response
  47.     --txt.sPrint("processMessage done: ", unpack(tMessage))
  48.  
  49.     return tMessage
  50. end
  51.  
  52.  
  53. ---------------------------------------------------
  54. -- functions
  55. -- send
  56. function send(conn, messageType, ...)
  57.     --txt.sPrint("send called: conn: ", conn, "  messageType: ",messageType, ...)
  58.     if conn then
  59.         local tSData = {...}
  60.         local result = textutils.serialize(tSData)
  61.         --txt.sPrint("nets.send(): Sending serialized data: ",  result)
  62.         return connection.send(conn, messageType, result)
  63.     else
  64.         print("nets.send() failed, no connection to send.")
  65.         return false
  66.     end
  67. end
  68.  
  69. -- awaitResponse
  70. function awaitResponse(conn, timeout)
  71.     --print("awaitResponse called: conn: ", conn, " timeout:" ,timeout)
  72.     if conn then
  73.         local rawMessType, messType, rawMessage, tMessage = nil, "nil", nil, nil
  74.         rawMessType, rawMessage = connection.awaitResponse(conn, timeout)
  75.  
  76.         -- preprocess messType
  77.         messType = processMessageType(rawMessType)
  78.  
  79.         tMessage = processMessage(rawMessage)
  80.        
  81.         -- handle response
  82.         return messType, tMessage
  83.     else
  84.         print("nets.awaitResponse() failed, no connection to await.")
  85.         return false
  86.     end
  87. end
  88.  
  89. -- listenIdle()
  90. function listenIdle(port)
  91.     --print("listenIdle called...")
  92.     local conn, rawMessType, messType, rawMessage, tMessage = nil, nil, "nil", nil, {}
  93.     conn, rawMessType, rawMessage = connection.listenIdle(port)
  94.    
  95.     -- preprocess messType
  96.     messType = processMessageType(rawMessType)
  97.  
  98.     -- preprocess message --
  99.     tMessage = processMessage(rawMessage)
  100.  
  101.     -- handle response
  102.     return conn, messType, tMessage
  103. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement