aboutsummaryrefslogtreecommitdiff
path: root/service.py
diff options
context:
space:
mode:
authorJonathan Weth <mail@jonathanweth.de>2020-07-27 11:26:05 +0200
committerJonathan Weth <mail@jonathanweth.de>2020-07-27 11:26:05 +0200
commitc8c3a75c6b78d1d955cd9de43538b8bee73a3609 (patch)
tree8f22c458ef4e48c3da9ea5fa5c53c3aff4dfd71d /service.py
parent4db238a1395b33e76711d310f92090f803af41d4 (diff)
parent7c8f259f9b7523f5fc79d22c0eeab5226b3e1076 (diff)
downloadRWA.Support.SessionService-c8c3a75c6b78d1d955cd9de43538b8bee73a3609.tar.gz
RWA.Support.SessionService-c8c3a75c6b78d1d955cd9de43538b8bee73a3609.tar.bz2
RWA.Support.SessionService-c8c3a75c6b78d1d955cd9de43538b8bee73a3609.zip
Merge branch '4-provide-global-trigger-service-for-all-sessions' into 'master'
Resolve "Provide global trigger service (for all sessions)" Closes #4 See merge request remotewebapp/session-service!4
Diffstat (limited to 'service.py')
-rwxr-xr-xservice.py44
1 files changed, 40 insertions, 4 deletions
diff --git a/service.py b/service.py
index 4c4e927..47ebfcb 100755
--- a/service.py
+++ b/service.py
@@ -1,6 +1,7 @@
#!/usr/bin/env python3
import argparse
import json
+import signal
import time
from threading import Thread
from typing import Union
@@ -9,15 +10,22 @@ import dbus
import dbus.service
from session import Session
+from trigger import TriggerServerThread
+
+ONE_TIME_SERVICE = False
class RWAService(dbus.service.Object):
- def __init__(self, mockup_mode: bool):
+ def __init__(self, loop, mockup_mode: bool = False):
+ self.loop = loop
self.mockup_mode = mockup_mode
self.bus = dbus.SessionBus()
name = dbus.service.BusName("org.ArcticaProject.RWA", bus=self.bus)
+ self.trigger_service = TriggerServerThread(self._trigger)
+ self.trigger_service.start()
+
self.update_service_running = False
self.sessions = {}
super().__init__(name, "/RWA")
@@ -26,7 +34,7 @@ class RWAService(dbus.service.Object):
def start(self):
"""Start a new remote session."""
# Start session
- session = Session(mockup_mode)
+ session = Session(self.trigger_service.port, mockup_mode)
# Add session to sessions list
self.sessions[session.pid] = session
@@ -102,7 +110,28 @@ class RWAService(dbus.service.Object):
time.sleep(2)
self.update_service_running = False
- # TODO Probably kill daemon here (quit main loop)
+ if ONE_TIME_SERVICE:
+ self._stop_all()
+
+ def _trigger(self, token: str) -> bool:
+ """Trigger a specific session via trigger token."""
+ print("Triggered with token", token)
+
+ for session in self.sessions.values():
+ if token == session.trigger_token:
+ print("Trigger session", session)
+ session.trigger()
+ return True
+
+ return False
+
+ def _stop_all(self):
+ """Stop all sessions and this daemon."""
+ for session in list(self.sessions.values()):
+ session.stop()
+ del self.sessions[session.pid]
+ self.trigger_service.shutdown()
+ self.loop.quit()
def str2bool(v: Union[str, bool, int]) -> bool:
@@ -144,5 +173,12 @@ if __name__ == "__main__":
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
loop = GLib.MainLoop()
- object = RWAService(mockup_mode)
+ object = RWAService(loop, mockup_mode)
+
+ def signal_handler(sig, frame):
+ print("You pressed Ctrl+C!")
+ object._stop_all()
+
+ signal.signal(signal.SIGINT, signal_handler)
+
loop.run()