Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python2
- # -*- coding: utf-8 -*-
- #
- # ACHTUNG: Script ist fuer python2
- #
- # Starts tornado and Socket for Reading/Writing <-> WebInterface
- #
- # DONT use CTRL+Z to terminate script, else Port is blocked
- #
- ###
- from __future__ import print_function
- from subprocess import Popen
- import threading, time, sys, os.path, signal
- try:
- import SocketServer as socketserver
- except ImportError:
- import socketserver
- try:
- import cymysql
- except ImportError:
- print("ERROR: You must install cymysql Module: sudo apt-get install python-pip && sudo pip install cymysql")
- exit()
- #-------------------------------------------------------------------
- DEBUG = True
- #DEBUG = False
- SocketHost = "0.0.0.0"
- SocketPort = 7060
- # Specify Settings for MySQL
- mysqlHost = 'localhost'
- mysqlPort = '3306'
- mysqlLogin = 'root'
- mysqlPass = 'raspberry'
- mysqlENABLE = True
- #mysqlENABLE = False
- #-------------------------------------------------------------------
- # thread docu: http://www.tutorialspoint.com/python/python_multithreading.htm
- # socketserver docu: https://docs.python.org/2/library/socketserver.html
- # tornado & serial docu: http://forums.lantronix.com/showthread.php?p=3131
- # psutil: https://github.com/giampaolo/psutil
- #-------------------------------------------------------------------
- # Dictionary docu: http://www.tutorialspoint.com/python/python_dictionary.htm
- dictionary = {}
- dictionary['processing'] = None
- currentTools = {};
- #-------------------------------------------------------------------
- try:
- DEBUG
- except NameError:
- DEBUG = False
- if DEBUG:
- print("Enabling DEBUG mode!")
- else:
- print("Disabling DEBUG mode!")
- def printD(message):
- if DEBUG:
- print(message)
- def signal_handler(signal, frame):
- print('Script Interrupted! (Control-C)')
- sys.exit()
- #http://www.gossamer-threads.com/lists/python/python/375364
- def awk_it(instring,index,delimiter=" "):
- try:
- return [instring,instring.split(delimiter)[index-1]][max(0,min(1,index))]
- except:
- return ""
- def get_MySQL_Data(ID, Type="tool"):
- con=result = None
- con = cymysql.connect(host=mysqlHost, port=int(mysqlPort), user=mysqlLogin, passwd=mysqlPass)
- cur = con.cursor()
- cur.execute("USE werkzeugausgabe;")
- con.commit()
- if Type == "user":
- cur.execute('SELECT name FROM users WHERE uid="%s";' % ID)
- elif Type == "tool":
- cur.execute('SELECT tid,name FROM tools WHERE tid="%s";' % ID)
- con.commit()
- result = cur.fetchall()
- return result
- def update_MySQL_Data(tid, anzahl, ausleiher):
- con=result = None
- con = cymysql.connect(host=mysqlHost, port=int(mysqlPort), user=mysqlLogin, passwd=mysqlPass)
- cur = con.cursor()
- cur.execute("USE werkzeugausgabe;")
- con.commit()
- cur.execute('SELECT anzahl FROM tools WHERE tid="%s";' % tid)
- row = cur.fetchone()
- if row:
- anzahl = int(row[0]) - int(anzahl)
- cur.execute('UPDATE tools SET anzahl="%s", ausleiher="%s" WHERE tid="%s";' % (anzahl, ausleiher, tid))
- con.commit()
- ### Parse data from WebSocket or SocketServer
- #required format-> command:value
- def _RequestHandler(requestlist):
- returnlist = ""
- for request in requestlist:
- request = request.strip()
- requestsplit = request.split(':')
- requestsplit.append("dummy")
- command = requestsplit[0]
- value = requestsplit[1]
- if value == "dummy":
- value = "0"
- if command == "localping":
- returnlist += "\n localping:ok"
- elif command == "BARCODE":
- BARCODE = ':'.join(requestsplit[1:])
- #verify data
- if dictionary['processing'] == "get_user":
- data = get_MySQL_Data(BARCODE, Type="user")
- if not data:
- returnlist += "\n get_user:UNKNOWN_USER"
- else:
- returnlist += "\n get_user:" + str(data[0][0])
- elif dictionary['processing'] == "get_tool":
- data = get_MySQL_Data(BARCODE, Type="tool")
- if not data:
- returnlist += "\n get_tool:UNKNOWN_TOOL"
- else:
- returnlist += "\n get_tool:" + str(data[0][0] + ";" +str(data[0][1]))
- elif command == "get_user":
- dictionary['processing'] = command
- elif command == "get_tool":
- dictionary['processing'] = command
- elif command.find("write_database") != '-1':
- i = 1
- j = 0
- valuesplit = value.split(',')
- while i < len(valuesplit):
- toolstring = valuesplit[0].lstrip() + ";" + valuesplit[i]
- toolstringsplit = toolstring.split(';')
- update_MySQL_Data(toolstringsplit[1], toolstringsplit[2], toolstringsplit[0])
- i = i + 1
- return returnlist
- #socket server <- barcode scanner (only one way)
- class ThreadedTCPRequestHandler(socketserver.StreamRequestHandler):
- def handle(self):
- # self.rfile is a file-like object created by the handler;
- # we can now use e.g. readline() instead of raw recv() calls
- self.data = self.rfile.readline().strip()
- printD("SocketRequest: {}".format(self.data))
- try:
- self.wfile.write(_RequestHandler(self.data))
- except Exception as error:
- print("Error in ThreadedTCPRequestHandler: " + str(error))
- except (KeyboardInterrupt, SystemExit):
- sys.exit()
- class ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
- pass
- if __name__ == "__main__":
- try:
- # Start a thread with the server - that thread will then start one more thread for each request
- socket_server = ThreadedTCPServer((SocketHost, SocketPort), ThreadedTCPRequestHandler)
- ip, port = socket_server.server_address
- socket_server_thread = threading.Thread(target=socket_server.serve_forever)
- socket_server_thread.start()
- signal.signal(signal.SIGINT, signal_handler)
- signal.signal(signal.SIGTERM, signal_handler)
- except Exception, e1:
- print("Error...: " + str(e1))
- except KeyboardInterrupt:
- print("Schliesse Programm..")
- raise SystemExit("Exiting")
- sys.exit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement