Skip to content

Commit 4a3f246

Browse files
authored
Merge pull request #262 from NicolasM0/server_restart
add mavsdk_server restart if already running at connection
2 parents abc1a43 + fc118a0 commit 4a3f246

File tree

1 file changed

+22
-1
lines changed

1 file changed

+22
-1
lines changed

mavsdk/system.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ def __init__(self, mavsdk_server_address=None, port=50051):
4747
self._port = port
4848

4949
self._plugins = {}
50+
self._server_process = None
5051

5152
async def connect(self, system_address=None):
5253
"""
@@ -63,12 +64,30 @@ async def connect(self, system_address=None):
6364
- TCP: tcp://[server_host][:server_port]
6465
6566
"""
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+
6676
if self._mavsdk_server_address is None:
6777
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)
6979

7080
await self._init_plugins(self._mavsdk_server_address, self._port)
7181

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+
7291
async def _init_plugins(self, host, port):
7392
plugin_manager = await AsyncPluginManager.create(host=host, port=port)
7493

@@ -260,3 +279,5 @@ def cleanup():
260279
p.kill()
261280

262281
atexit.register(cleanup)
282+
283+
return p

0 commit comments

Comments
 (0)