From 1fb766c89f09dd814f4a62c693bf0c3b8318aecc Mon Sep 17 00:00:00 2001 From: Miguel Grinberg Date: Sun, 30 Mar 2014 19:11:06 -0700 Subject: [PATCH] fixes #14: access to server object when using gunicorn --- flask_socketio/__init__.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/flask_socketio/__init__.py b/flask_socketio/__init__.py index c46e4012..f02748d4 100644 --- a/flask_socketio/__init__.py +++ b/flask_socketio/__init__.py @@ -31,6 +31,7 @@ def __init__(self, app=None): self.init_app(app) self.messages = {} self.rooms = {} + self.server = None def init_app(self, app): app.wsgi_app = SocketIOMiddleware(app, self) @@ -59,6 +60,8 @@ def leave_room(self, room): self.rooms.remove(room) def recv_connect(self): + if self.socketio.server is None: + self.socketio.server = self.environ['socketio'].server ret = super(GenericNamespace, self).recv_connect() app = self.request self.socketio._dispatch_message(app, self, 'connect') @@ -164,9 +167,10 @@ def emit(self, event, *args, **kwargs): for client in self.rooms.get(ns_name, {}).get(room, set()): client.base_emit(event, *args, **kwargs) else: - for sessid, socket in self.server.sockets.items(): - if socket.active_ns.get(ns_name): - socket[ns_name].base_emit(event, *args, **kwargs) + if self.server: + for sessid, socket in self.server.sockets.items(): + if socket.active_ns.get(ns_name): + socket[ns_name].base_emit(event, *args, **kwargs) def send(self, message, json=False, namespace=None, room=None): ns_name = namespace @@ -176,9 +180,10 @@ def send(self, message, json=False, namespace=None, room=None): for client in self.rooms.get(ns_name, {}).get(room, set()): client.base_send(message, json) else: - for sessid, socket in self.server.sockets.items(): - if socket.active_ns.get(ns_name): - socket[ns_name].base_send(message, json) + if self.server: + for sessid, socket in self.server.sockets.items(): + if socket.active_ns.get(ns_name): + socket[ns_name].base_send(message, json) def run(self, app, host=None, port=None, **kwargs): if host is None: