diff --git a/onlyone/__main__.py b/onlyone/__main__.py index 5d9411d..026d1d2 100644 --- a/onlyone/__main__.py +++ b/onlyone/__main__.py @@ -38,6 +38,10 @@ if args.server: if(manager==None): log.error("server mode selected, but manager not loaded maybe missing --configFile") else: - npServer = onlyone.namedpipes.Server(manager, "/tmp/onlyone_fifo") - log.info("server loaded...") - input("[server mode]\n") \ No newline at end of file + npServer = None + try: + npServer = onlyone.namedpipes.Server(manager, "/tmp/onlyone_fifo") + log.info("server loaded...") + input("[server mode]\n") + except KeyboardInterrupt: + log.info("dead") \ No newline at end of file diff --git a/onlyone/namedpipes/__init__.py b/onlyone/namedpipes/__init__.py index 45b7e3b..bf84856 100644 --- a/onlyone/namedpipes/__init__.py +++ b/onlyone/namedpipes/__init__.py @@ -1,3 +1,4 @@ + import onlyone import os import errno @@ -5,10 +6,17 @@ import logging import threading log = logging.getLogger(__name__) +class ReadTask: + def __init__(self): + self.__kill=False -class Server: - def __fifo_read(fifoname): + def kill(self): + self.__kill=True + + def run(self, fifoname): while True: + if self.__kill: + return log.info("Opening FIFO...") with open(fifoname) as fifo: log.info("FIFO opened") @@ -19,6 +27,7 @@ class Server: break log.info('FIFO Read: "{0}"'.format(data)) +class Server: def __init__(self, manager:onlyone.Manager, fifoname:str): self.manager=manager self__fifoname=fifoname @@ -28,6 +37,9 @@ class Server: if oe.errno != errno.EEXIST: raise + readTask = ReadTask() + self.__readThread = threading.Thread(target=readTask.run, args = (fifoname,) ) + #self.__readThread.start() - readThread = threading.Thread( target=Server.__fifo_read, args = (fifoname,) ) - readThread.start() \ No newline at end of file + def kill(self): + self.__readThread.kill() \ No newline at end of file