Advertisement
Noki1111111

shop2.0-server

May 8th, 2018
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.25 KB | None | 0 0
  1. #Для работоспособности необходима sqlite3
  2. #sudo systemctl daemon-reload
  3. #sudo systemctl enable script.service
  4. #sudo systemctl start script.service
  5. import socket
  6. import sqlite3 as lite
  7. import sys
  8. sock = socket.socket()
  9. #На какой порт подключаться
  10. sock.bind( ("", 20000) )
  11. #Максимальное количество подключений
  12. sock.listen(20)
  13. #ключ авторизации
  14. authServerKey = '0000-0000-00000000'
  15. #база данных
  16. fbd = '/home/base.db'
  17. bdc = None
  18. try:
  19.     bdc = lite.connect(fbd)
  20.     bd = bdc.cursor()
  21.     bd.execute("CREATE TABLE IF NOT EXISTS account(nick VARCHAR(40), balance FLOAT(2), credit FLOAT(2))")
  22.     bd.execute("CREATE TABLE IF NOT EXISTS price(uid VARCHAR(200), label VARCHAR(60), buy FLOAT(2), sell FLOAT(2))")
  23.     def getAccount(Nick):
  24.         bd.execute("SELECT * FROM account WHERE nick='"+Nick+"'")
  25.         ans = bd.fetchone()
  26.         if ans==None:
  27.             return (None,None,None)
  28.         else:
  29.             return ans
  30.     def updAccount(Nick,money):
  31.         u,b,c = getAccount(Nick)
  32.         if money>=0:
  33.             if u==None:
  34.                 bd.execute("INSERT INTO account (nick, balance, credit) VALUES ('"+Nick+"', "+str(money)+", 0)")
  35.             else:
  36.                 if -c>money+b:
  37.                     c += (money + b)
  38.                     b = 0
  39.                 else:
  40.                     b = money + b + c
  41.                     c = 0
  42.                 bd.execute("UPDATE account SET balance=" + str(b)+ ", credit="+str(c)+" WHERE nick='" +Nick+ "'")
  43.         else:
  44.             if b + money+c>=0:
  45.                 bd.execute("UPDATE account SET balance=" + str(b + money+c)+ ", credit=0 WHERE nick='" +Nick+ "'")
  46.             else:
  47.                 bd.execute("UPDATE account SET balance=0, credit=" + str(b + money+c)+ " WHERE nick='" +Nick+ "'")
  48.         bdc.commit()
  49.     def getAccounts():
  50.         bd.execute("SELECT * FROM account")
  51.         ans = bd.fetchall()
  52.         ret="{"
  53.         for a in ans:
  54.             ret+="{nick='"+a[0]+"', balance="+str(a[1])+", credit="+str(a[2])+"},"
  55.         ret+="}"
  56.         return ret
  57.     def getPrice(uid):
  58.         bd.execute("SELECT * FROM price WHERE uid='"+uid+"'")
  59.         ans = bd.fetchone()
  60.         if ans==None:
  61.             return (None,None,None,None)
  62.         else:
  63.             return ans
  64.     def getPrices():
  65.         bd.execute("SELECT * FROM price")
  66.         ans = bd.fetchall()
  67.         ret="{"
  68.         for a in ans:
  69.             ret+= "['"+a[0]+"']={label='"+a[1]+"', buy="+str(a[2])+", sell="+str(a[3])+"},"
  70.         ret+="}"
  71.         return ret
  72.     def updPrice(uid,label,buy,sell):
  73.         u,l,b,s = getPrice(uid)
  74.         if u==None:
  75.             bd.execute("INSERT INTO price (uid, label, buy, sell) VALUES ('"+uid+"', '"+label+"', "+str(buy)+", "+str(sell)+")")
  76.         else:
  77.             bd.execute("UPDATE price SET label='"+label+"', buy="+str(buy)+", sell="+str(sell)+" WHERE uid='" +uid+ "'")
  78.         bdc.commit()
  79.     while True:
  80.         try:
  81.             authKey, bdquery, nick, money, uid, label, buy, sell = "", "", "", 0, "", "", 0, 0
  82.             conn, addr = sock.accept()
  83.             dt = ""
  84.             data=" "
  85.             while data[len(data)-1]!='\n':
  86.                 data = conn.recv(16384).decode("utf-8")
  87.                 data = data[:len(data)]
  88.                 dt+=data
  89.             dt = dt[:len(dt)-1]
  90.             if dt.find("&")==-1:
  91.                 pass
  92.             else:
  93.                 for d in dt.split("&"):
  94.                     if d.find("=")==-1:
  95.                         pass
  96.                     else:
  97.                         k,v = d.split("=")
  98.                         if k=="authkey":
  99.                             authkey = v
  100.                         if k=="bdquery":
  101.                             bdquery = v
  102.                         if k=="nick":
  103.                             nick = v
  104.                         if k=="money":
  105.                             money = float(v)
  106.                         if k=="uid":
  107.                             uid = v
  108.                         if k=="label":
  109.                             label = v
  110.                         if k=="buy":
  111.                             buy = float(v)
  112.                         if k=="sell":
  113.                             sell = float(v)
  114.             if bdquery=="getac":
  115.                 u,b,c = getAccount(nick)
  116.                 if u==None:
  117.                     u,b,c = nick,0,0
  118.                 st = "{nick='%s',balance=%f,credit=%f}"%(u,b,c)
  119.                 conn.send(st.encode("utf-8"))
  120.             if bdquery=="getacs":
  121.                 conn.send(getAccounts().encode("utf-8"))
  122.             if bdquery=="updac":
  123.                 updAccount(nick,money)
  124.                 conn.send("true".encode("utf-8"))
  125.             if bdquery=="getpr":
  126.                 u,l,b,s = getPrice(uid)
  127.                 if u==None:
  128.                     u,l,b,s = uid,"",0,0
  129.                 st = "{uid='%s',label='%s',buy=%f,sell=%f}"%(u,l,b,s)
  130.                 conn.send(st.encode("utf-8"))
  131.             if bdquery=="getprs":
  132.                 conn.send(getPrices().encode("utf-8"))
  133.             if bdquery=="updpr":
  134.                 updPrice(uid,label,buy,sell)
  135.                 conn.send("true".encode("utf-8"))
  136.             conn.close()
  137.         except lite.Error as e:
  138.             print("Error %s:" % e.args[0])
  139.             sys.exit(1)
  140. except lite.Error as e:
  141.     print("Error %s:" % e.args[0])
  142.     sys.exit(1)
  143. finally:
  144.     if bdc:
  145.         bdc.commit()
  146.         bdc.close()
  147.     sock.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement