pythonasyncioeventletgeventlong-pollinglow-latencysocket-iosocketiosocketio-serverweb-serverwebsocket
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
2.1 KiB
64 lines
2.1 KiB
import logging
|
|
from sdjango import namespace
|
|
|
|
|
|
online_user_num = 0
|
|
|
|
|
|
@namespace('/test')
|
|
class TestNamespace:
|
|
|
|
def __init__(self, name):
|
|
self.name = name
|
|
self.request = None # django request object
|
|
|
|
def _get_socket(self, sid):
|
|
socket = namespace.server.eio._get_socket(sid)
|
|
return socket
|
|
|
|
def _get_request(self, sid):
|
|
socket = self._get_socket(sid)
|
|
return socket._request
|
|
|
|
def emit(self, *args, **kwargs):
|
|
if 'namespace' not in kwargs:
|
|
kwargs['namespace'] = self.name
|
|
|
|
namespace.server.emit(*args, **kwargs)
|
|
|
|
def on_my_event(self, sid, message):
|
|
self.emit('my response', {'data': message['data']}, room=sid)
|
|
|
|
def on_my_broadcast_event(self, sid, message):
|
|
self.emit('my response', {'data': message['data']})
|
|
|
|
def on_join(self, sid, message):
|
|
namespace.server.enter_room(sid, message['room'], namespace='/test')
|
|
self.emit('my response', {'data': 'Entered room: '+message['room']}, room=sid)
|
|
|
|
def on_leave(self, sid, message):
|
|
namespace.server.leave_room(sid, message['room'], namespace='/test')
|
|
self.emit('my response', {'data': 'Left room:'+message['room']}, room=sid)
|
|
|
|
def on_close_room(self, sid, message):
|
|
self.emit('my response', {'data': 'Room '+message['room']+ ' is closing'},
|
|
room=message['room'])
|
|
namespace.server.close_room(message['room'], namespace='/test')
|
|
|
|
def on_my_room_event(self, sid, message):
|
|
self.emit('my response', {'data': message['data']}, room=message['room'])
|
|
|
|
def on_disconnect_request(self, sid):
|
|
namespace.server.disconnect(sid, namespace='/test')
|
|
|
|
# two method must have
|
|
def on_connect(self, sid, environ):
|
|
if 'django_request' in environ:
|
|
request = environ['django_request']
|
|
socket = self._get_socket(sid)
|
|
socket._request = request
|
|
|
|
self.emit('my response', {'data': "{} Connected".format(request.user), "count": 0}, room=sid)
|
|
|
|
def on_disconnect(self, sid):
|
|
print('Client disconnected')
|
|
|