mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-06 22:47:29 -06:00
Find available port when starting backend plugin
CURA-11067
This commit is contained in:
parent
26e7995588
commit
d4449c680f
2 changed files with 11 additions and 3 deletions
|
@ -1,5 +1,6 @@
|
||||||
# Copyright (c) 2023 Ultimaker B.V.
|
# Copyright (c) 2023 Ultimaker B.V.
|
||||||
# Cura is released under the terms of the LGPLv3 or higher.
|
# Cura is released under the terms of the LGPLv3 or higher.
|
||||||
|
import socket
|
||||||
import subprocess
|
import subprocess
|
||||||
from typing import Optional, List
|
from typing import Optional, List
|
||||||
|
|
||||||
|
@ -42,6 +43,15 @@ class BackendPlugin(AdditionalSettingDefinitionsAppender, PluginObject):
|
||||||
def getAddress(self) -> str:
|
def getAddress(self) -> str:
|
||||||
return self._plugin_address
|
return self._plugin_address
|
||||||
|
|
||||||
|
def setAvailablePort(self) -> None:
|
||||||
|
"""
|
||||||
|
Sets the port to a random available port.
|
||||||
|
"""
|
||||||
|
sock = socket.socket()
|
||||||
|
sock.bind((self.getAddress(), 0))
|
||||||
|
port = sock.getsockname()[1]
|
||||||
|
self.setPort(port)
|
||||||
|
|
||||||
def _validatePluginCommand(self) -> list[str]:
|
def _validatePluginCommand(self) -> list[str]:
|
||||||
"""
|
"""
|
||||||
Validate the plugin command and add the port parameter if it is missing.
|
Validate the plugin command and add the port parameter if it is missing.
|
||||||
|
|
|
@ -83,7 +83,6 @@ class CuraEngineBackend(QObject, Backend):
|
||||||
os.path.join(CuraApplication.getInstallPrefix(), "bin"),
|
os.path.join(CuraApplication.getInstallPrefix(), "bin"),
|
||||||
os.path.dirname(os.path.abspath(sys.executable)),
|
os.path.dirname(os.path.abspath(sys.executable)),
|
||||||
]
|
]
|
||||||
self._last_backend_plugin_port = self._port + 1000
|
|
||||||
for path in search_path:
|
for path in search_path:
|
||||||
engine_path = os.path.join(path, executable_name)
|
engine_path = os.path.join(path, executable_name)
|
||||||
if os.path.isfile(engine_path):
|
if os.path.isfile(engine_path):
|
||||||
|
@ -205,8 +204,7 @@ class CuraEngineBackend(QObject, Backend):
|
||||||
for backend_plugin in backend_plugins:
|
for backend_plugin in backend_plugins:
|
||||||
# Set the port to prevent plugins from using the same one.
|
# Set the port to prevent plugins from using the same one.
|
||||||
if backend_plugin.getPort() < 1:
|
if backend_plugin.getPort() < 1:
|
||||||
backend_plugin.setPort(self._last_backend_plugin_port)
|
backend_plugin.setAvailablePort()
|
||||||
self._last_backend_plugin_port += 1
|
|
||||||
backend_plugin.start()
|
backend_plugin.start()
|
||||||
|
|
||||||
def stopPlugins(self) -> None:
|
def stopPlugins(self) -> None:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue