示例#1
0
class Pipes:
    handler = None
    buffer = ''

    def __init__(self):
        self.pipe = Pipe(Loop.default_loop())

    def run(self, handler, pid):
        self.handler = handler
        self.pipe.connect(
            f'\\\\?\\pipe\\basembeddedpipes{pid}',
            lambda pipe_handle, _: pipe_handle.start_read(self.handle))
        self.pipe.loop.run()

    def handle(self, _handle, data, _error):
        check_process(data)

        self.buffer += data.decode('utf-8')
        chunk = self.buffer.split(BOUNDARY)
        if len(chunk[-1]) != 0:
            self.buffer = chunk.pop()
        else:
            self.buffer = ''

        for item in chunk:
            self.handler(item)

    def write(self, obj, need_delete=True):
        if need_delete:
            obj['v'].pop(NEED_STOP, None)
        packet = json.dumps(obj) + BOUNDARY
        self.pipe.write(str.encode(packet))