From: Nathaniel Wesley Filardo Date: Fri, 10 Feb 2017 07:14:01 +0000 (-0500) Subject: Messages now take timestamps... X-Git-Tag: release-1.2~54 X-Git-Url: https://hydra-www.ietfng.org/gitweb/?a=commitdiff_plain;h=9bc8561d059c05b78ac39e286bf6303c3f1b7532;p=acmetensortoys-ctfws-android Messages now take timestamps... To suppress out-of-order delivery; see parallel commit f3997b3067a8a9026a6a42c085bb77108cf825a8 in the IoT source --- diff --git a/mobile/src/main/java/com/acmetensortoys/ctfwstimer/CtFwSCallbacksMQTT.java b/mobile/src/main/java/com/acmetensortoys/ctfwstimer/CtFwSCallbacksMQTT.java index c0b5540..e2f9d99 100644 --- a/mobile/src/main/java/com/acmetensortoys/ctfwstimer/CtFwSCallbacksMQTT.java +++ b/mobile/src/main/java/com/acmetensortoys/ctfwstimer/CtFwSCallbacksMQTT.java @@ -81,19 +81,41 @@ class CtFwSCallbacksMQTT { } }; + private long lastMsgTimestamp = 0; + private void onMessageCommon(String str) { + Scanner s = new Scanner(str); + try { + long t = s.nextLong(); + // If there is no configuration, assume the message is new enough + // If there *is* a configuration, check the time. + if ((!mCgs.configured || t >= mCgs.startT) && (lastMsgTimestamp <= t)) { + s.useDelimiter("\\z"); + lastMsgTimestamp = t; + mCdl.notifyMessage(t, s.next().trim()); + } + } catch (NoSuchElementException nse) { + // Maybe they forgot a time stamp. That's not ideal, but... fake it? + lastMsgTimestamp = System.currentTimeMillis()/1000; + mCdl.notifyMessage(lastMsgTimestamp, str); + lastMsgTimestamp -= 30; // XXX Back off a bit, for time sync reasons + } + } + IMqttMessageListener onMessage = new IMqttMessageListener() { @Override public void messageArrived(String topic, MqttMessage message) throws Exception { - Log.d("CtFwS", "Message(Broadcast): " + message); - mCdl.notifyMessage(message.toString()); + String str = message.toString(); + Log.d("CtFwS", "Message(Broadcast): " + str); + onMessageCommon(str); } }; IMqttMessageListener onPlayerMessage = new IMqttMessageListener() { @Override public void messageArrived(String topic, MqttMessage message) throws Exception { - Log.d("CtFwS", "Message(Players): " + message); - mCdl.notifyMessage(message.toString()); + String str = message.toString(); + Log.d("CtFwS", "Message(Players): " + str); + onMessageCommon(str); } }; } diff --git a/mobile/src/main/java/com/acmetensortoys/ctfwstimer/CtFwSDisplay.java b/mobile/src/main/java/com/acmetensortoys/ctfwstimer/CtFwSDisplay.java index cc66d91..c0ceba6 100644 --- a/mobile/src/main/java/com/acmetensortoys/ctfwstimer/CtFwSDisplay.java +++ b/mobile/src/main/java/com/acmetensortoys/ctfwstimer/CtFwSDisplay.java @@ -250,13 +250,10 @@ class CtFwSDisplay { }); } - void notifyMessage(String m) { - lastMsgTimeMS = System.currentTimeMillis(); - + void notifyMessage(long ts, String m) { final StringBuffer sb = new StringBuffer(); - long ts = lastMsgTimeMS/1000 - mCgs.startT; - if (!mCgs.configured || ts < 0) { ts = 0; } - sb.append(DateUtils.formatElapsedTime(ts)); + long td = (ts == 0) ? 0 : (mCgs.configured) ? ts - mCgs.startT : 0; + sb.append(DateUtils.formatElapsedTime(td)); sb.append(": "); sb.append(m); sb.append("\n");