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

View file

@ -40,12 +40,15 @@ class TCPClient:
@param port: Server Port (8080) @param port: Server Port (8080)
@return True or False""" @return True or False"""
try: try:
if not self.isConnected:
self._sock = socket self._sock = socket
self._sock.setdefaulttimeout(self._timeout) self._sock.setdefaulttimeout(self._timeout)
self._sock = socket.create_connection((host, port)) self._sock = socket.create_connection((host, port))
logging.debug("connected to %s:%s", host, port) logging.debug("connected to %s:%s", host, port)
return True return True
else:
logging.warning("client always connected")
return True
except ConnectionRefusedError: except ConnectionRefusedError:
logging.error("cannot connect to %s:%s - connection refused", host, port) logging.error("cannot connect to %s:%s - connection refused", host, port)
return False return False
@ -61,9 +64,14 @@ class TCPClient:
@return True or False""" @return True or False"""
try: try:
if self.isConnected:
self._sock.close() self._sock.close()
self._sock = None
logging.debug("disconnected") logging.debug("disconnected")
return True return True
else:
logging.warning("client not connected")
return True
except AttributeError: except AttributeError:
logging.error("cannot disconnect - no connection established") logging.error("cannot disconnect - no connection established")
return False return False
@ -111,3 +119,10 @@ class TCPClient:
except: # pragma: no cover except: # pragma: no cover
logging.exception("error while receiving") logging.exception("error while receiving")
return False 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._clientsConnectedLock = threading.Lock()
self._clientsConnected = {} self._clientsConnected = {}
def __del__(self):
if self.isRunning:
self.stop()
def start(self, port=8080): def start(self, port=8080):
"""!Start a threaded TCP socket server """!Start a threaded TCP socket server
@ -93,6 +97,7 @@ class TCPServer:
@return True or False""" @return True or False"""
try: try:
if not self.isRunning:
self._server = ThreadedTCPServer(("", port), ThreadedTCPRequestHandler) self._server = ThreadedTCPServer(("", port), ThreadedTCPRequestHandler)
self._server.timeout = self._timeout self._server.timeout = self._timeout
self._server.alarmQueue = self._alarmQueue self._server.alarmQueue = self._alarmQueue
@ -106,8 +111,9 @@ class TCPServer:
self._server_thread.start() self._server_thread.start()
logging.debug("TCPServer started in Thread: %s", self._server_thread.name) logging.debug("TCPServer started in Thread: %s", self._server_thread.name)
return True return True
except OSError: else:
logging.exception("server always running?") logging.warning("server always started")
return True
except: # pragma: no cover except: # pragma: no cover
logging.exception("cannot start the server") logging.exception("cannot start the server")
return False return False
@ -117,6 +123,7 @@ class TCPServer:
@return True or False""" @return True or False"""
try: try:
if self.isRunning:
self._server.shutdown() self._server.shutdown()
self._server_thread.join() self._server_thread.join()
self._server_thread = None self._server_thread = None
@ -124,9 +131,9 @@ class TCPServer:
self._server = None self._server = None
logging.debug("TCPServer stopped") logging.debug("TCPServer stopped")
return True return True
except AttributeError: else:
logging.exception("cannot stop - server not started?") logging.warning("server always stopped")
return False return True
except: # pragma: no cover except: # pragma: no cover
logging.exception("cannot stop the server") logging.exception("cannot stop the server")
return False return False
@ -147,3 +154,10 @@ class TCPServer:
# todo return full list or write a print/debug method? # todo return full list or write a print/debug method?
with self._clientsConnectedLock: # because our list is not threadsafe with self._clientsConnectedLock: # because our list is not threadsafe
return self._clientsConnected 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 import configYaml
from boswatch.network.server import TCPServer from boswatch.network.server import TCPServer
from boswatch.packet.packet import Packet 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.utils import header
from boswatch.network.broadcast import BroadcastClient
from boswatch.network.broadcast import BroadcastServer from boswatch.network.broadcast import BroadcastServer
except: # pragma: no cover except: # pragma: no cover
logging.exception("cannot import modules") logging.exception("cannot import modules")

View file

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