EEW (緊急地震速報) Architecture
Instructions
EEW関連のコードを修正・理解する際は以下の手順に従う:
- 変更対象の特定: 予報電文か警報電文かを判断し、対応するキャッシュとメソッドを特定
- 影響範囲の確認:
EewControllerの処理フローを追跡し、関連するイベントを確認 - ソース優先順位の考慮: 複数ソース間の優先順位ルールを理解した上で修正
- テストデータの活用:
EewMock.csでテストデータを確認・追加
Key Files
| ファイル | 役割 |
|---|---|
src/KyoshinEewViewer/Series/KyoshinMonitor/Services/Eew/EewController.cs | EEW統合管理コントローラ |
src/KyoshinEewViewer/Series/KyoshinMonitor/Models/Eew.cs | EEWデータモデル |
src/KyoshinEewViewer/Series/KyoshinMonitor/Controls/EewPanel.axaml | EEW表示UI |
src/KyoshinEewViewer/Series/KyoshinMonitor/Services/Eew/EewTelegramSubscriber.cs | 電文受信・振り分け |
src/KyoshinEewViewer/Series/KyoshinMonitor/Services/Eew/SignalNowFileWatcher.cs | SNPファイル監視 |
src/KyoshinEewViewer/Series/KyoshinMonitor/Models/EewMock.cs | テスト用モックデータ |
Dual Cache Architecture
EewControllerは2つの独立したキャッシュを管理:
| キャッシュ | 処理メソッド | 電文タイトル |
|---|---|---|
EewCache | Update() | 緊急地震速報(地震動予報) |
WarningEewCache | UpdateWarning() | 緊急地震速報(警報) |
重要: 予報電文と警報電文は報数(SerialNo)が別々に管理される。
Processing Flow
[予報電文] → EewTelegramSubscriber → EewController.Update() → EewCache
[警報電文] → EewTelegramSubscriber → EewController.UpdateWarning() → WarningEewCache
↓
InvokeEewUpdated() → 両キャッシュをマージ → EewUpdated イベント発火
Source Priority
EewSource enum と優先順位:
- Dmdata: 最優先(他ソースを上書き)
- SignalNowProfessional: 精度情報のみ補完
- KyoshinMonitor / Axis: 基本ソース
詳細なMixEewロジックはreference.mdを参照。
Examples
予報電文の新しい報数を追加する場合:
EewTelegramSubscriberで電文を受信EewController.Update()を呼び出しEewCacheに新規エントリ追加または既存を更新InvokeEewUpdated()でイベント発火
警報地域を追加表示する場合:
EewWarningAreasモデルを確認(reference.md参照)EewPanel.axamlのバインディングを確認- 必要に応じて
EewController.UpdateWarning()の処理を修正
Additional Resources
詳細なモデル・イベント仕様はreference.mdを参照