Feat: 地震情報のWebSocket再接続
This commit is contained in:
@@ -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) => {
|
||||
|
||||
Reference in New Issue
Block a user