Feat: 地震情報のWebSocket再接続

This commit is contained in:
2026-05-02 20:32:15 +09:00
parent c0df3d7344
commit d61fc56a38
3 changed files with 50 additions and 30 deletions
+47 -30
View File
@@ -21,43 +21,60 @@ if (config.earthquake?.useHistoryData) {
i++;
}, 10 * 1000);
} else {
const WEBSOCKET_URL = config.debug
? "wss://api-realtime-sandbox.p2pquake.net/v2/ws"
: "wss://api.p2pquake.net/v2/ws";
const connect = () => {
const WEBSOCKET_URL = config.debug
? "wss://api-realtime-sandbox.p2pquake.net/v2/ws"
: "wss://api.p2pquake.net/v2/ws";
console.log("P2P地震情報のWebSocketに接続します");
const socket = new WebSocket(WEBSOCKET_URL);
console.log("P2P地震情報のWebSocketに接続します");
const socket = new WebSocket(WEBSOCKET_URL);
socket.addEventListener("open", () => {
console.log("P2P地震情報のWebSocketに接続しました");
});
socket.addEventListener("open", () => {
console.log("P2P地震情報のWebSocketに接続しました");
});
socket.addEventListener("message", async (event) => {
let message;
socket.addEventListener("close", (err) => {
const interval = config.earthquake.reconnectInterval;
console.log(`WebSocketが切断されました。${interval / 1000}秒後に再接続します:`, err.reason);
setTimeout(() => {
connect();
}, interval);
});
try {
message = typeof event.data === "string"
? JSON.parse(event.data)
: event.data;
} catch (err) {
console.error(`地震情報メッセージのパースでエラーが発生: ${err}`);
return;
}
socket.addEventListener("error", (err) => {
console.error("WebSocketでエラーが発生しました:", err);
socket.close();
});
const id = message.id ?? message._id;
const mem = Memory.memory;
if (mem.processedInfo.includes(id) && !config.debug) {
console.log("重複した地震情報: ", message.id);
return;
}
socket.addEventListener("message", async (event) => {
let message;
processMessage(message);
try {
message = typeof event.data === "string"
? JSON.parse(event.data)
: event.data;
} catch (err) {
console.error("地震情報メッセージのパースでエラーが発生:", err);
return;
}
if (!config.debug) {
mem.processedInfo.concat([id]);
Memory.memory = mem;
}
});
const id = message.id ?? message._id;
const mem = Memory.memory;
if (mem.processedInfo.includes(id) && !config.debug) {
console.log("重複した地震情報:", message.id);
return;
}
processMessage(message);
if (!config.debug) {
mem.processedInfo.concat([id]);
Memory.memory = mem;
}
});
}
connect();
}
const processMessage = async (message: any) => {
+1
View File
@@ -21,6 +21,7 @@ const schema = z.object({
]),
canUnknownMaxScale: z.boolean(),
useHistoryData: z.boolean(),
reconnectInterval: z.number().positive(),
}),
uwuzu: z.object({
token: z.string().length(64),