@@ -47,6 +47,7 @@ def __init__(self, mavsdk_server_address=None, port=50051):
47
47
self ._port = port
48
48
49
49
self ._plugins = {}
50
+ self ._server_process = None
50
51
51
52
async def connect (self , system_address = None ):
52
53
"""
@@ -63,12 +64,30 @@ async def connect(self, system_address=None):
63
64
- TCP: tcp://[server_host][:server_port]
64
65
65
66
"""
67
+
68
+ if self ._server_process is not None :
69
+ # a mavsdk_server have already been launch by this instance:
70
+ # --> clean all before trying to reconnect
71
+ self ._stop_mavsdk_server ()
72
+
73
+ # add a delay to be sure recourses have been freed and restart mavsdk_server
74
+ import time ; time .sleep (1 )
75
+
66
76
if self ._mavsdk_server_address is None :
67
77
self ._mavsdk_server_address = 'localhost'
68
- self ._start_mavsdk_server (system_address ,self ._port )
78
+ self ._server_process = self . _start_mavsdk_server (system_address ,self ._port )
69
79
70
80
await self ._init_plugins (self ._mavsdk_server_address , self ._port )
71
81
82
+ def _stop_mavsdk_server (self ):
83
+ """
84
+ kill the running mavsdk_server and clean the whole instance
85
+ """
86
+ import subprocess
87
+ if isinstance (self ._server_process ,subprocess .Popen ):
88
+ self ._server_process .kill ()
89
+ self .__init__ (port = self ._port )
90
+
72
91
async def _init_plugins (self , host , port ):
73
92
plugin_manager = await AsyncPluginManager .create (host = host , port = port )
74
93
@@ -260,3 +279,5 @@ def cleanup():
260
279
p .kill ()
261
280
262
281
atexit .register (cleanup )
282
+
283
+ return p
0 commit comments