2026.4.0-beta.0 #12
@@ -12,6 +12,8 @@ earthquake:
|
|||||||
# 過去のデバッグ用データを使用して地震情報を配信するかどうか boolean
|
# 過去のデバッグ用データを使用して地震情報を配信するかどうか boolean
|
||||||
# デバッグ用途のみで使用してください。
|
# デバッグ用途のみで使用してください。
|
||||||
useHistoryData: false
|
useHistoryData: false
|
||||||
|
# 再接続の間隔(ミリ秒) number
|
||||||
|
reconnectInterval: 3000
|
||||||
uwuzu:
|
uwuzu:
|
||||||
# APIトークン string
|
# APIトークン string
|
||||||
# とくに理由がない限り、全権限を与えてください。
|
# とくに理由がない限り、全権限を与えてください。
|
||||||
|
|||||||
@@ -21,43 +21,60 @@ if (config.earthquake?.useHistoryData) {
|
|||||||
i++;
|
i++;
|
||||||
}, 10 * 1000);
|
}, 10 * 1000);
|
||||||
} else {
|
} else {
|
||||||
const WEBSOCKET_URL = config.debug
|
const connect = () => {
|
||||||
? "wss://api-realtime-sandbox.p2pquake.net/v2/ws"
|
const WEBSOCKET_URL = config.debug
|
||||||
: "wss://api.p2pquake.net/v2/ws";
|
? "wss://api-realtime-sandbox.p2pquake.net/v2/ws"
|
||||||
|
: "wss://api.p2pquake.net/v2/ws";
|
||||||
|
|
||||||
console.log("P2P地震情報のWebSocketに接続します");
|
console.log("P2P地震情報のWebSocketに接続します");
|
||||||
const socket = new WebSocket(WEBSOCKET_URL);
|
const socket = new WebSocket(WEBSOCKET_URL);
|
||||||
|
|
||||||
socket.addEventListener("open", () => {
|
socket.addEventListener("open", () => {
|
||||||
console.log("P2P地震情報のWebSocketに接続しました");
|
console.log("P2P地震情報のWebSocketに接続しました");
|
||||||
});
|
});
|
||||||
|
|
||||||
socket.addEventListener("message", async (event) => {
|
socket.addEventListener("close", (err) => {
|
||||||
let message;
|
const interval = config.earthquake.reconnectInterval;
|
||||||
|
console.log(`WebSocketが切断されました。${interval / 1000}秒後に再接続します:`, err.reason);
|
||||||
|
setTimeout(() => {
|
||||||
|
connect();
|
||||||
|
}, interval);
|
||||||
|
});
|
||||||
|
|
||||||
try {
|
socket.addEventListener("error", (err) => {
|
||||||
message = typeof event.data === "string"
|
console.error("WebSocketでエラーが発生しました:", err);
|
||||||
? JSON.parse(event.data)
|
socket.close();
|
||||||
: event.data;
|
});
|
||||||
} catch (err) {
|
|
||||||
console.error(`地震情報メッセージのパースでエラーが発生: ${err}`);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const id = message.id ?? message._id;
|
socket.addEventListener("message", async (event) => {
|
||||||
const mem = Memory.memory;
|
let message;
|
||||||
if (mem.processedInfo.includes(id) && !config.debug) {
|
|
||||||
console.log("重複した地震情報: ", message.id);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
processMessage(message);
|
try {
|
||||||
|
message = typeof event.data === "string"
|
||||||
|
? JSON.parse(event.data)
|
||||||
|
: event.data;
|
||||||
|
} catch (err) {
|
||||||
|
console.error("地震情報メッセージのパースでエラーが発生:", err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!config.debug) {
|
const id = message.id ?? message._id;
|
||||||
mem.processedInfo.concat([id]);
|
const mem = Memory.memory;
|
||||||
Memory.memory = mem;
|
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) => {
|
const processMessage = async (message: any) => {
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ const schema = z.object({
|
|||||||
]),
|
]),
|
||||||
canUnknownMaxScale: z.boolean(),
|
canUnknownMaxScale: z.boolean(),
|
||||||
useHistoryData: z.boolean(),
|
useHistoryData: z.boolean(),
|
||||||
|
reconnectInterval: z.number().positive(),
|
||||||
}),
|
}),
|
||||||
uwuzu: z.object({
|
uwuzu: z.object({
|
||||||
token: z.string().length(64),
|
token: z.string().length(64),
|
||||||
|
|||||||
Reference in New Issue
Block a user