diff --git a/OBSW_TmTcClient.py b/OBSW_TmTcClient.py index 56bf0ce7883bc9271003a720d85666cc0144b254..4e8d08b3b292edced6b9f8075ee8727a8580c939 100644 --- a/OBSW_TmTcClient.py +++ b/OBSW_TmTcClient.py @@ -57,6 +57,7 @@ import atexit import queue import unittest import logging +from multiprocessing import Process from test import OBSW_PusServiceTest from config import OBSW_Config as g @@ -69,7 +70,8 @@ from utility.OBSW_ArgParser import parseInputArguments from utility.OBSW_TmTcPrinter import TmtcPrinter from comIF.OBSW_Ethernet_ComIF import EthernetComIF from comIF.OBSW_Serial_ComIF import SerialComIF -from gui.OBSW_TmtcGUI import TmtcGUI +from gui.OBSW_TmtcGUI import TmTcGUI +from gui.OBSW_BackendTest import TmTcBackend from utility.OBSW_ExitHandler import keyboardInterruptHandler @@ -79,8 +81,14 @@ def main(): tmtcPrinter = TmtcPrinter(g.displayMode, g.printToFile, True) communicationInterface = 0 if g.modeId == "GUIMode": - GUI = TmtcGUI() - GUI.open() + backend = TmTcBackend() + backend.start() + GUI = TmTcGUI() + GUI.start() + backend.join() + GUI.join() + print("Both processes have closed") + exit() else: communicationInterface = setCommunicationInterface(tmtcPrinter) atexit.register(keyboardInterruptHandler, comInterface=communicationInterface) diff --git a/gui/OBSW_ClientTest.py b/gui/Client.py similarity index 100% rename from gui/OBSW_ClientTest.py rename to gui/Client.py diff --git a/gui/OBSW_ListenerTest.py b/gui/Listener.py similarity index 88% rename from gui/OBSW_ListenerTest.py rename to gui/Listener.py index b675d2ca43a3fb70d59fe4e29055af34500366e1..3d65092b6f118532dfebc7cc544961e2ba198644 100644 --- a/gui/OBSW_ListenerTest.py +++ b/gui/Listener.py @@ -1,4 +1,5 @@ from multiprocessing.connection import Listener +from multiprocessing import Process address = ('localhost', 6000) # family is deduced to be 'AF_INET' listener = Listener(address, authkey=None) @@ -7,7 +8,6 @@ print('connection accepted from' + str(listener.last_accepted)) while True: msg = conn.recv() # do something with msg - print("I received something") if msg == 'close': conn.close() break diff --git a/gui/OBSW_BackendTest.py b/gui/OBSW_BackendTest.py new file mode 100644 index 0000000000000000000000000000000000000000..a17f9571314b9b861a7b2e2eb1f24fc6458d2588 --- /dev/null +++ b/gui/OBSW_BackendTest.py @@ -0,0 +1,30 @@ +from multiprocessing.connection import Listener +from multiprocessing import Process +import logging + + +class TmTcBackend(Process): + def __init__(self): + super(TmTcBackend, self).__init__() + self.address = ('localhost', 6000) # family is deduced to be 'AF_INET' + self.listener = Listener(self.address, authkey=None) + self.conn = 0 + + def run(self): + self.listen() + + def listen(self): + self.conn = self.listener.accept() + print('connection accepted from' + str(self.listener.last_accepted)) + while True: + msg = self.conn.recv() + # do something with msg + if msg == 'test': + print("Hallo Welt !") + elif msg == 'close': + try: + self.conn.close() + break + except OSError: + logging.exception("Error: ") + self.listener.close() diff --git a/gui/OBSW_TmtcGUI.py b/gui/OBSW_TmtcGUI.py index 6f89bd55853da9256a033e05fa8e8a9e0745f195..b55b16003c1eee04df19bf8b10cd5203c74e0193 100644 --- a/gui/OBSW_TmtcGUI.py +++ b/gui/OBSW_TmtcGUI.py @@ -13,8 +13,10 @@ @author: R. Mueller """ -from tkinter import Tk +import tkinter as tk from multiprocessing.connection import Client +from multiprocessing import Process +import time # A first simple version has drop down menus to chose all necessary options @@ -24,16 +26,31 @@ from multiprocessing.connection import Client # A third button to perform a keyboard interrupt should be implemented # include a really nice source badge and make it large ! # plan this on paper first... -class TmtcGUI: +class TmTcGUI(Process): def __init__(self): - self.window = Tk() + super(TmTcGUI, self).__init__() + self.root = None self.address = ('localhost', 6000) self.conn = Client(self.address, authkey=None) + self.counter = 0 + + def run(self): + self.open() def open(self): - self.window.title("Hallo Welt") - self.window.mainloop() - self.conn.send("close") + self.root = tk.Tk("Hallo Welt !") + self.root.title("Hallo Welt") + while True: + self.conn.send("test") + self.root.update() + time.sleep(2) + self.counter = self.counter + 1 + if self.counter == 3: + self.conn.send("close") + self.conn.close() + break + # self.window.mainloop() def close(self): - self.window.quit() + pass + # self.window.quit()