Queer European MD passionate about IT
Эх сурвалжийг харах

Cancel pending tasks although they are done

Davte 5 жил өмнө
parent
commit
40f48e3b95
1 өөрчлөгдсөн 17 нэмэгдсэн , 7 устгасан
  1. 17 7
      src/server.py

+ 17 - 7
src/server.py

@@ -100,6 +100,22 @@ class Server:
             self._working = False  # Reset peer_is_sender
             self._working = False  # Reset peer_is_sender
         return
         return
 
 
+    def run(self):
+        loop = asyncio.get_event_loop()
+        logging.info("Starting file bridging server...")
+        try:
+            loop.run_until_complete(self.run_server())
+        except KeyboardInterrupt:
+            logging.info("Stopping...")
+            # Cancel connection tasks (they should be done but are pending)
+            for task in asyncio.all_tasks(loop):
+                task.cancel()
+            loop.run_until_complete(
+                self.server.wait_closed()
+            )
+        loop.close()
+        logging.info("Stooped.")
+
     async def run_server(self):
     async def run_server(self):
         self._server = await asyncio.start_server(
         self._server = await asyncio.start_server(
             client_connected_cb=self.connect,
             client_connected_cb=self.connect,
@@ -174,14 +190,8 @@ if __name__ == '__main__':
             logging.info("Invalid port. Enter a valid port number!")
             logging.info("Invalid port. Enter a valid port number!")
             _port = None
             _port = None
 
 
-    loop = asyncio.get_event_loop()
     server = Server(
     server = Server(
         host=_host,
         host=_host,
         port=_port,
         port=_port,
     )
     )
-    logging.info("Starting file bridging server...")
-    try:
-        loop.run_until_complete(server.run_server())
-    except KeyboardInterrupt:
-        logging.info("Stopping...")
-    loop.close()
+    server.run()