Skip to content

Commit 4334b3b

Browse files
committed
Jackson Message Struct replacement
1 parent b575b6a commit 4334b3b

File tree

3 files changed

+41
-11
lines changed

3 files changed

+41
-11
lines changed

app/src/main/java/net/sharksystem/asap/android/lora/messages/ASAPLoRaMessage.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
package net.sharksystem.asap.android.lora.messages;
22

3+
import android.os.Build;
4+
5+
import java.nio.charset.StandardCharsets;
6+
import java.util.Base64;
7+
38
public class ASAPLoRaMessage extends AbstractASAPLoRaMessage {
49
//these need to be public to be picked up by the json automapper
510
public String address;
611
public byte[] message;
12+
public String base64message;
713

814
//Constructor for Jackson
915
public ASAPLoRaMessage() {
@@ -14,15 +20,26 @@ public ASAPLoRaMessage() {
1420
public ASAPLoRaMessage(String address, byte[] message) {
1521
this.address = address;
1622
this.message = message;
23+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { //TODO!
24+
this.base64message = new String(Base64.getMimeEncoder().encode(message), StandardCharsets.UTF_8);
25+
}
26+
}
27+
28+
public ASAPLoRaMessage(String address, String base64message) {
29+
this.address = address;
30+
this.base64message = base64message.trim(); //whitespaces can be ignored, according to base64 RFC2045
31+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { //TODO!
32+
this.message = Base64.getMimeDecoder().decode(this.base64message.getBytes(StandardCharsets.UTF_8));
33+
}
1734
}
1835

1936
@Override
2037
public String getPayload() {
21-
return "MSSGE@" + this.address + ":" + this.message; //TODO Base64 the message?
38+
return "MSSGE@" + this.address + ":" + this.base64message;
2239
}
2340

2441
@Override
2542
public String toString() {
26-
return "ASAPLoRaMessage (" + this.address + "): " + this.message;
43+
return "ASAPLoRaMessage (" + this.address + ":" + this.base64message + "): " + new String(this.message);
2744
}
2845
}

app/src/main/java/net/sharksystem/asap/android/lora/messages/AbstractASAPLoRaMessage.java

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,35 @@
11
package net.sharksystem.asap.android.lora.messages;
22

3+
import android.util.Log;
4+
35
import net.sharksystem.asap.android.lora.ASAPLoRaException;
46

5-
//TODO
6-
//@JsonTypeInfo(use=JsonTypeInfo.Id.MINIMAL_CLASS, property="COMMAND")
7-
//@JsonSubTypes( {@JsonSubTypes.Type(DiscoverASAPLoRaMessage.class), @JsonSubTypes.Type(ASAPLoRaMessage.class)})
87
public abstract class AbstractASAPLoRaMessage {
8+
private static final String CLASS_LOG_TAG = "AbstractASAPLoRaMessage";
99

1010
public String getPayload() throws ASAPLoRaException {
1111
throw new ASAPLoRaException("Trying to call getPayload() on non-outgoing ASAP Message. This should never happen.");
1212
}
1313

14+
public static AbstractASAPLoRaMessage createASAPLoRaMessage(String rawMessage) throws ASAPLoRaException {
15+
Log.i(CLASS_LOG_TAG, "Raw LoRa Message Received!");
16+
Log.i(CLASS_LOG_TAG, "Creating AbstractASAPLoRaMessage from String: " + rawMessage);
17+
// rawMessage is of format: <COMMAND (5 Char)>:<Payload>
18+
String messageType = rawMessage.substring(0, 5);
19+
String messagePayload = rawMessage.substring(6);
20+
switch (messageType) {
21+
case "DSCVR":
22+
return new DiscoverASAPLoRaMessage(); //I don't think this can happen...?
23+
case "DVDCR":
24+
return new DeviceDiscoveredASAPLoRaMessage(messagePayload);
25+
case "MSSGE":
26+
String messageAddress = messagePayload.substring(0, 4);
27+
String message = messagePayload.substring(5);
28+
return new ASAPLoRaMessage(messageAddress, message);
29+
}
30+
throw new ASAPLoRaException("Recieved invalid Message Type: " + rawMessage);
31+
}
32+
1433
@Override
1534
public String toString() {
1635
return "AbstractASAPLoRaMessage derived class: " + this.getClass().getName();

app/src/main/java/net/sharksystem/asap/android/lora/messages/DeviceDiscoveredASAPLoRaMessage.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,12 @@
11
package net.sharksystem.asap.android.lora.messages;
22

33
public class DeviceDiscoveredASAPLoRaMessage extends AbstractASAPLoRaMessage {
4-
//needs to be public to be picked up by the json automapper
54
public String address = "";
65

76
public DeviceDiscoveredASAPLoRaMessage(String address) {
87
this.address = address;
98
}
109

11-
//Constructor for Jackson
12-
public DeviceDiscoveredASAPLoRaMessage() {
13-
this.address = "";
14-
}
15-
1610
@Override
1711
public String toString() {
1812
return "DeviceDiscoveredASAPLoRaMessage: " + this.address;

0 commit comments

Comments
 (0)