Guest User

LanAPI

a guest
Mar 30th, 2013
240
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.70 KB | None | 0 0
  1. --[[
  2. Small documentation:
  3. Made by: Jarle212 aka Jarle Trollebø aka aborysa
  4.  
  5. This project is put on hold, feel free to expand.
  6.  
  7. This api can be used to send information via bundle cable to other CCcomputers or external hardware.
  8.     Protocol:
  9.     7 first bits are reserved for ID, can be usefull if someone decides to build a router  
  10.     8 next bits are reserved as message(char value)
  11.     last bit is confirm bit
  12.  
  13. Exsample program for sending a file(not recomended for large files, can take several minutes):
  14.     Sender:
  15.         os.loadAPI("LanAPI")
  16.         file = fs.open(file,"r")
  17.         content = file:readAll()
  18.         file:close()
  19.         LanAPI.send(ip/id, content, bundled output side)
  20.     Receiver:
  21.         os.loadAPI("LanAPI")
  22.         content = LanAPI.readMessage(bundled input side)
  23.         file = fs.open(file,"w")
  24.         file:write(content)
  25.         file:close()
  26.        
  27. To use this application launch the receiver first
  28.  
  29. Peer to peer chat room: http://pastebin.com/r3PsAFjG
  30.  
  31. Usage of common functions:
  32.     sendChar(id, ascii character value, side)
  33.     cInt(int, system)  --returns a representation of a base 10 number in base system
  34.     sendMessage(id/ip, string message, side) --ip/id is not important for peer to peer
  35.     readMessage(side) --Reads the message and returns a string(will wait for whole message, should be used with parallell for performance)
  36.     readChar(side) reads the character from a side, returns ip and character value
  37. --]]
  38. local startSignal = 1
  39. local endSignal = 0
  40. local CharVal = {"A","B","C","D","E","F"}
  41.  
  42. function cInt(int,system)
  43. local newString = "";
  44. local number = int;
  45. local addNumber = 0
  46.  
  47.     while true do
  48.         addNumber = number % system
  49.         if addNumber > 9 then
  50.             newString = newString .. CharVal[addNumber-9]
  51.             else
  52.             newString = newString .. addNumber
  53.         end
  54.         number = math.floor(number/system)
  55.        
  56.         if number == 0 then
  57.             break;
  58.         end
  59.     end
  60.     return newString:reverse()
  61. end
  62.  
  63. function createMessage(id, char)
  64.     local Ipadd = cInt(id,16)
  65.     local mChar = cInt(tostring(char),16)
  66.     if Ipadd:len() == 1 then
  67.         Ipadd = "0" .. Ipadd
  68.     end
  69.     if mChar:len() == 1 then
  70.         mChar = "0" .. mChar
  71.     end
  72.     local message = mChar .. Ipadd
  73.     return message
  74. end
  75.  
  76. function sendChar(id,char,side)
  77.     mess = createMessage(id,char)
  78.     rs.setBundledOutput(side,tonumber(mess,16)+32768)
  79.     sleep(0.1) --Minimum sleep
  80.     rs.setBundledOutput(side,0)
  81.     sleep(0.1)
  82. end
  83.  
  84.  
  85.  
  86. function readChar(side)
  87.     local signal = 0
  88.     while not (signal >= 32768) do
  89.         os.pullEvent("redstone")
  90.         signal = rs.getBundledInput(side)
  91.     end
  92.     signal = signal - 32768
  93.     local mess = cInt(signal,16)
  94.     if not(mess:len() == 4) then
  95.         mess = "0" .. mess
  96.     end
  97.     local ip = mess:sub(3,4)
  98.     local value = mess:sub(1,2)
  99.    
  100.     return ip, value
  101. end
  102.  
  103. function newReadChar(side)
  104.     local signal = 0
  105.     while true do
  106.         newSignal = rs.getBundledInput(side)
  107.         os.pullEvent("redstone")
  108.         signal = rs.getBundledInput(side)
  109.         if not(newSignal == signal) then
  110.             signal = newSignal
  111.             break
  112.         end
  113.     end
  114.     signal = signal - 32768
  115.     local mess = cInt(signal,16)
  116.     if not(mess:len() == 4) then
  117.         mess = "0" .. mess
  118.     end
  119.     local ip = mess:sub(3,4)
  120.     local value = mess:sub(1,2)
  121.    
  122.     return ip, value
  123. end
  124.  
  125. function readMessage(side)
  126.     local message = ""
  127.     local messageStarted = false
  128.     local messageEnded = false
  129.     local doRead = true
  130.     while not(messageEnded) do
  131.        
  132.         local ip, value,doRead = readChar(side,doRead)
  133.         if tonumber(value,16) == startSignal then
  134.             messageStarted = true
  135.         elseif tonumber(value,16) == endSignal then
  136.             messageEnded = true
  137.         else
  138.             message = message .. string.char(tonumber(value,16))
  139.         end
  140.     end
  141.     return message;
  142. end
  143.  
  144. function sendMessage(id,str,side)
  145.     sendChar(id,1,side)
  146.     for i=1, str:len() do
  147.         sendChar(id,string.byte(str:sub(i,i)),side)
  148.     end
  149.     sendChar(id,0,side)
  150. end
Advertisement
Add Comment
Please, Sign In to add comment