Guest User

bankServer

a guest
May 23rd, 2014
265
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 6.69 KB | None | 0 0
  1. --bankServer V: 1.0.0
  2.  
  3. local date = os.day()
  4. local time = textutils.formatTime(os.time())
  5.  
  6. function openRednet()
  7.   local listOfSides = rs.getSides()
  8.   listofPossibles = {}
  9.   local counter1 = 0
  10.   while true do
  11.     counter1 = counter1+1
  12.  
  13.     if peripheral.isPresent(tostring(listOfSides[counter1])) and peripheral.getType(listOfSides[counter1]) == "modem" then
  14.      table.insert(listofPossibles,tostring(listOfSides[counter1]))
  15.     end
  16.  
  17.     if counter1 == 6 and table.maxn(listofPossibles) == 0 then
  18.      
  19.      return nil
  20.     end
  21.  
  22.     if counter1 == 6 and table.maxn(listofPossibles) ~= 0 then
  23.      rednet.open(listofPossibles[1])
  24.      return listofPossibles[1]
  25.     end
  26.   end
  27. end
  28.  
  29. function receive()
  30.   id,msg = rednet.receive()
  31.   local data = textutils.unserialize(msg)
  32.   cmd = data[1]
  33.   arg1 = data[2]
  34.   arg2 = data[3]
  35.   arg3 = data[4]
  36.   arg4 = data[5]
  37. end
  38.  
  39. function serverlog(id, log)
  40.   term.clear()
  41.   term.setCursorPos(1, 1)
  42.   local file = fs.open("logs/serverlog", "a")
  43.   file.write(id, ": "..log.."\n")
  44.   file.close()
  45.   print(id, ": "..log)
  46. end
  47.  
  48. function send(id, targ4, targ5, tArg3, tArg4, tArg5)
  49.   if tArg2 == nil then tArg1 = 0 end
  50.   if tArg3 == nil then tArg2 = 0 end
  51.   if tArg4 == nil then tArg3 = 0 end
  52.   if tArg5 == nil then tArg4 = 0 end
  53.   rednet.send(id, textutils.serialize({tArg1, tArg2, tArg3, tArg4, tArg5}))
  54. end
  55.  
  56. function userData(acc)
  57.   local file = fs.open("users/"..acc, "r")
  58.   local cInfo = file.readAll()
  59.   file.close()
  60.   cData = textutils.unserialize(cInfo)
  61.   local cAcc = cData["name"]
  62.   local cPwd = cData["pass"]
  63.   local cBal = cData["bal"]
  64. end
  65.  
  66. function transferData(acc)
  67.   local file = fs.open("users/"..acc, "r")
  68.   local mInfo = file.readAll()
  69.   file.close()
  70.   mData = textutils.unserialize(mInfo)
  71.   local mAcc = mData["name"]
  72.   local mPwd = mData["pass"]
  73.   local mBal = mData["bal"]
  74. end
  75.  
  76. function userWrite(acc)
  77.   local file = fs.open("users/"..acc, "w")
  78.   file.write(textutils.serialize({name = cAcc, pass = cPwd, bal = cBal}))
  79.   file.close()
  80. end
  81.  
  82. function transferWrite(acc)
  83.   local file = fs.open("users/"..acc, "w")
  84.   file.write(textutils.serialize({name = mAcc, pass = mPwd, bal = mBal}))
  85.   file.close()
  86. end
  87.  
  88. serverlog(sId, "Server started")
  89. openRednet()
  90.  
  91. os.loadAPI("crypt")
  92. sleep(2)
  93. serverlog(sId, "Rednet activated, System online")
  94.  
  95. while true do
  96.   receive()
  97.   local mayor = "mistamadd001"
  98.   if cmd == "create" then -- [[ this is the 'new user' creation command]]
  99.     if fs.exists("clients/"..id) and fs.exists("users/"..arg1)then
  100.         send(id, "used")
  101.         serverlog(id, "Account "..arg1.." already created")
  102.     else
  103.       bal = 1000
  104.       userWrite(arg1)
  105.       send(id, "created")
  106.       serverlog(id, "Account "..arg1.." created")
  107.     end
  108.   elseif cmd == "login" then
  109.     serverlog(id, "User: "..arg1.." login")
  110.     if fs.exists("clients/"..id) and fs.exists("users/"..arg1) then
  111.       userData(arg1)
  112.       if arg2 == cPwd then
  113.         serverlog(id, "User: "..arg1.." Password accepted")
  114.         while true do
  115.           send(id, "confirm", cAcc, cBal)
  116.           recieve()
  117.           if cmd == "withdraw" then -- [[ these options are pretty self explanatory, theyre all triggered by subsequent messages from the ATM]]
  118.             serverlog(id, "User "..cAcc.." Withdraw attempt")
  119.             if cBal >= arg1 or cBal == arg1 then
  120.               cBal = math.floor(tonumber(cBal)-tonumber(arg1))  
  121.               clientWrite(arg1)
  122.               serverlog(id, "User "..cAcc.." Withdrew "..arg1.."")
  123.               send(id, "confirm", cBal)
  124.             else
  125.               send(id, "declined")
  126.               serverlog(id, "User "..arg1.." Withdraw failed, Insufficient funds")
  127.             end
  128.           elseif cmd == "deposit" then
  129.             serverlog(id, "User "..cAcc.." Deposit attempt")
  130.             cBal = math.floor(tonumber(cBal)+tonumber(arg1))  
  131.             clientWrite(arg1)
  132.             serverlog(id, "User "..cAcc.." Deposited "..arg1.."")
  133.             send(id, "confirm")
  134.           elseif cmd == "transfer" then
  135.             serverlog(id, "User "..cAcc.." transfer attempt")
  136.             if cBal >= arg1 or cBal == arg1 then
  137.               cBal = math.floor(tonumber(cBal)-tonumber(arg1))  
  138.               clientWrite(arg1)
  139.               send(id, "confirm")
  140.               transferData(arg2)
  141.               file.close()
  142.               mBal = math.floor(tonumber(mBal)+tonumber(arg1))  
  143.               transferWrite(arg2)
  144.               serverlog(id, "User "..cAcc.." transferred $"..arg1.." to: "..arg2.."")
  145.             else
  146.               serverlog(id, "User "..cAcc.." transfer to "..arg2.." failed")
  147.             end
  148.           elseif cmd == "quit" then
  149.             serverlog(id, "User "..cAcc.." logged off")
  150.             break
  151.           else
  152.             send(id, "declined")
  153.             serverlog(id, "Unknown command "..cmd.." entered")
  154.             break
  155.           end
  156.         end
  157.       else
  158.         send(id, textutils.serialize({"declined"}))
  159.         serverlog(id, "User "..arg1.." Password incorrect")          
  160.       end
  161.     else
  162.       send(id, "declined")
  163.       serverlog(id, "User "..arg1.." doesn't exist")
  164.     end
  165.   elseif cmd == "rent" then -- [[this is part of my house rental system]]
  166.     serverlog(id, "User "..arg1.." house "..arg4.." purchase attempt")    
  167.     local file = fs.open("users/"..arg1, "r")
  168.     local info = file.readAll()
  169.     file.close()
  170.     userData(arg1)
  171.     if cPwd == arg2 and tonumber(cBal) > tonumber(arg5) or tonumber(cBal) == tonumber(arg5) then
  172.       cBal = math.floor(tonumber(cBal)-tonumber(arg5))
  173.       clientWrite(arg1)
  174.       local file = fs.open("users/"..mayor, "r")
  175.       local info = file.readAll()
  176.       file.close()
  177.       transferData(mayor)
  178.       mBal = math.floor(tonumber(mBal)+tonumber(arg5))
  179.       transferWrite(mayor)
  180.       send(id, "confirm")
  181.       serverlog(id, ""..arg1.." house "..arg4.." purchase complete")
  182.       local file = fs.open("plots/"..arg4, "w")
  183.       file.write(arg1)
  184.       file.close()
  185.     else
  186.       send(id, "declined")
  187.       serverlog(id, ""..arg1.." house "..arg4.." purchase failed")
  188.     end
  189.   elseif cmd == "eCharge" then -- [[ this is the start of my utilities charging system]]
  190.     serverlog(id, "Plot "..arg1.." payment attempt")
  191.     local file = fs.open("plots/"..arg1, "r")
  192.     local cAcc = file.readAll()
  193.     file.close()
  194.     userData(cAcc)
  195.     local cost = 0.5
  196.     cBal = math.floor(tonumber(cBal)-tonumber(cost))  
  197.     clientWrite(cAcc)
  198.     send(id, "confirm")
  199.     transferData(arg2)
  200.     mBal = math.floor(tonumber(mBal)+tonumber(cost))  
  201.     transferWrite(arg2)
  202.     serverlog(id, ""..arg1.." paid "..cost.." for utilities")
  203.   else
  204.     send(id, "declined")
  205.     serverlog(id, "Unknown command "..cmd.." entered")
  206.   end
  207. end
Add Comment
Please, Sign In to add comment