aboutsummaryrefslogtreecommitdiff
path: root/app/terminatorscanner.py
blob: 6bd99a1865e4cc1b5b6a392d792743f771b0076e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class TerminatorScanner(object):
    def __init__(self, terminator=None):
        self.in_buffer = ''
        self.terminator = terminator

    def handle_read(self, data):
        self.in_buffer = self.in_buffer + data

        terminator_len = len(self.terminator)

        while True:
            index = self.in_buffer.find(self.terminator)

            if index < 0:
                break

            incoming = self.in_buffer[:index]
            self.in_buffer = self.in_buffer[index+terminator_len:]

            self.handle_incoming(incoming)

    def handle_incoming(self, data):
        raise NotImplementedError('must be implemented in subclass')


class TerminatorScannerBasic(TerminatorScanner):
    def __init__(self, terminator=None):
        super(TerminatorScannerBasic, self).__init__(terminator)
        self.incoming = []

    def handle_incoming(self, data):
        self.incoming.append(data)