Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --bankServer V: 1.0.0
- local date = os.day()
- local time = textutils.formatTime(os.time())
- function openRednet()
- local listOfSides = rs.getSides()
- listofPossibles = {}
- local counter1 = 0
- while true do
- counter1 = counter1+1
- if peripheral.isPresent(tostring(listOfSides[counter1])) and peripheral.getType(listOfSides[counter1]) == "modem" then
- table.insert(listofPossibles,tostring(listOfSides[counter1]))
- end
- if counter1 == 6 and table.maxn(listofPossibles) == 0 then
- return nil
- end
- if counter1 == 6 and table.maxn(listofPossibles) ~= 0 then
- rednet.open(listofPossibles[1])
- return listofPossibles[1]
- end
- end
- end
- function receive()
- id,msg = rednet.receive()
- local data = textutils.unserialize(msg)
- cmd = data[1]
- arg1 = data[2]
- arg2 = data[3]
- arg3 = data[4]
- arg4 = data[5]
- end
- function serverlog(id, log)
- term.clear()
- term.setCursorPos(1, 1)
- local file = fs.open("logs/serverlog", "a")
- file.write(id, ": "..log.."\n")
- file.close()
- print(id, ": "..log)
- end
- function send(id, targ4, targ5, tArg3, tArg4, tArg5)
- if tArg2 == nil then tArg1 = 0 end
- if tArg3 == nil then tArg2 = 0 end
- if tArg4 == nil then tArg3 = 0 end
- if tArg5 == nil then tArg4 = 0 end
- rednet.send(id, textutils.serialize({tArg1, tArg2, tArg3, tArg4, tArg5}))
- end
- function userData(acc)
- local file = fs.open("users/"..acc, "r")
- local cInfo = file.readAll()
- file.close()
- cData = textutils.unserialize(cInfo)
- local cAcc = cData["name"]
- local cPwd = cData["pass"]
- local cBal = cData["bal"]
- end
- function transferData(acc)
- local file = fs.open("users/"..acc, "r")
- local mInfo = file.readAll()
- file.close()
- mData = textutils.unserialize(mInfo)
- local mAcc = mData["name"]
- local mPwd = mData["pass"]
- local mBal = mData["bal"]
- end
- function userWrite(acc)
- local file = fs.open("users/"..acc, "w")
- file.write(textutils.serialize({name = cAcc, pass = cPwd, bal = cBal}))
- file.close()
- end
- function transferWrite(acc)
- local file = fs.open("users/"..acc, "w")
- file.write(textutils.serialize({name = mAcc, pass = mPwd, bal = mBal}))
- file.close()
- end
- serverlog(sId, "Server started")
- openRednet()
- os.loadAPI("crypt")
- sleep(2)
- serverlog(sId, "Rednet activated, System online")
- while true do
- receive()
- local mayor = "mistamadd001"
- if cmd == "create" then -- [[ this is the 'new user' creation command]]
- if fs.exists("clients/"..id) and fs.exists("users/"..arg1)then
- send(id, "used")
- serverlog(id, "Account "..arg1.." already created")
- else
- bal = 1000
- userWrite(arg1)
- send(id, "created")
- serverlog(id, "Account "..arg1.." created")
- end
- elseif cmd == "login" then
- serverlog(id, "User: "..arg1.." login")
- if fs.exists("clients/"..id) and fs.exists("users/"..arg1) then
- userData(arg1)
- if arg2 == cPwd then
- serverlog(id, "User: "..arg1.." Password accepted")
- while true do
- send(id, "confirm", cAcc, cBal)
- recieve()
- if cmd == "withdraw" then -- [[ these options are pretty self explanatory, theyre all triggered by subsequent messages from the ATM]]
- serverlog(id, "User "..cAcc.." Withdraw attempt")
- if cBal >= arg1 or cBal == arg1 then
- cBal = math.floor(tonumber(cBal)-tonumber(arg1))
- clientWrite(arg1)
- serverlog(id, "User "..cAcc.." Withdrew "..arg1.."")
- send(id, "confirm", cBal)
- else
- send(id, "declined")
- serverlog(id, "User "..arg1.." Withdraw failed, Insufficient funds")
- end
- elseif cmd == "deposit" then
- serverlog(id, "User "..cAcc.." Deposit attempt")
- cBal = math.floor(tonumber(cBal)+tonumber(arg1))
- clientWrite(arg1)
- serverlog(id, "User "..cAcc.." Deposited "..arg1.."")
- send(id, "confirm")
- elseif cmd == "transfer" then
- serverlog(id, "User "..cAcc.." transfer attempt")
- if cBal >= arg1 or cBal == arg1 then
- cBal = math.floor(tonumber(cBal)-tonumber(arg1))
- clientWrite(arg1)
- send(id, "confirm")
- transferData(arg2)
- file.close()
- mBal = math.floor(tonumber(mBal)+tonumber(arg1))
- transferWrite(arg2)
- serverlog(id, "User "..cAcc.." transferred $"..arg1.." to: "..arg2.."")
- else
- serverlog(id, "User "..cAcc.." transfer to "..arg2.." failed")
- end
- elseif cmd == "quit" then
- serverlog(id, "User "..cAcc.." logged off")
- break
- else
- send(id, "declined")
- serverlog(id, "Unknown command "..cmd.." entered")
- break
- end
- end
- else
- send(id, textutils.serialize({"declined"}))
- serverlog(id, "User "..arg1.." Password incorrect")
- end
- else
- send(id, "declined")
- serverlog(id, "User "..arg1.." doesn't exist")
- end
- elseif cmd == "rent" then -- [[this is part of my house rental system]]
- serverlog(id, "User "..arg1.." house "..arg4.." purchase attempt")
- local file = fs.open("users/"..arg1, "r")
- local info = file.readAll()
- file.close()
- userData(arg1)
- if cPwd == arg2 and tonumber(cBal) > tonumber(arg5) or tonumber(cBal) == tonumber(arg5) then
- cBal = math.floor(tonumber(cBal)-tonumber(arg5))
- clientWrite(arg1)
- local file = fs.open("users/"..mayor, "r")
- local info = file.readAll()
- file.close()
- transferData(mayor)
- mBal = math.floor(tonumber(mBal)+tonumber(arg5))
- transferWrite(mayor)
- send(id, "confirm")
- serverlog(id, ""..arg1.." house "..arg4.." purchase complete")
- local file = fs.open("plots/"..arg4, "w")
- file.write(arg1)
- file.close()
- else
- send(id, "declined")
- serverlog(id, ""..arg1.." house "..arg4.." purchase failed")
- end
- elseif cmd == "eCharge" then -- [[ this is the start of my utilities charging system]]
- serverlog(id, "Plot "..arg1.." payment attempt")
- local file = fs.open("plots/"..arg1, "r")
- local cAcc = file.readAll()
- file.close()
- userData(cAcc)
- local cost = 0.5
- cBal = math.floor(tonumber(cBal)-tonumber(cost))
- clientWrite(cAcc)
- send(id, "confirm")
- transferData(arg2)
- mBal = math.floor(tonumber(mBal)+tonumber(cost))
- transferWrite(arg2)
- serverlog(id, ""..arg1.." paid "..cost.." for utilities")
- else
- send(id, "declined")
- serverlog(id, "Unknown command "..cmd.." entered")
- end
- end
Add Comment
Please, Sign In to add comment