@@ -43,18 +43,31 @@ async def kill(self) -> None:
4343 def run_process (self ) -> AsyncGenerator [None ]:
4444 """Run the server process."""
4545
46- async def _dispatch (self , sender : Sender [ServerRequest ]) -> None :
46+ async def _dispatch (self , sender : Sender [ServerRequest ] | None ) -> None :
47+ if not sender :
48+ logger .warning (
49+ "No ServerRequest sender provided, all server requests and notifications will be ignored."
50+ )
51+
4752 async def handle (package : RawPackage ) -> None :
4853 match package :
49- case {"result" : _, "id" : id } | {"error" : _, "id" : id } as resp :
50- self ._resp_table .send (id , resp )
51- case {"id" : id , "method" : _} as req :
54+ case {"result" : _, "id" : id } | {"error" : _, "id" : id }:
55+ self ._resp_table .send (id , package )
56+ case {"id" : id , "method" : _}:
57+ if not sender :
58+ raise RuntimeError (
59+ "Received a server request without a sender provided."
60+ )
61+
5262 tx , rx = response_channel .create ()
53- await sender .send ((req , tx ))
63+ await sender .send ((package , tx ))
5464 resp = await rx .receive ()
5565 await self .send (resp )
56- case {"method" : _} as noti :
57- await sender .send (noti )
66+ case {"method" : _}:
67+ if not sender :
68+ return
69+
70+ await sender .send (package )
5871
5972 async with asyncer .create_task_group () as tg :
6073 while package := await self .receive ():
@@ -75,9 +88,6 @@ async def serve(
7588 self .run_process (),
7689 asyncer .create_task_group () as tg ,
7790 ):
78- if sender :
79- tg .soonify (self ._dispatch )(sender )
80- else :
81- logger .debug ("Server request sender not provided, skipping dispatch." )
91+ tg .soonify (self ._dispatch )(sender )
8292
8393 yield self
0 commit comments