LocalRuntimeMixin.py
branchwxPython4
changeset 3501 fa291393aac7
child 3539 c2eec6aae07e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LocalRuntimeMixin.py	Mon Jun 13 18:05:12 2022 +0200
@@ -0,0 +1,48 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+import sys
+import tempfile
+import random
+import shutil
+from util.ProcessLogger import ProcessLogger
+from util.paths import Bpath
+
+class LocalRuntimeMixin():
+
+    def __init__(self, log):
+        self.local_runtime_log = log
+        self.local_runtime = None
+        self.runtime_port = None
+        self.local_runtime_tmpdir = None
+
+    def StartLocalRuntime(self, taskbaricon=True):
+        if (self.local_runtime is None) or (self.local_runtime.exitcode is not None):
+            # create temporary directory for runtime working directory
+            self.local_runtime_tmpdir = tempfile.mkdtemp()
+            # choose an arbitrary random port for runtime
+            self.runtime_port = int(random.random() * 1000) + 61131
+            self.local_runtime_log.write(_("Starting local runtime...\n"))
+            # launch local runtime
+            self.local_runtime = ProcessLogger(
+                self.local_runtime_log,
+                "\"%s\" \"%s\" -p %s -i localhost %s %s" % (
+                    sys.executable,
+                    Bpath("Beremiz_service.py"),
+                    self.runtime_port,
+                    {False: "-x 0", True: "-x 1"}[taskbaricon],
+                    self.local_runtime_tmpdir),
+                no_gui=False,
+                timeout=500, keyword=self.local_runtime_tmpdir,
+                cwd=self.local_runtime_tmpdir)
+            self.local_runtime.spin()
+        return self.runtime_port
+
+    def KillLocalRuntime(self):
+        if self.local_runtime is not None:
+            # shutdown local runtime
+            self.local_runtime.kill(gently=False)
+            # clear temp dir
+            shutil.rmtree(self.local_runtime_tmpdir)
+
+            self.local_runtime = None
+