52 lines
1.3 KiB
Python
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) |