|
|
|
@@ -1,9 +1,9 @@
|
|
|
|
|
import WebSocket from "ws";
|
|
|
|
|
import { differenceInMinutes } from "date-fns";
|
|
|
|
|
import { differenceInMinutes, subMinutes } from "date-fns";
|
|
|
|
|
|
|
|
|
|
import config from "../config.js";
|
|
|
|
|
|
|
|
|
|
let rateLimit: Date;
|
|
|
|
|
let rateLimit: Date | null = null;
|
|
|
|
|
|
|
|
|
|
class P2PEarthquakeClient {
|
|
|
|
|
private ws: WebSocket | null = null;
|
|
|
|
@@ -72,12 +72,13 @@ class P2PEarthquakeClient {
|
|
|
|
|
console.log("緊急地震速報を受信しました");
|
|
|
|
|
this.executeEventFunc(message);
|
|
|
|
|
break;
|
|
|
|
|
case 555: // 震度情報
|
|
|
|
|
console.log("震度情報を受信しました");
|
|
|
|
|
case 555: // 地域情報更新情報
|
|
|
|
|
console.log("地域情報更新情報を受信しました");
|
|
|
|
|
this.executeEventFunc(message);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
console.log(`その他の情報 (コード: ${message.code})`);
|
|
|
|
|
console.log("----------------");
|
|
|
|
|
console.log(`未対応の情報を受信しました(コード: ${message.code})`);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@@ -144,7 +145,8 @@ async function areaMap(): Promise<Record<number, string>> {
|
|
|
|
|
|
|
|
|
|
// 情報受信
|
|
|
|
|
async function event(earthquakeInfo: any): Promise<void> {
|
|
|
|
|
console.log(JSON.stringify(earthquakeInfo));
|
|
|
|
|
console.log("----------------");
|
|
|
|
|
console.log(`受信データ:${JSON.stringify(earthquakeInfo)}`);
|
|
|
|
|
|
|
|
|
|
// ----処理----
|
|
|
|
|
|
|
|
|
@@ -244,6 +246,7 @@ async function event(earthquakeInfo: any): Promise<void> {
|
|
|
|
|
let maxScale: string = "最大深度:";
|
|
|
|
|
|
|
|
|
|
if (earthquakeInfo.earthquake.maxScale < config.earthquake.maxScaleMax) {
|
|
|
|
|
console.log("最低震度に満たしていないため投稿されませんでした");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -331,7 +334,7 @@ async function event(earthquakeInfo: any): Promise<void> {
|
|
|
|
|
// 地域情報更新の場合
|
|
|
|
|
else if (earthquakeInfo.code === 555) {
|
|
|
|
|
if (rateLimit === null) {
|
|
|
|
|
rateLimit = new Date();
|
|
|
|
|
rateLimit = subMinutes(new Date(), 15);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 対象地域マッピング
|
|
|
|
@@ -349,7 +352,7 @@ async function event(earthquakeInfo: any): Promise<void> {
|
|
|
|
|
|
|
|
|
|
const areas = areaNames.join("・");
|
|
|
|
|
|
|
|
|
|
if (differenceInMinutes(rateLimit, new Date()) >= config.earthquake.rateLimit) {
|
|
|
|
|
if (Math.abs(differenceInMinutes(rateLimit, new Date())) >= config.earthquake.rateLimit) {
|
|
|
|
|
ueuse(`
|
|
|
|
|
==地震情報==
|
|
|
|
|
【地域情報更新】
|
|
|
|
|