Skip to content

Commit 6f1b480

Browse files
author
Codemation
committed
Improved cleanup handling after WSClose is received from server
1 parent 1beac57 commit 6f1b480

1 file changed

Lines changed: 18 additions & 5 deletions

File tree

easyrpc/proxy.py

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,19 @@
44
import asyncio
55
from traceback import format_exc
66
from concurrent.futures._base import CancelledError
7+
from aiohttp._websocket.models import WSMessage, WSMsgType
78

89
from aiohttp import ClientSession
910
import aiohttp
11+
1012
from easyrpc.register import (
1113
create_proxy_from_config,
1214
Coroutine,
1315
Generator,
1416
AsyncGenerator,
1517
async_generator_asend
1618
)
17-
from easyrpc.auth import encode
19+
from easyrpc.auth import encode, decode
1820
from easyrpc.origin import Origin
1921
from easyrpc.generator import RpcGenerator
2022
from easyrpc.exceptions import (
@@ -250,6 +252,7 @@ async def get_origin_registered_functions(self):
250252
self.server.origin(func, namespace=self.namespace)
251253

252254
async def cleanup_proxy_session(self):
255+
self.log.warning(f"cleanup_proxy_session called")
253256
if not self.session_id in self.client_connections:
254257
return
255258
try:
@@ -328,14 +331,24 @@ async def ws_receiver():
328331
try:
329332
while True:
330333
message = await ws.receive()
334+
self.log.debug(f"ws_receiver got message: {message}")
335+
336+
if message.type == WSMsgType.CLOSE:
337+
self.log.info(f"Server sent WSCLOSE")
338+
break
339+
331340
if message.data == None:
332341
break
333342

334343
if self.serialization == 'json':
335344
if 'error' in message.data and not 'ws_action' in message.data:
336345
break
337346

338-
message = self.deserialize(message.data)
347+
self.log.info(message.data)
348+
try:
349+
message: WSMessage = self.deserialize(message.data)
350+
except Exception as e:
351+
self.log.warning(f"error deserializing message: {repr(e)} - message: {message.data}")
339352

340353
if not 'ws_action' in message:
341354
continue
@@ -433,9 +446,9 @@ async def ws_receiver():
433446
})
434447

435448
except Exception as e:
436-
if not isinstance(e, CancelledError):
437-
self.log.exception(f"error with ws_receiver")
438-
await self.cleanup_proxy_session()
449+
self.log.info(f"ws_receiver exiting: reason - {repr(e)}")
450+
finally:
451+
await self.cleanup_proxy_session()
439452
return ws_receiver
440453
async def get_proxy_ws_session(self):
441454
"""

0 commit comments

Comments
 (0)