Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #Для работоспособности необходима sqlite3
- #sudo systemctl daemon-reload
- #sudo systemctl enable script.service
- #sudo systemctl start script.service
- import socket
- import sqlite3 as lite
- import sys
- sock = socket.socket()
- #На какой порт подключаться
- sock.bind( ("", 20000) )
- #Максимальное количество подключений
- sock.listen(20)
- #ключ авторизации
- authServerKey = '0000-0000-00000000'
- #база данных
- fbd = '/home/base.db'
- bdc = None
- try:
- bdc = lite.connect(fbd)
- bd = bdc.cursor()
- bd.execute("CREATE TABLE IF NOT EXISTS account(nick VARCHAR(40), balance FLOAT(2), credit FLOAT(2))")
- bd.execute("CREATE TABLE IF NOT EXISTS price(uid VARCHAR(200), label VARCHAR(60), buy FLOAT(2), sell FLOAT(2))")
- def getAccount(Nick):
- bd.execute("SELECT * FROM account WHERE nick='"+Nick+"'")
- ans = bd.fetchone()
- if ans==None:
- return (None,None,None)
- else:
- return ans
- def updAccount(Nick,money):
- u,b,c = getAccount(Nick)
- if money>=0:
- if u==None:
- bd.execute("INSERT INTO account (nick, balance, credit) VALUES ('"+Nick+"', "+str(money)+", 0)")
- else:
- if -c>money+b:
- c += (money + b)
- b = 0
- else:
- b = money + b + c
- c = 0
- bd.execute("UPDATE account SET balance=" + str(b)+ ", credit="+str(c)+" WHERE nick='" +Nick+ "'")
- else:
- if b + money+c>=0:
- bd.execute("UPDATE account SET balance=" + str(b + money+c)+ ", credit=0 WHERE nick='" +Nick+ "'")
- else:
- bd.execute("UPDATE account SET balance=0, credit=" + str(b + money+c)+ " WHERE nick='" +Nick+ "'")
- bdc.commit()
- def getAccounts():
- bd.execute("SELECT * FROM account")
- ans = bd.fetchall()
- ret="{"
- for a in ans:
- ret+="{nick='"+a[0]+"', balance="+str(a[1])+", credit="+str(a[2])+"},"
- ret+="}"
- return ret
- def getPrice(uid):
- bd.execute("SELECT * FROM price WHERE uid='"+uid+"'")
- ans = bd.fetchone()
- if ans==None:
- return (None,None,None,None)
- else:
- return ans
- def getPrices():
- bd.execute("SELECT * FROM price")
- ans = bd.fetchall()
- ret="{"
- for a in ans:
- ret+= "['"+a[0]+"']={label='"+a[1]+"', buy="+str(a[2])+", sell="+str(a[3])+"},"
- ret+="}"
- return ret
- def updPrice(uid,label,buy,sell):
- u,l,b,s = getPrice(uid)
- if u==None:
- bd.execute("INSERT INTO price (uid, label, buy, sell) VALUES ('"+uid+"', '"+label+"', "+str(buy)+", "+str(sell)+")")
- else:
- bd.execute("UPDATE price SET label='"+label+"', buy="+str(buy)+", sell="+str(sell)+" WHERE uid='" +uid+ "'")
- bdc.commit()
- while True:
- try:
- authKey, bdquery, nick, money, uid, label, buy, sell = "", "", "", 0, "", "", 0, 0
- conn, addr = sock.accept()
- dt = ""
- data=" "
- while data[len(data)-1]!='\n':
- data = conn.recv(16384).decode("utf-8")
- data = data[:len(data)]
- dt+=data
- dt = dt[:len(dt)-1]
- if dt.find("&")==-1:
- pass
- else:
- for d in dt.split("&"):
- if d.find("=")==-1:
- pass
- else:
- k,v = d.split("=")
- if k=="authkey":
- authkey = v
- if k=="bdquery":
- bdquery = v
- if k=="nick":
- nick = v
- if k=="money":
- money = float(v)
- if k=="uid":
- uid = v
- if k=="label":
- label = v
- if k=="buy":
- buy = float(v)
- if k=="sell":
- sell = float(v)
- if bdquery=="getac":
- u,b,c = getAccount(nick)
- if u==None:
- u,b,c = nick,0,0
- st = "{nick='%s',balance=%f,credit=%f}"%(u,b,c)
- conn.send(st.encode("utf-8"))
- if bdquery=="getacs":
- conn.send(getAccounts().encode("utf-8"))
- if bdquery=="updac":
- updAccount(nick,money)
- conn.send("true".encode("utf-8"))
- if bdquery=="getpr":
- u,l,b,s = getPrice(uid)
- if u==None:
- u,l,b,s = uid,"",0,0
- st = "{uid='%s',label='%s',buy=%f,sell=%f}"%(u,l,b,s)
- conn.send(st.encode("utf-8"))
- if bdquery=="getprs":
- conn.send(getPrices().encode("utf-8"))
- if bdquery=="updpr":
- updPrice(uid,label,buy,sell)
- conn.send("true".encode("utf-8"))
- conn.close()
- except lite.Error as e:
- print("Error %s:" % e.args[0])
- sys.exit(1)
- except lite.Error as e:
- print("Error %s:" % e.args[0])
- sys.exit(1)
- finally:
- if bdc:
- bdc.commit()
- bdc.close()
- sock.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement