Add SSE client for web chat integration and enable event-based message handling.

- Introduced `SseSubscribeClient` to connect to the external web server and process events via SSE (Server-Sent Events).
- Added `WebHandler` interface for type-safe event deserialization and processing.
- Included `WebChatHandler` to handle incoming web chat messages and forward them to the chat system.
- Updated `Config` for new configurable values: `CHAT_WEB_REGISTER_TO_BASE_URL` and `CHAT_WEB_TOKEN`.
This commit is contained in:
2026-08-02 17:39:25 +02:00
parent 6db9816c85
commit 421f6655fd
7 changed files with 266 additions and 8 deletions
@@ -1,6 +1,7 @@
package com.alttd.chat;
import com.alttd.chat.chat_web.ChatMessageSender;
import com.alttd.chat.chat_web.handlers.WebChatHandler;
import com.alttd.chat.commands.*;
import com.alttd.chat.config.Config;
import com.alttd.chat.config.ServerConfig;
@@ -15,6 +16,8 @@ import com.alttd.chat.objects.chat_log.ChatLogHandler;
import com.alttd.chat.util.ALogger;
import com.alttd.chat.util.ServerName;
import com.alttd.chat.util.Utility;
import com.alttd.chat.web.SseSubscribeClient;
import lombok.Getter;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandExecutor;
import org.bukkit.event.Listener;
@@ -24,12 +27,15 @@ import java.util.Objects;
public class ChatPlugin extends JavaPlugin {
@Getter
private static ChatPlugin instance;
private ChatAPI chatAPI;
@Getter
private ChatHandler chatHandler;
private ServerConfig serverConfig;
private SseSubscribeClient sseSubscribeClient;
@Override
public void onEnable() {
@@ -78,10 +84,23 @@ public class ChatPlugin extends JavaPlugin {
getServer().getMessenger().registerIncomingPluginChannel(this, messageChannel, nicknamesEvents);
getServer().getPluginManager().registerEvents(nicknamesEvents, this);
registerCommand("nick", new Nicknames());
sseSubscribeClient = new SseSubscribeClient(
Config.CHAT_WEB_REGISTER_TO_BASE_URL,
getServer().getServerName(),
Config.CHAT_WEB_TOKEN
);
new Thread(sseSubscribeClient).start();
registerWebHandlers(chatMessageSender, sseSubscribeClient);
}
private void registerWebHandlers(ChatMessageSender chatMessageSender, SseSubscribeClient sseSubscribeClient) {
sseSubscribeClient.register("web_chat", new WebChatHandler(chatMessageSender));
}
@Override
public void onDisable() {
sseSubscribeClient.stop();
instance = null;
}
@@ -95,14 +114,6 @@ public class ChatPlugin extends JavaPlugin {
Objects.requireNonNull(getCommand(commandName)).setExecutor(commandExecutor);
}
public static ChatPlugin getInstance() {
return instance;
}
public ChatHandler getChatHandler() {
return chatHandler;
}
public boolean serverGlobalChatEnabled() {
return serverConfig.GLOBALCHAT;
}
@@ -0,0 +1,24 @@
package com.alttd.chat.chat_web.handlers;
import com.alttd.chat.chat_web.ChatMessageSender;
import com.alttd.chat.web.WebHandler;
import com.alttd.chat.web.handler_class.ChatFromWeb;
public class WebChatHandler implements WebHandler<ChatFromWeb> {
private final ChatMessageSender chatMessageSender;
public WebChatHandler(ChatMessageSender chatMessageSender) {
this.chatMessageSender = chatMessageSender;
}
@Override
public Class<ChatFromWeb> type() {
return ChatFromWeb.class;
}
@Override
public void handle(ChatFromWeb chatFromWeb) {
this.chatMessageSender.sendMessage(chatFromWeb.getSender(), chatFromWeb.getMessage());
}
}