aboutsummaryrefslogtreecommitdiff
path: root/mod/src/main/java/kr/syeyoung/dungeonsguide/stomp/StompPayload.java
diff options
context:
space:
mode:
authorsyeyoung <cyoung06@naver.com>2022-05-21 21:18:14 +0900
committersyeyoung <cyoung06@naver.com>2022-05-21 21:28:52 +0900
commit20dd3f99a7b139b5848128246c622fd9cfefa478 (patch)
tree78e5f84ad22fd53876d488f6b58c3528aebe6501 /mod/src/main/java/kr/syeyoung/dungeonsguide/stomp/StompPayload.java
parent50de034c046c4ddea033b73793c8825ecb5bb86f (diff)
downloadSkyblock-Dungeons-Guide-20dd3f99a7b139b5848128246c622fd9cfefa478.tar.gz
Skyblock-Dungeons-Guide-20dd3f99a7b139b5848128246c622fd9cfefa478.tar.bz2
Skyblock-Dungeons-Guide-20dd3f99a7b139b5848128246c622fd9cfefa478.zip
- Project separation
Diffstat (limited to 'mod/src/main/java/kr/syeyoung/dungeonsguide/stomp/StompPayload.java')
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/stomp/StompPayload.java85
1 files changed, 85 insertions, 0 deletions
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/stomp/StompPayload.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/stomp/StompPayload.java
new file mode 100644
index 00000000..72eac419
--- /dev/null
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/stomp/StompPayload.java
@@ -0,0 +1,85 @@
+/*
+ * Dungeons Guide - The most intelligent Hypixel Skyblock Dungeons Mod
+ * Copyright (C) 2021 cyoung06
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+package kr.syeyoung.dungeonsguide.stomp;
+
+import kr.syeyoung.dungeonsguide.features.FeatureRegistry;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.*;
+
+@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);
+ if (FeatureRegistry.DEBUG.isEnabled()) System.out.println("Sending.. "+sb.toString());
+ return sb.toString();
+ }
+
+ public static StompPayload parse(String payload) {
+ if (FeatureRegistry.DEBUG.isEnabled()) System.out.println("Receving.. "+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);
+ }
+
+ List<String> lines = new ArrayList<String>();
+ while (scanner.hasNextLine() && !(line = scanner.nextLine()).equals("\0")) {
+ lines.add(line);
+ }
+ stompPayload.payload = String.join("\n", lines);
+ return stompPayload;
+ }
+}