@@ -58,13 +58,9 @@ def instrument(self):
58
58
# track socket connection times
59
59
self .sio .manager ._timestamps = {}
60
60
61
- # report socket.io connections
62
- self .sio .manager .__connect = self .sio .manager .connect
63
- self .sio .manager .connect = self ._connect
64
-
65
- # report socket.io disconnection
66
- self .sio .manager .__disconnect = self .sio .manager .disconnect
67
- self .sio .manager .disconnect = self ._disconnect
61
+ # report socket.io connections, disconnections and received events
62
+ self .sio .__trigger_event = self .sio ._trigger_event
63
+ self .sio ._trigger_event = self ._trigger_event
68
64
69
65
# report join rooms
70
66
self .sio .manager .__basic_enter_room = \
@@ -80,10 +76,6 @@ def instrument(self):
80
76
self .sio .manager .__emit = self .sio .manager .emit
81
77
self .sio .manager .emit = self ._emit
82
78
83
- # report receive events
84
- self .sio .__handle_event_internal = self .sio ._handle_event_internal
85
- self .sio ._handle_event_internal = self ._handle_event_internal
86
-
87
79
# report engine.io connections
88
80
self .sio .eio .on ('connect' , self ._handle_eio_connect )
89
81
self .sio .eio .on ('disconnect' , self ._handle_eio_disconnect )
@@ -109,14 +101,12 @@ def instrument(self):
109
101
110
102
def uninstrument (self ): # pragma: no cover
111
103
if self .mode == 'development' :
112
- self .sio .manager .connect = self .sio .manager .__connect
113
- self .sio .manager .disconnect = self .sio .manager .__disconnect
104
+ self .sio ._trigger_event = self .sio .__trigger_event
114
105
self .sio .manager .basic_enter_room = \
115
106
self .sio .manager .__basic_enter_room
116
107
self .sio .manager .basic_leave_room = \
117
108
self .sio .manager .__basic_leave_room
118
109
self .sio .manager .emit = self .sio .manager .__emit
119
- self .sio ._handle_event_internal = self .sio .__handle_event_internal
120
110
self .sio .eio ._ok = self .sio .eio .__ok
121
111
122
112
from engineio .async_socket import AsyncSocket
@@ -193,26 +183,34 @@ async def shutdown(self):
193
183
self .stop_stats_event .set ()
194
184
await asyncio .gather (self .stats_task )
195
185
196
- async def _connect (self , eio_sid , namespace ):
197
- sid = await self .sio .manager .__connect (eio_sid , namespace )
186
+ async def _trigger_event (self , event , namespace , * args ):
198
187
t = time .time ()
199
- self .sio .manager ._timestamps [sid ] = t
200
- serialized_socket = self .serialize_socket (sid , namespace , eio_sid )
201
- await self .sio .emit ('socket_connected' , (
202
- serialized_socket ,
203
- datetime .utcfromtimestamp (t ).isoformat () + 'Z' ,
204
- ), namespace = self .admin_namespace )
205
- return sid
206
-
207
- async def _disconnect (self , sid , namespace , ** kwargs ):
208
- del self .sio .manager ._timestamps [sid ]
209
- await self .sio .emit ('socket_disconnected' , (
210
- namespace ,
211
- sid ,
212
- 'N/A' ,
213
- datetime .utcnow ().isoformat () + 'Z' ,
214
- ), namespace = self .admin_namespace )
215
- return await self .sio .manager .__disconnect (sid , namespace , ** kwargs )
188
+ sid = args [0 ]
189
+ if event == 'connect' :
190
+ eio_sid = self .sio .manager .eio_sid_from_sid (sid , namespace )
191
+ self .sio .manager ._timestamps [sid ] = t
192
+ serialized_socket = self .serialize_socket (sid , namespace , eio_sid )
193
+ await self .sio .emit ('socket_connected' , (
194
+ serialized_socket ,
195
+ datetime .utcfromtimestamp (t ).isoformat () + 'Z' ,
196
+ ), namespace = self .admin_namespace )
197
+ elif event == 'disconnect' :
198
+ del self .sio .manager ._timestamps [sid ]
199
+ reason = args [1 ]
200
+ await self .sio .emit ('socket_disconnected' , (
201
+ namespace ,
202
+ sid ,
203
+ reason ,
204
+ datetime .utcfromtimestamp (t ).isoformat () + 'Z' ,
205
+ ), namespace = self .admin_namespace )
206
+ else :
207
+ await self .sio .emit ('event_received' , (
208
+ namespace ,
209
+ sid ,
210
+ (event , * args [1 :]),
211
+ datetime .utcfromtimestamp (t ).isoformat () + 'Z' ,
212
+ ), namespace = self .admin_namespace )
213
+ return await self .sio .__trigger_event (event , namespace , * args )
216
214
217
215
async def _check_for_upgrade (self , eio_sid , sid ,
218
216
namespace ): # pragma: no cover
@@ -258,7 +256,7 @@ async def _emit(self, event, data, namespace, room=None, skip_sid=None,
258
256
callback = callback , ** kwargs )
259
257
if namespace != self .admin_namespace :
260
258
event_data = [event ] + list (data ) if isinstance (data , tuple ) \
261
- else [data ]
259
+ else [event , data ]
262
260
if not isinstance (skip_sid , list ): # pragma: no branch
263
261
skip_sid = [skip_sid ]
264
262
for sid , _ in self .sio .manager .get_participants (namespace , room ):
@@ -271,18 +269,6 @@ async def _emit(self, event, data, namespace, room=None, skip_sid=None,
271
269
), namespace = self .admin_namespace )
272
270
return ret
273
271
274
- async def _handle_event_internal (self , server , sid , eio_sid , data ,
275
- namespace , id ):
276
- ret = await self .sio .__handle_event_internal (server , sid , eio_sid ,
277
- data , namespace , id )
278
- await self .sio .emit ('event_received' , (
279
- namespace ,
280
- sid ,
281
- data ,
282
- datetime .utcnow ().isoformat () + 'Z' ,
283
- ), namespace = self .admin_namespace )
284
- return ret
285
-
286
272
async def _handle_eio_connect (self , eio_sid , environ ):
287
273
if self .stop_stats_event is None :
288
274
self .stop_stats_event = self .sio .eio .create_event ()
@@ -292,9 +278,9 @@ async def _handle_eio_connect(self, eio_sid, environ):
292
278
self .event_buffer .push ('rawConnection' )
293
279
return await self .sio ._handle_eio_connect (eio_sid , environ )
294
280
295
- async def _handle_eio_disconnect (self , eio_sid ):
281
+ async def _handle_eio_disconnect (self , eio_sid , reason ):
296
282
self .event_buffer .push ('rawDisconnection' )
297
- return await self .sio ._handle_eio_disconnect (eio_sid )
283
+ return await self .sio ._handle_eio_disconnect (eio_sid , reason )
298
284
299
285
def _eio_http_response (self , packets = None , headers = None , jsonp_index = None ):
300
286
ret = self .sio .eio .__ok (packets = packets , headers = headers ,
0 commit comments