diff --git a/app/build.gradle b/app/build.gradle
index 9c99446..ef75d28 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -28,4 +28,7 @@ dependencies {
implementation files("libs/antpluginlib_3-6-0.jar")
implementation files("libs/fit_16.00.jar")
+
+ implementation 'com.koushikdutta.async:androidasync:2.+'
+
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a13aa5a..948b1d1 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -3,6 +3,8 @@
package="com.rubenvandeven.heartbeatstreamer">
+
+
fws = AsyncHttpClient.getDefaultInstance().websocket("ws://heartbeat.rubenvandeven.com:8888/ws", "my-protocol", new AsyncHttpClient.WebSocketConnectCallback() {
@Override
- public void onNewHeartRateData(final long estTimestamp, EnumSet eventFlags,
- final int computedHeartRate, final long heartBeatCount,
- final BigDecimal heartBeatEventTime, final DataState dataState)
- {
- // Mark heart rate with asterisk if zero detected
- final String textHeartRate = String.valueOf(computedHeartRate)
- + ((DataState.ZERO_DETECTED.equals(dataState)) ? "*" : "");
+ public void onCompleted(Exception ex, final WebSocket webSocket) {
+ if (ex != null) {
+ ex.printStackTrace();
+ // TODO: retry
+ return;
+ }
- // Mark heart beat count and heart beat event time with asterisk if initial value
- final String textHeartBeatCount = String.valueOf(heartBeatCount)
- + ((DataState.INITIAL_VALUE.equals(dataState)) ? "*" : "");
- final String textHeartBeatEventTime = String.valueOf(heartBeatEventTime)
- + ((DataState.INITIAL_VALUE.equals(dataState)) ? "*" : "");
-
- runOnUiThread(new Runnable()
- {
+ webSocket.send("Connect!");
+ webSocket.setClosedCallback(new CompletedCallback() {
@Override
- public void run()
- {
- tv_estTimestamp.setText(String.valueOf(estTimestamp));
-
- tv_computedHeartRate.setText(textHeartRate);
- tv_heartBeatCounter.setText(textHeartBeatCount);
- tv_heartBeatEventTime.setText(textHeartBeatEventTime);
-
- tv_dataStatus.setText(dataState.toString());
+ public void onCompleted(Exception ex) {
+ //unsubscribe before triggering resubscription
+ hrPcc.subscribeHeartRateDataEvent(null);
+ subscribeToHrEvents();
}
});
+
+ hrPcc.subscribeHeartRateDataEvent(new IHeartRateDataReceiver()
+ {
+ @Override
+ public void onNewHeartRateData(final long estTimestamp, EnumSet eventFlags,
+ final int computedHeartRate, final long heartBeatCount,
+ final BigDecimal heartBeatEventTime, final DataState dataState)
+ {
+ // Mark heart rate with asterisk if zero detected
+ final String textHeartRate = String.valueOf(computedHeartRate)
+ + ((DataState.ZERO_DETECTED.equals(dataState)) ? "*" : "");
+
+
+ // Mark heart beat count and heart beat event time with asterisk if initial value
+ final String textHeartBeatCount = String.valueOf(heartBeatCount)
+ + ((DataState.INITIAL_VALUE.equals(dataState)) ? "*" : "");
+ final String textHeartBeatEventTime = String.valueOf(heartBeatEventTime)
+ + ((DataState.INITIAL_VALUE.equals(dataState)) ? "*" : "");
+
+ final String msg = String.format("{\"rate\":\"%s\", \"count\":\"%s\", \"time\":\"%s\"}", textHeartRate, textHeartBeatCount, textHeartBeatEventTime);
+
+ if(msg == lastMsg) {
+ Log.i("HeartRate", "Skip duplicate");
+ return;
+ }
+ lastMsg = msg;
+
+ webSocket.send(msg);
+ Log.i("HeartRate", "Sent: " + msg);
+
+ runOnUiThread(new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ tv_estTimestamp.setText(String.valueOf(estTimestamp));
+
+ tv_computedHeartRate.setText(textHeartRate);
+ tv_heartBeatCounter.setText(textHeartBeatCount);
+ tv_heartBeatEventTime.setText(textHeartBeatEventTime);
+
+ tv_dataStatus.setText(dataState.toString());
+
+ tv_ws.setText(lastMsg);
+ }
+ });
+ }
+ });
+
}
});
+
hrPcc.subscribePage4AddtDataEvent(new IPage4AddtDataReceiver()
{
@Override
diff --git a/app/src/main/res/layout/activity_heart_rate.xml b/app/src/main/res/layout/activity_heart_rate.xml
index 9c283e2..642695c 100644
--- a/app/src/main/res/layout/activity_heart_rate.xml
+++ b/app/src/main/res/layout/activity_heart_rate.xml
@@ -394,6 +394,29 @@
+
+
+
+
+
+
+
+