Advertisement
Guest User

Main.py

a guest
Jan 12th, 2016
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.85 KB | None | 0 0
  1. #!/usr/bin/python3
  2. # coding: utf-8
  3. #
  4. # Werkzeug Verleih fuer JumpY
  5. # 12.01.2016  Copyright (C) by meigrafd (meiraspi@gmail.com) published under the MIT License
  6. #
  7. import multiprocessing as mp
  8. import time, logging
  9. try:
  10.     import cymysql
  11. except ImportError:
  12.     print("ERROR: You must install cymysql Module: sudo apt-get install python3-pip && sudo pip3 install cymysql")
  13.     exit()
  14.  
  15. from Barcode import *
  16. from WebSocket import *
  17. #-------------------------------------------------------------------
  18.  
  19. HID_device = '/dev/hidraw0'
  20. WebSocketHost = "0.0.0.0"
  21. WebSocketPort = 7070
  22.  
  23. # Specify Settings for MySQL
  24. mysqlHost = 'localhost'
  25. mysqlPort = '3306'
  26. mysqlLogin = 'root'
  27. mysqlPass = 'raspberry'
  28. mysqlENABLE = True
  29. #mysqlENABLE = False
  30. #-------------------------------------------------------------------
  31.  
  32. def get_MySQL_Data(ID, Type="tool"):
  33.     con=result = None
  34.     con = cymysql.connect(host=mysqlHost, port=int(mysqlPort), user=mysqlLogin, passwd=mysqlPass)
  35.     cur = con.cursor()
  36.     cur.execute("USE werkzeugausgabe;")
  37.     con.commit()
  38.     if Type == "user":
  39.       cur.execute('SELECT name FROM users WHERE uid="%s";' % ID)
  40.     elif Type == "tool":
  41.       cur.execute('SELECT tid,name FROM tools WHERE tid="%s";' % ID)
  42.     con.commit()
  43.     result = cur.fetchall()
  44.     return result
  45.    
  46. def update_MySQL_Data(tid, anzahl, ausleiher):
  47.     con=result = None
  48.     con = cymysql.connect(host=mysqlHost, port=int(mysqlPort), user=mysqlLogin, passwd=mysqlPass)
  49.     cur = con.cursor()
  50.     cur.execute("USE werkzeugausgabe;")
  51.     con.commit()
  52.     cur.execute('SELECT anzahl FROM tools WHERE tid="%s";' % tid)
  53.     row = cur.fetchone()
  54.     if row:
  55.         rest_anzahl = int(row[0]) - int(anzahl)
  56.     cur.execute('SELECT last_log FROM tools WHERE tid="%s";' % tid)
  57.     row = cur.fetchone()
  58.     if row:
  59.         logid = row[0].split(";")[0]
  60.     cur.execute('UPDATE tools SET anzahl="%s", ausleiher="%s" WHERE tid="%s";' % (rest_anzahl, ausleiher, tid))
  61.     #log = logid + time.strftime("%d.%m.%Y %H:%M") + ausleiher + anzahl
  62.     #cur.execute('UPDATE tools SET last_log="%s", log=CONCAT(log, "%s") WHERE tid="%s";' % (log, log, tid))
  63.     #UPDATE tools SET log=CONCAT(log, "1;11.01.2016 19:;Simon Will;1\n") WHERE tid="Zange";
  64.     con.commit()
  65.  
  66. # Main process
  67. if __name__ == '__main__':
  68.     #mp.log_to_stderr(logging.DEBUG)
  69.     # Establish communication queues
  70.     BarcodeQueue = mp.Queue()
  71.     WSqueueIN = mp.Queue()
  72.     WSqueueOUT = mp.Queue()
  73.    
  74.     # Start Child Processes
  75.     BarcodeProcess = ProcessBarcode()
  76.     WebSocketProcess = ProcessWebSocket()
  77.    
  78.     PB = mp.Process(target=BarcodeProcess.Run, args=(HID_device,BarcodeQueue))
  79.     PW = mp.Process(target=WebSocketProcess.Run, args=(WebSocketPort,WebSocketHost,WSqueueIN,WSqueueOUT))
  80.     PB.start()
  81.     PW.start()
  82.  
  83.     # Endless loop of main program
  84.     try:
  85.         while True:
  86.             if not WSqueueIN.empty():
  87.                 request = WSqueueIN.get()
  88.                 request = request.strip()
  89.                 returnlist = ""
  90.                 requestsplit = request.split(':')
  91.                 requestsplit.append("dummy")
  92.                 print("processing command: {}".format(command))
  93.                 command = requestsplit[0]
  94.                 value = requestsplit[1]
  95.                 if value == "dummy":
  96.                     value = "0"
  97.                 if command == "localping":
  98.                     returnlist += "localping:ok"
  99.  
  100.                 elif command == "get_user":
  101.                     ID = BarcodeQueue.get()
  102.                     #verify data
  103.                     data = get_MySQL_Data(ID, Type="user")
  104.                     if not data:
  105.                         returnlist += "get_user:UNKNOWN_USER"
  106.                     else:
  107.                         returnlist += "get_user:" + str(data[0][0])
  108.  
  109.                 elif command == "get_tool":
  110.                     ID = BarcodeQueue.get()
  111.                     #verify data
  112.                     data = get_MySQL_Data(ID, Type="tool")
  113.                     if not data:
  114.                         returnlist += "get_tool:UNKNOWN_TOOL"
  115.                     else:
  116.                         returnlist += "get_tool:" + str(data[0][0] + ";" +str(data[0][1]))
  117.  
  118.                 elif command.find("write_database") != '-1':
  119.                     i = 1
  120.                     j = 0
  121.                     valuesplit = value.split(',')
  122.                     while i < len(valuesplit):
  123.                         toolstring = valuesplit[0].lstrip() + ";" + valuesplit[i]
  124.                         toolstringsplit = toolstring.split(';')
  125.                         update_MySQL_Data(toolstringsplit[1], toolstringsplit[2], toolstringsplit[0])
  126.                         i += 1
  127.                 if returnlist:
  128.                     WSqueueOUT.put(returnlist)
  129.            
  130.             time.sleep(0.1)
  131.     except (KeyboardInterrupt, SystemExit):
  132.         print("Schliesse Programm..")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement