Files
onlyone/onlyone/namedpipes/__init__.py
2022-01-20 13:21:36 +00:00

52 lines
1.3 KiB
Python

import os
import errno
import logging
import threading
log = logging.getLogger(__name__)
class Server:
def __init__(self, manager, fifoname:str):
self.manager=manager
self__fifoname=fifoname
try:
os.mkfifo(fifoname)
except OSError as oe:
if oe.errno != errno.EEXIST:
raise
readTask = ReadTask(self)
self.__readThread = threading.Thread(target=readTask.run, args = (fifoname,) )
self.__readThread.start()
def kill(self):
self.__readThread.kill()
class ReadTask:
def __init__(self, server):
self.__kill=False
self.server=server
def kill(self):
self.__kill=True
def read(self, fifoname):
log.info("waiting FIFO...")
with open(fifoname) as fifo:
log.info("FIFO opened")
while True:
data = fifo.read()
if len(data) == 0:
log.info("FIFO closed")
break
log.info('FIFO Data: "{0}"'.format(data))
self.server.manager.current(format(data).strip())
def run(self, fifoname):
while True:
if self.__kill:
return
self.read(fifoname)