aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/kr/syeyoung/dungeonsguide/stomp/StompPayload.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/kr/syeyoung/dungeonsguide/stomp/StompPayload.java')
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/stomp/StompPayload.java69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/stomp/StompPayload.java b/src/main/java/kr/syeyoung/dungeonsguide/stomp/StompPayload.java
new file mode 100644
index 00000000..9476241c
--- /dev/null
+++ b/src/main/java/kr/syeyoung/dungeonsguide/stomp/StompPayload.java
@@ -0,0 +1,69 @@
+package kr.syeyoung.dungeonsguide.stomp;
+
+import lombok.Data;
+import lombok.Singular;
+import lombok.experimental.Accessors;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Scanner;
+
+@Data
+@Accessors(chain = true, fluent = true)
+public class StompPayload {
+ private StompHeader method;
+ private Map<String, String> headers = new HashMap<String, String>();
+ private String payload;
+
+ public StompPayload header(String key, String value) {
+ headers.put(key, value);
+ return this;
+ }
+
+ public String getBuilt() {
+ StringBuilder sb = new StringBuilder();
+ sb.append(method.name());
+ sb.append("\n");
+ for (Map.Entry<String, String> stringStringEntry : headers.entrySet()) {
+ sb.append(stringStringEntry.getKey());
+ sb.append(":");
+ sb.append(stringStringEntry.getValue());
+ sb.append("\n");
+ if (stringStringEntry.getKey().contains(":")) throw new IllegalStateException("Illegal Character : inside headers");
+ if (stringStringEntry.getValue().contains(":")) throw new IllegalStateException("Illegal Character : inside headers");
+ }
+ sb.append("\n");
+ if (payload != null)
+ sb.append(payload);
+ sb.append((char) 0);
+ System.out.println("Probably sending "+sb.toString());
+ return sb.toString();
+ }
+
+ public static StompPayload parse(String payload) {
+ System.out.println("Parsing "+payload);
+ Scanner scanner = new Scanner(payload);
+ StompPayload stompPayload = new StompPayload();
+ stompPayload.method = StompHeader.valueOf(scanner.nextLine());
+ String line = "";
+ while (!(line = scanner.nextLine()).isEmpty()) {
+ int index = line.indexOf(":");
+ if (index == -1) throw new IllegalArgumentException("No : found in headers section");
+ String name = line.substring(0, index);
+ String value;
+ if (index == line.length() - 1)
+ value = "";
+ else
+ value = line.substring(index+1);
+ stompPayload.headers.put(name, value);
+ }
+
+ StringBuilder payloadBuilder = new StringBuilder();
+ while (scanner.hasNextLine() && !(line = scanner.nextLine()).equals("\0")) {
+ payloadBuilder.append(line);
+ payloadBuilder.append("\n");
+ }
+ stompPayload.payload = payloadBuilder.toString();
+ return stompPayload;
+ }
+}