Skip to content

Commit 1dba7f0

Browse files
authored
Invoke WebSocketTransportBasePlugin connected and disconnected callbacks (#956)
1 parent 7d20e43 commit 1dba7f0

File tree

2 files changed

+14
-11
lines changed

2 files changed

+14
-11
lines changed

proxy/http/proxy/server.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -316,11 +316,11 @@ def on_client_connection_close(self) -> None:
316316
# Request
317317
'request_method': text_(self.request.method),
318318
'request_path': text_(self.request.path),
319-
'request_bytes': self.request.total_size,
320-
'request_ua': self.request.header(b'user-agent')
319+
'request_bytes': text_(self.request.total_size),
320+
'request_ua': text_(self.request.header(b'user-agent'))
321321
if self.request.has_header(b'user-agent')
322322
else None,
323-
'request_version': self.request.version,
323+
'request_version': text_(self.request.version),
324324
# Response
325325
'response_bytes': self.response.total_size,
326326
'response_code': text_(self.response.code),

proxy/http/websocket/transport.py

+11-8
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,15 @@ class WebSocketTransport(HttpWebServerBasePlugin):
2828

2929
def __init__(self, *args: Any, **kwargs: Any) -> None:
3030
super().__init__(*args, **kwargs)
31-
self.plugins: Dict[str, WebSocketTransportBasePlugin] = {}
31+
self.plugins: List[WebSocketTransportBasePlugin] = []
32+
# Registered methods and handler plugin
33+
self.methods: Dict[str, WebSocketTransportBasePlugin] = {}
3234
if b'WebSocketTransportBasePlugin' in self.flags.plugins:
3335
for klass in self.flags.plugins[b'WebSocketTransportBasePlugin']:
3436
p = klass(self.flags, self.client, self.event_queue)
37+
self.plugins.append(p)
3538
for method in p.methods():
36-
self.plugins[method] = p
39+
self.methods[method] = p
3740

3841
def routes(self) -> List[Tuple[int, str]]:
3942
return [
@@ -44,8 +47,8 @@ def handle_request(self, request: HttpParser) -> None:
4447
raise NotImplementedError()
4548

4649
def on_websocket_open(self) -> None:
47-
# TODO(abhinavsingh): Add connected callback invocation
48-
logger.info('app ws opened')
50+
for plugin in self.plugins:
51+
plugin.connected()
4952

5053
def on_websocket_message(self, frame: WebsocketFrame) -> None:
5154
try:
@@ -59,16 +62,16 @@ def on_websocket_message(self, frame: WebsocketFrame) -> None:
5962
method = message['method']
6063
if method == 'ping':
6164
self.reply({'id': message['id'], 'response': 'pong'})
62-
elif method in self.plugins:
63-
self.plugins[method].handle_message(message)
65+
elif method in self.methods:
66+
self.methods[method].handle_message(message)
6467
else:
6568
logger.info(frame.data)
6669
logger.info(frame.opcode)
6770
self.reply({'id': message['id'], 'response': 'not_implemented'})
6871

6972
def on_client_connection_close(self) -> None:
70-
# TODO(abhinavsingh): Add disconnected callback invocation
71-
logger.info('app ws closed')
73+
for plugin in self.plugins:
74+
plugin.disconnected()
7275

7376
def reply(self, data: Dict[str, Any]) -> None:
7477
self.client.queue(

0 commit comments

Comments
 (0)