insert lock-methods into server

This commit is contained in:
Bastian Schroll 2018-01-12 09:02:26 +01:00
parent d08e11e17e
commit a955058edd

View file

@ -17,6 +17,7 @@
import logging
import socketserver
import threading
import time
logging.debug("- %s loaded", __name__)
@ -30,6 +31,7 @@ class TCPHandler(socketserver.BaseRequestHandler):
"""!Handles the request from an single client in a own thread
Insert a request in the clients[] list and send a [ack]"""
clientsLock = threading.Lock() # todo check if needed
data = 1
cur_thread = threading.current_thread()
req_name = str(cur_thread) + " " + self.client_address[0]
@ -42,7 +44,9 @@ class TCPHandler(socketserver.BaseRequestHandler):
# add a new entry at first position (index 0) with client IP
# and the decoded data dict as an string in utf-8
_clients.insert(0, (self.client_address[0], data))
clientsLock.acquire() # todo check if needed - only append not modify data
_clients.insert(0, (self.client_address[0], data, time.time())) # time() to calc time in queue
clientsLock.release() # todo check if needed
logging.debug("Add data to queue")
logging.debug(req_name + " send: [ack]")
@ -81,6 +85,7 @@ class TCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
self.flushData()
self._server_thread = threading.Thread(target=self._server.serve_forever)
self._server_thread.name = "Thread-BWServer"
self._server_thread.daemon = True
self._server_thread.start()
logging.debug("TCPServer started in Thread: " + self._server_thread.name)
@ -127,7 +132,10 @@ class TCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
@return Next data packet.py from intern queue"""
if _clients:
clientsLock = threading.Lock() # todo check if needed
clientsLock.acquire() # todo check if needed - only append not modify data
message = _clients.pop()
clientsLock.release() # todo check if needed
logging.debug("Get data from queue")
return message
return None
@ -136,4 +144,7 @@ class TCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
def flushData():
"""!To flush all existing data in queue"""
logging.debug("Flush client data queue")
clientsLock = threading.Lock() # todo check if needed
clientsLock.acquire() # todo check if needed - here is a modify?
_clients.clear()
clientsLock.release() # todo check if needed