aboutsummaryrefslogtreecommitdiff
path: root/app/terminatorscanner.py
diff options
context:
space:
mode:
Diffstat (limited to 'app/terminatorscanner.py')
-rw-r--r--app/terminatorscanner.py32
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)