diff options
Diffstat (limited to 'app/terminatorscanner.py')
| -rw-r--r-- | app/terminatorscanner.py | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/app/terminatorscanner.py b/app/terminatorscanner.py new file mode 100644 index 0000000..6bd99a1 --- /dev/null +++ b/app/terminatorscanner.py @@ -0,0 +1,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) |
