add isRunning/isConnected Props to server and client

This commit is contained in:
Bastian Schroll 2019-02-28 08:57:41 +01:00
parent cc680b578f
commit 9371b71ee0
5 changed files with 66 additions and 41 deletions

View file

@ -112,7 +112,7 @@ class BroadcastServer:
@return True or False"""
try:
if not self._serverThread:
if not self.isRunning:
logging.debug("start udp broadcast server")
self._serverThread = threading.Thread(target=self._listen)
self._serverThread.name = "BroadServ"
@ -136,7 +136,7 @@ class BroadcastServer:
@return True or False"""
try:
if self._serverThread:
if self.isRunning:
logging.debug("stop udp broadcast server")
self._serverShutdown = True
return True

View file

@ -40,12 +40,15 @@ class TCPClient:
@param port: Server Port (8080)
@return True or False"""
try:
self._sock = socket
self._sock.setdefaulttimeout(self._timeout)
self._sock = socket.create_connection((host, port))
logging.debug("connected to %s:%s", host, port)
return True
if not self.isConnected:
self._sock = socket
self._sock.setdefaulttimeout(self._timeout)
self._sock = socket.create_connection((host, port))
logging.debug("connected to %s:%s", host, port)
return True
else:
logging.warning("client always connected")
return True
except ConnectionRefusedError:
logging.error("cannot connect to %s:%s - connection refused", host, port)
return False
@ -61,9 +64,14 @@ class TCPClient:
@return True or False"""
try:
self._sock.close()
logging.debug("disconnected")
return True
if self.isConnected:
self._sock.close()
self._sock = None
logging.debug("disconnected")
return True
else:
logging.warning("client not connected")
return True
except AttributeError:
logging.error("cannot disconnect - no connection established")
return False
@ -111,3 +119,10 @@ class TCPClient:
except: # pragma: no cover
logging.exception("error while receiving")
return False
@property
def isConnected(self):
"""!Property of client connected state"""
if self._sock:
return True
return False

View file

@ -82,6 +82,10 @@ class TCPServer:
self._clientsConnectedLock = threading.Lock()
self._clientsConnected = {}
def __del__(self):
if self.isRunning:
self.stop()
def start(self, port=8080):
"""!Start a threaded TCP socket server
@ -93,21 +97,23 @@ class TCPServer:
@return True or False"""
try:
self._server = ThreadedTCPServer(("", port), ThreadedTCPRequestHandler)
self._server.timeout = self._timeout
self._server.alarmQueue = self._alarmQueue
if not self.isRunning:
self._server = ThreadedTCPServer(("", port), ThreadedTCPRequestHandler)
self._server.timeout = self._timeout
self._server.alarmQueue = self._alarmQueue
self._server.clientsConnctedLock = self._clientsConnectedLock
self._server.clientsConnected = self._clientsConnected
self._server.clientsConnctedLock = self._clientsConnectedLock
self._server.clientsConnected = self._clientsConnected
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: %s", self._server_thread.name)
return True
except OSError:
logging.exception("server always running?")
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: %s", self._server_thread.name)
return True
else:
logging.warning("server always started")
return True
except: # pragma: no cover
logging.exception("cannot start the server")
return False
@ -117,16 +123,17 @@ class TCPServer:
@return True or False"""
try:
self._server.shutdown()
self._server_thread.join()
self._server_thread = None
self._server.socket.close()
self._server = None
logging.debug("TCPServer stopped")
return True
except AttributeError:
logging.exception("cannot stop - server not started?")
return False
if self.isRunning:
self._server.shutdown()
self._server_thread.join()
self._server_thread = None
self._server.socket.close()
self._server = None
logging.debug("TCPServer stopped")
return True
else:
logging.warning("server always stopped")
return True
except: # pragma: no cover
logging.exception("cannot stop the server")
return False
@ -147,3 +154,10 @@ class TCPServer:
# todo return full list or write a print/debug method?
with self._clientsConnectedLock: # because our list is not threadsafe
return self._clientsConnected
@property
def isRunning(self):
"""!Property of server running state"""
if self._server:
return True
return False

View file

@ -48,11 +48,7 @@ try:
from boswatch import configYaml
from boswatch.network.server import TCPServer
from boswatch.packet.packet import Packet
from boswatch.plugin.pluginManager import PluginManager
from boswatch.descriptor.descriptor import Descriptor
from boswatch.filter.doubeFilter import DoubleFilter
from boswatch.utils import header
from boswatch.network.broadcast import BroadcastClient
from boswatch.network.broadcast import BroadcastServer
except: # pragma: no cover
logging.exception("cannot import modules")

View file

@ -55,7 +55,7 @@ class Test_ServerClient:
def test_clientDisconnectFailed(self):
"""!Disconnect while no connection is established"""
self.testClient = TCPClient()
assert not self.testClient.disconnect()
assert self.testClient.disconnect()
def test_clientTransmitFailed(self):
"""!Transmit while no connection is established"""
@ -135,7 +135,7 @@ class Test_ServerClient:
def test_serverStopFailed(self, useServer):
"""!Test to stop a stopped server"""
assert self.testServer.stop()
assert not self.testServer.stop()
assert self.testServer.stop()
def test_serverDoubleStart(self):
"""!Test to start the server twice"""
@ -145,7 +145,7 @@ class Test_ServerClient:
assert self.testServer1.start()
assert not self.testServer2.start()
assert self.testServer1.stop()
assert not self.testServer2.stop()
assert self.testServer2.stop()
def test_serverGetOutput(self, useServer):
"""!Send data to server with 2 clients, check '[ack]' and data on server queue"""