diff --git a/backend/websocket/websocket_base.py b/backend/websocket/websocket_base.py index 9d3fc62..56aac30 100644 --- a/backend/websocket/websocket_base.py +++ b/backend/websocket/websocket_base.py @@ -1,20 +1,52 @@ # Copyright (c) 2019. Tobias Kurze import logging +import threading +import time + +from flask import Flask, request from flask_socketio import SocketIO, emit from backend import app logging.basicConfig() -socketio = SocketIO(app) +app = Flask(__name__) +app.config['SECRET_KEY'] = 'secret!' + +async_mode = 'threading' +async_mode = None +socketio = SocketIO(app, cors_allowed_origins="*", async_mode=async_mode) +thread = None +thread_lock = threading.Lock() + +clients = [] + + +def background_thread(): + """Example of how to send server generated events to clients.""" + count = 0 + while True: + socketio.sleep(3) + print("server_event ") + count += 1 + socketio.emit('server_event', + {'data': 'Server generated event', 'count': count}, + ) + + +def ack(): + print('message was received!') @socketio.on('my_event') def test_message(message: dict): print("received msg!") print(message) - # emit('my_event', {'data': message['data']}) + if isinstance(message, str): + emit('my_response', 'tolle Antwort! (got only a string!)', callback=ack) + else: + emit('my_response', {'data': message['data']}, callback=ack) @socketio.on('my broadcast event', namespace='/') @@ -25,7 +57,11 @@ def test_message(message): @socketio.on('connect') def test_connect(): print("connected") - emit('connect', "antwort") + global thread + with thread_lock: + if thread is None: + thread = socketio.start_background_task(background_thread) + emit('connect', "You are connected!") @socketio.on('disconnect', namespace='/') @@ -33,10 +69,55 @@ def test_disconnect(): print('Client disconnected') +@socketio.on_error() +def handle_error(error): + print(error) + + +def start_in_thread(): + socket_thread = threading.Thread(target=lambda appl, host, port: socketio.run(app=appl, host=host, port=port), + args=(app, "localhost", 5000)) + socket_thread.start() + return socket_thread + + +@app.route("/") +def root(): + return """ +""" + + if __name__ == '__main__': print("running main") - socketio.init_app(app, cors_allowed_origins="*") - socketio.run(app, host="localhost", port=5000) + # socketio.init_app(app, cors_allowed_origins="*") + + #while len(clients) <= 0: + # time.sleep(1) + + #while True: + # time.sleep(2) + # print("sending message...") + # socketio.send("lala") + # print("send lala") + # print(clients[0]) + # socketio.emit("server_event", {'msg': "tolle nachricht"}, room=clients[0]) + # with app.test_request_context('/'): + # socketio.emit('server_event', "You!: server_event", namespace="/") + # print("send bla") + + socketio.run(app, host="localhost", port=5000, debug=True) + # socketio.run(app, debug=True) # ENDE - print("runnung?!") + print("running?!") + # t.join() diff --git a/backend/websocket/websocket_test_client.py b/backend/websocket/websocket_test_client.py new file mode 100644 index 0000000..9e8e70f --- /dev/null +++ b/backend/websocket/websocket_test_client.py @@ -0,0 +1,27 @@ +# Copyright (c) 2019. Tobias Kurze + +import logging +import threading +import time + +from flask import Flask +from flask_socketio import SocketIO, emit + +from backend import app + +app = Flask(__name__) +app.config['SECRET_KEY'] = 'secret!' + +logging.basicConfig() + +#socketio = SocketIO(message_queue="redis://") +socketio = SocketIO(app) + +#socketio.run(app, host="localhost", port=5000) +#socketio.init_app(app, host="localhost", port=5000, cors_allowed_origins="*", ) +#socketio.init_app(app, host="localhost", port=5000, cors_allowed_origins="*", ) + +socketio.emit("server_event", {'data': 42, 'msg': 'toll'}) +print("sent message!") +socketio.emit({'data': 42, 'msg': 'toll'}) +print("sent message 2!") \ No newline at end of file