summaryrefslogtreecommitdiff
path: root/altoslib/AltosLink.java
diff options
context:
space:
mode:
authorBdale Garbee <bdale@gag.com>2017-09-18 20:46:47 -0600
committerBdale Garbee <bdale@gag.com>2017-09-18 20:46:47 -0600
commit3ead5d54135003702f771191d2c53abb584d1695 (patch)
tree03f812123642d41215fbc67ff6a308fb2906d77a /altoslib/AltosLink.java
parentb94d18396f050b61a5671b4239d2a3eb9b7a835c (diff)
parent216ea6388a75c46891dc4687a2eb0c97dc63b136 (diff)
Merge branch 'branch-1.8' into debian
Diffstat (limited to 'altoslib/AltosLink.java')
-rw-r--r--altoslib/AltosLink.java19
1 files changed, 19 insertions, 0 deletions
diff --git a/altoslib/AltosLink.java b/altoslib/AltosLink.java
index 5a802ef1..5413de9d 100644
--- a/altoslib/AltosLink.java
+++ b/altoslib/AltosLink.java
@@ -43,6 +43,8 @@ public abstract class AltosLink implements Runnable {
public LinkedBlockingQueue<AltosLine> reply_queue = new LinkedBlockingQueue<AltosLine>();
public LinkedBlockingQueue<byte[]> binary_queue = new LinkedBlockingQueue<byte[]>();
+ private String match_string = null;
+
public synchronized void add_monitor(LinkedBlockingQueue<AltosLine> q) {
set_monitor(true);
monitors.add(q);
@@ -112,6 +114,15 @@ public abstract class AltosLink implements Runnable {
private int len_read = 0;
+ private boolean match_bytes(byte[] bytes, int byte_count, String match) {
+ if (byte_count < match.length())
+ return false;
+ String line = new String(bytes, 0, byte_count, AltosLib.unicode_set);
+ if (line == null)
+ return false;
+ return line.indexOf(match) >= 0;
+ }
+
public void run () {
int c;
byte[] line_bytes = null;
@@ -159,6 +170,11 @@ public abstract class AltosLink implements Runnable {
line_count = 0;
len_read = 0;
}
+ if (match_string != null && match_bytes(line_bytes, line_count, match_string)) {
+ match_string = null;
+ add_bytes(line_bytes, line_count);
+ line_count = 0;
+ }
}
}
}
@@ -166,6 +182,9 @@ public abstract class AltosLink implements Runnable {
}
}
+ public void set_match(String match) {
+ match_string = match;
+ }
public String get_reply(int timeout) throws InterruptedException {
boolean can_cancel = can_cancel_reply();