package de.qsheltier.msta;
import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
import java.awt.Component;
import java.awt.Frame;
import java.awt.Window;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketAddress;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
var newWindows = currentlyOpenWindows.stream().filter(window -> !windows.containsValue(window)).toList();
newWindows.forEach(newWindow -> {
synchronized (outputWriters) {
- outputWriters.forEach(writeLine -> writeLine.accept(createEvent("window-opened", new Pair("id", newWindow.getName()), new Pair("is-frame", newWindow instanceof Frame))));
+ outputWriters.forEach(writeLine -> writeLine.accept(createEvent("window-opened", objectMapper.createObjectNode().put("id", newWindow.getName()).put("is-frame", newWindow instanceof Frame))));
}
windows.put(newWindow.getName(), newWindow);
});
}
};
try (var inputReader = new BufferedReader(new InputStreamReader(inputStream))) {
- writeLine.accept(createEvent("connected"));
+ writeLine.accept(createEvent("connected", objectMapper.createObjectNode()));
synchronized (outputWriters) {
outputWriters.add(writeLine);
}
if (words.getFirst().equalsIgnoreCase("info") && (words.size() == 3) && words.get(1).equalsIgnoreCase("window")) {
var windowName = words.get(2);
stream(Window.getWindows()).filter(window -> window.getName().equals(windowName))
- .forEach(window -> writeLine.accept(createMessage(new Pair("info", "window"), new Pair("id", window.getName()))));
+ .forEach(window -> writeLine.accept(createMessage(objectMapper.createObjectNode().put("info", "window").put("id", window.getName()))));
}
}
} finally {
}
}
- private String createEvent(String name, Pair... parameters) {
- return createMessage(new Pair("event", name), parameters);
+ private String createEvent(String name, ObjectNode parameters) {
+ parameters.put("event", name);
+ return createMessage(parameters);
}
- private String createMessage(Pair messageName, Pair... parameters) {
- Map<String, Object> reply = new HashMap<>();
- reply.put(messageName.first, messageName.second);
- stream(parameters).forEach(pair -> reply.put(pair.first, pair.second));
+ private String createMessage(JsonNode messageNode) {
try {
- return objectMapper.writeValueAsString(reply);
+ return objectMapper.writeValueAsString(messageNode);
} catch (JsonProcessingException e) {
return "";
}
private final Set<Consumer<String>> outputWriters = new HashSet<>();
private final Map<String, Window> windows = new ConcurrentHashMap<>();
- private record Pair(String first, Object second) {}
-
}