@@ -28,12 +28,15 @@ class WebSocketTransport(HttpWebServerBasePlugin):
28
28
29
29
def __init__ (self , * args : Any , ** kwargs : Any ) -> None :
30
30
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 ] = {}
32
34
if b'WebSocketTransportBasePlugin' in self .flags .plugins :
33
35
for klass in self .flags .plugins [b'WebSocketTransportBasePlugin' ]:
34
36
p = klass (self .flags , self .client , self .event_queue )
37
+ self .plugins .append (p )
35
38
for method in p .methods ():
36
- self .plugins [method ] = p
39
+ self .methods [method ] = p
37
40
38
41
def routes (self ) -> List [Tuple [int , str ]]:
39
42
return [
@@ -44,8 +47,8 @@ def handle_request(self, request: HttpParser) -> None:
44
47
raise NotImplementedError ()
45
48
46
49
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 ( )
49
52
50
53
def on_websocket_message (self , frame : WebsocketFrame ) -> None :
51
54
try :
@@ -59,16 +62,16 @@ def on_websocket_message(self, frame: WebsocketFrame) -> None:
59
62
method = message ['method' ]
60
63
if method == 'ping' :
61
64
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 )
64
67
else :
65
68
logger .info (frame .data )
66
69
logger .info (frame .opcode )
67
70
self .reply ({'id' : message ['id' ], 'response' : 'not_implemented' })
68
71
69
72
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 ( )
72
75
73
76
def reply (self , data : Dict [str , Any ]) -> None :
74
77
self .client .queue (
0 commit comments