diff --git a/src/server/SimpleSseSever.py b/src/server/SimpleSseSever.py index 445a15b..3be9ebb 100644 --- a/src/server/SimpleSseSever.py +++ b/src/server/SimpleSseSever.py @@ -146,29 +146,29 @@ class SseStream(): if not self.__queues.get( id ): self._queue = queue.Queue( self.__queue_size ) self.__queues[ id ] = self._queue - print( self.__queues ) - - print(f"Queue size: {self.__queue_size}; Connections: { len( self.__queues ) }/{self.__maxConnections}; ID: {id}") - print() - print() + def __del__(self): """ Deregister client from queue - clean up """ try: del self.__queues[ self._id ] - print( f"Stream object {self._id} is deleted") except KeyError: - print( f"Stream object {self._id} not found") pass def __iter__(self): while True: msg = self._queue.get(block=True, timeout=None) - print(msg) if isinstance( msg, Sse ): for data in msg: yield data.encode('utf-8') + def getStatus(self): + status = {} + status['currentConnections'] = len( self.__queues ) + status['maxConnections'] = self.__maxConnections + status['id'] = str(self._id) + return status + def main(): SseStream.setMaxConnections(5) @@ -182,7 +182,7 @@ def main(): import time while True: counter += 1 - time.sleep(5) + time.sleep(0.75) SseStream.addMessage("Ping", str(time.time()), id = counter) t = threading.Thread( target=filler ) @@ -192,9 +192,62 @@ def main(): app = Flask(__name__) app.debug = True + import json @app.route('/stream') def stream(): - return current_app.response_class( SseStream(uuid.uuid4()), mimetype='text/event-stream' ) + if request.accept_mimetypes['text/event-stream'] == 1: + stream = SseStream(uuid.uuid4()) + SseStream.addMessage("Status", json.dumps( stream.getStatus() ) ) + return current_app.response_class( stream, mimetype='text/event-stream' ) + else: + return ''' + + +

Messages

+
+

Status

+
Connection
+
Clients:
+
ID:
+
+

Below a list of messages

+
+ + ''' @app.route('/', methods=('GET', 'POST')) def index(): if request.method == 'POST':