Advertisement
Guest User

Verleih.py

a guest
Jan 11th, 2016
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/usr/bin/python2
  2. # -*- coding: utf-8 -*-
  3. #
  4. # ACHTUNG: Script ist fuer python2
  5. #
  6. # Starts tornado and Socket for Reading/Writing <-> WebInterface
  7. #
  8. # DONT use CTRL+Z to terminate script, else Port is blocked
  9. #
  10. ###
  11. from __future__ import print_function
  12. from subprocess import Popen
  13. import threading, time, sys, os.path, signal
  14. try:
  15.     import SocketServer as socketserver
  16. except ImportError:
  17.     import socketserver
  18. try:
  19.     import cymysql
  20. except ImportError:
  21.     print("ERROR: You must install cymysql Module: sudo apt-get install python-pip && sudo pip install cymysql")
  22.     exit()
  23.  
  24. #-------------------------------------------------------------------
  25. DEBUG = True
  26. #DEBUG = False
  27.  
  28. SocketHost = "0.0.0.0"
  29. SocketPort = 7060
  30.  
  31. # Specify Settings for MySQL
  32. mysqlHost = 'localhost'
  33. mysqlPort = '3306'
  34. mysqlLogin = 'root'
  35. mysqlPass = 'raspberry'
  36. mysqlENABLE = True
  37. #mysqlENABLE = False
  38. #-------------------------------------------------------------------
  39.  
  40. # thread docu: http://www.tutorialspoint.com/python/python_multithreading.htm
  41. # socketserver docu: https://docs.python.org/2/library/socketserver.html
  42. # tornado & serial docu: http://forums.lantronix.com/showthread.php?p=3131
  43. # psutil: https://github.com/giampaolo/psutil
  44.  
  45. #-------------------------------------------------------------------
  46. # Dictionary docu: http://www.tutorialspoint.com/python/python_dictionary.htm
  47. dictionary = {}
  48. dictionary['processing'] = None
  49. currentTools = {};
  50. #-------------------------------------------------------------------
  51.  
  52.  
  53. try:
  54.     DEBUG
  55. except NameError:
  56.     DEBUG = False
  57.  
  58. if DEBUG:
  59.     print("Enabling DEBUG mode!")
  60. else:
  61.     print("Disabling DEBUG mode!")
  62.  
  63.  
  64. def printD(message):
  65.     if DEBUG:
  66.         print(message)
  67.  
  68. def signal_handler(signal, frame):
  69.     print('Script Interrupted! (Control-C)')
  70.     sys.exit()
  71.        
  72. #http://www.gossamer-threads.com/lists/python/python/375364
  73. def awk_it(instring,index,delimiter=" "):
  74.     try:
  75.         return [instring,instring.split(delimiter)[index-1]][max(0,min(1,index))]
  76.     except:
  77.         return ""
  78.  
  79. def get_MySQL_Data(ID, Type="tool"):
  80.     con=result = None
  81.     con = cymysql.connect(host=mysqlHost, port=int(mysqlPort), user=mysqlLogin, passwd=mysqlPass)
  82.     cur = con.cursor()
  83.     cur.execute("USE werkzeugausgabe;")
  84.     con.commit()
  85.     if Type == "user":
  86.         cur.execute('SELECT name FROM users WHERE uid="%s";' % ID)
  87.     elif Type == "tool":
  88.         cur.execute('SELECT tid,name FROM tools WHERE tid="%s";' % ID)
  89.     con.commit()
  90.     result = cur.fetchall()
  91.     return result
  92.  
  93. def update_MySQL_Data(tid, anzahl, ausleiher):
  94.     con=result = None
  95.     con = cymysql.connect(host=mysqlHost, port=int(mysqlPort), user=mysqlLogin, passwd=mysqlPass)
  96.     cur = con.cursor()
  97.     cur.execute("USE werkzeugausgabe;")
  98.     con.commit()
  99.     cur.execute('SELECT anzahl FROM tools WHERE tid="%s";' % tid)
  100.     row = cur.fetchone()
  101.     if row:
  102.         anzahl = int(row[0]) - int(anzahl)
  103.     cur.execute('UPDATE tools SET anzahl="%s", ausleiher="%s" WHERE tid="%s";' % (anzahl, ausleiher, tid))
  104.     con.commit()
  105.  
  106.  
  107. ### Parse data from WebSocket or SocketServer
  108. #required format-> command:value
  109. def _RequestHandler(requestlist):
  110.     returnlist = ""
  111.     for request in requestlist:
  112.         request =  request.strip()
  113.         requestsplit = request.split(':')
  114.         requestsplit.append("dummy")
  115.         command = requestsplit[0]
  116.         value = requestsplit[1]
  117.         if value == "dummy":
  118.             value = "0"
  119.         if command == "localping":
  120.             returnlist += "\n localping:ok"
  121.         elif command == "BARCODE":
  122.             BARCODE = ':'.join(requestsplit[1:])
  123.             #verify data
  124.             if dictionary['processing'] == "get_user":
  125.                 data = get_MySQL_Data(BARCODE, Type="user")
  126.                 if not data:
  127.                     returnlist += "\n get_user:UNKNOWN_USER"
  128.                 else:
  129.                     returnlist += "\n get_user:" + str(data[0][0])
  130.             elif dictionary['processing'] == "get_tool":
  131.                 data = get_MySQL_Data(BARCODE, Type="tool")
  132.                 if not data:
  133.                     returnlist += "\n get_tool:UNKNOWN_TOOL"
  134.                 else:
  135.                     returnlist += "\n get_tool:" + str(data[0][0] + ";" +str(data[0][1]))
  136.         elif command == "get_user":
  137.             dictionary['processing'] = command
  138.         elif command == "get_tool":
  139.             dictionary['processing'] = command        
  140.         elif command.find("write_database") != '-1':
  141.             i = 1
  142.             j = 0
  143.             valuesplit = value.split(',')
  144.             while i < len(valuesplit):
  145.                 toolstring = valuesplit[0].lstrip() + ";" + valuesplit[i]
  146.                 toolstringsplit = toolstring.split(';')
  147.                 update_MySQL_Data(toolstringsplit[1], toolstringsplit[2], toolstringsplit[0])
  148.                 i = i + 1
  149.     return returnlist
  150.  
  151. #socket server <- barcode scanner (only one way)
  152. class ThreadedTCPRequestHandler(socketserver.StreamRequestHandler):
  153.     def handle(self):
  154.         # self.rfile is a file-like object created by the handler;
  155.         # we can now use e.g. readline() instead of raw recv() calls
  156.         self.data = self.rfile.readline().strip()
  157.         printD("SocketRequest: {}".format(self.data))
  158.         try:
  159.             self.wfile.write(_RequestHandler(self.data))
  160.         except Exception as error:
  161.             print("Error in ThreadedTCPRequestHandler: " + str(error))
  162.         except (KeyboardInterrupt, SystemExit):
  163.             sys.exit()
  164.  
  165. class ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
  166.     pass
  167.  
  168.  
  169. if __name__ == "__main__":
  170.     try:
  171.         # Start a thread with the server - that thread will then start one more thread for each request
  172.         socket_server = ThreadedTCPServer((SocketHost, SocketPort), ThreadedTCPRequestHandler)
  173.         ip, port = socket_server.server_address
  174.         socket_server_thread = threading.Thread(target=socket_server.serve_forever)
  175.         socket_server_thread.start()
  176.         signal.signal(signal.SIGINT, signal_handler)
  177.         signal.signal(signal.SIGTERM, signal_handler)
  178.     except Exception, e1:
  179.         print("Error...: " + str(e1))
  180.     except KeyboardInterrupt:
  181.         print("Schliesse Programm..")
  182.         raise SystemExit("Exiting")
  183.         sys.exit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement