From 0630eb312ac1b95e151a25752690551bd497ddf0 Mon Sep 17 00:00:00 2001 From: PopSlime Date: Sun, 27 Jul 2025 11:25:19 +0800 Subject: [PATCH] feat: Add new event sources --- Assets/Cryville.EEW.Unity/Config.cs | 2 ++ .../Map/MapElementManager.cs | 7 ++++- Assets/Cryville.EEW.Unity/Worker.cs | 29 ++++++++++++++++--- 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/Assets/Cryville.EEW.Unity/Config.cs b/Assets/Cryville.EEW.Unity/Config.cs index a550b88..f3c7fbd 100644 --- a/Assets/Cryville.EEW.Unity/Config.cs +++ b/Assets/Cryville.EEW.Unity/Config.cs @@ -58,6 +58,7 @@ namespace Cryville.EEW.Unity { [JsonDerivedType(typeof(CWAOpenDataEventSourceConfig), "CWAOpenData")] [JsonDerivedType(typeof(EMSCRealTimeEventSourceConfig), "EMSCRealTime")] [JsonDerivedType(typeof(FANStudioEventSourceConfig), "FANStudio")] + [JsonDerivedType(typeof(FANStudioAllEventSourceConfig), "FANStudioAll")] [JsonDerivedType(typeof(GeoNetEventSourceConfig), "GeoNet")] [JsonDerivedType(typeof(GlobalQuakeServerEventSourceConfig), "GlobalQuakeServer")] [JsonDerivedType(typeof(GlobalQuakeServer15EventSourceConfig), "GlobalQuakeServer15")] @@ -71,6 +72,7 @@ namespace Cryville.EEW.Unity { record CWAOpenDataEventSourceConfig([property: JsonRequired] string Subtype, [property: JsonRequired] string Token) : EventSourceConfig; record EMSCRealTimeEventSourceConfig() : EventSourceConfig; record FANStudioEventSourceConfig([property: JsonRequired] string Subtype) : EventSourceConfig; + record FANStudioAllEventSourceConfig(IReadOnlyCollection Filter = null, bool IsFilterWhitelist = false) : EventSourceConfig; record GeoNetEventSourceConfig(int MinimumMMI = 3, bool DoGetFullHistory = false, bool DoGetStrongMotionInfo = true) : EventSourceConfig; record GlobalQuakeServerEventSourceConfig([property: JsonRequired] string Host, int Port = 38000) : EventSourceConfig; record GlobalQuakeServer15EventSourceConfig(string Host, int Port = 38000) : GlobalQuakeServerEventSourceConfig(Host, Port); diff --git a/Assets/Cryville.EEW.Unity/Map/MapElementManager.cs b/Assets/Cryville.EEW.Unity/Map/MapElementManager.cs index 272abb4..70ea333 100644 --- a/Assets/Cryville.EEW.Unity/Map/MapElementManager.cs +++ b/Assets/Cryville.EEW.Unity/Map/MapElementManager.cs @@ -130,9 +130,11 @@ namespace Cryville.EEW.Unity.Map { } readonly ContextedGeneratorManager _gen = new(new IContextedGenerator[] { + new BeijingEarthquakeMapGenerator(), new BMKGEarthquakeMapGenerator(), new CEAEEWMapGenerator(), - new CENCEarthquakeMapGenerator(), + new FANStudio.Map.CENCEarthquakeMapGenerator(), + new Wolfx.Map.CENCEarthquakeMapGenerator(), new CENCEEWMapGenerator(), new CWAEarthquakeMapGenerator(), new CWAEEWMapGenerator(), @@ -144,10 +146,13 @@ namespace Cryville.EEW.Unity.Map { new GeoNetQuakeMapGenerator(), new GeoNetStrongMapGenerator(), new GlobalQuakeMapViewGenerator(), + new HKOEarthquakeMapGenerator(), new ICLEEWMapGenerator(), new JMAAtomMapGenerator(), new JMAEEWMapGenerator(), + new NingxiaEarthquakeMapGenerator(), new NOAAMapGenerator(), + new ShakeAlertEEWMapGenerator(), new FANStudio.Map.SichuanEEWMapGenerator(), new Wolfx.Map.SichuanEEWMapGenerator(), new QuakeMLEventMapGenerator(), diff --git a/Assets/Cryville.EEW.Unity/Worker.cs b/Assets/Cryville.EEW.Unity/Worker.cs index a07fca6..fee6c6d 100644 --- a/Assets/Cryville.EEW.Unity/Worker.cs +++ b/Assets/Cryville.EEW.Unity/Worker.cs @@ -107,11 +107,13 @@ namespace Cryville.EEW.Unity { _ongoingReportManager.Dispose(); } - CENCEarthquakeRVMGenerator _cencEarthquakeRVMGenerator; + Wolfx.CENCEarthquakeRVMGenerator _cencEarthquakeRVMGenerator; void RegisterViewModelGenerators(CoreWorker worker) { + worker.RegisterViewModelGenerator(new BeijingEarthquakeRVMGenerator()); worker.RegisterViewModelGenerator(new BMKGEarthquakeRVMGenerator()); worker.RegisterViewModelGenerator(new CEAEEWRVMGenerator()); - worker.RegisterViewModelGenerator(_cencEarthquakeRVMGenerator = new CENCEarthquakeRVMGenerator()); + worker.RegisterViewModelGenerator(new FANStudio.CENCEarthquakeRVMGenerator()); + worker.RegisterViewModelGenerator(_cencEarthquakeRVMGenerator = new()); worker.RegisterViewModelGenerator(new CENCEEWRVMGenerator()); worker.RegisterViewModelGenerator(new CWAEarthquakeRVMGenerator()); worker.RegisterViewModelGenerator(new CWAEEWRVMGenerator()); @@ -123,23 +125,28 @@ namespace Cryville.EEW.Unity { worker.RegisterViewModelGenerator(new GeoNetQuakeRVMGenerator()); worker.RegisterViewModelGenerator(new GeoNetStrongRVMGenerator()); worker.RegisterViewModelGenerator(new GlobalQuakeRVMGenerator()); + worker.RegisterViewModelGenerator(new HKOEarthquakeRVMGenerator()); worker.RegisterViewModelGenerator(new ICLEEWRVMGenerator()); worker.RegisterViewModelGenerator(new JMAAtomRVMGenerator()); worker.RegisterViewModelGenerator(new JMAEEWRVMGenerator()); + worker.RegisterViewModelGenerator(new NingxiaEarthquakeRVMGenerator()); worker.RegisterViewModelGenerator(new NOAAAtomRVMGenerator()); var quakemlEventRVMGenerator = new QuakeMLEventRVMGenerator(); quakemlEventRVMGenerator.AddExtension(new USGSQuakeMLExtension()); worker.RegisterViewModelGenerator(quakemlEventRVMGenerator); + worker.RegisterViewModelGenerator(new ShakeAlertEEWRVMGenerator()); worker.RegisterViewModelGenerator(new FANStudio.SichuanEEWRVMGenerator()); worker.RegisterViewModelGenerator(new Wolfx.SichuanEEWRVMGenerator()); worker.RegisterViewModelGenerator(new USGSContoursRVMGenerator()); worker.RegisterViewModelGenerator(new VersionRVMGenerator()); } - CENCEarthquakeTTSMessageGenerator _cencEarthquakeTTSMessageGenerator; + Wolfx.TTS.CENCEarthquakeTTSMessageGenerator _cencEarthquakeTTSMessageGenerator; void RegisterTTSMessageGenerators(CoreWorker worker) { + worker.RegisterTTSMessageGenerator(new BeijingEarthquakeTTSMessageGenerator()); worker.RegisterTTSMessageGenerator(new BMKGEarthquakeTTSMessageGenerator()); worker.RegisterTTSMessageGenerator(new CEAEEWTTSMessageGenerator()); - worker.RegisterTTSMessageGenerator(_cencEarthquakeTTSMessageGenerator = new CENCEarthquakeTTSMessageGenerator()); + worker.RegisterTTSMessageGenerator(new FANStudio.TTS.CENCEarthquakeTTSMessageGenerator()); + worker.RegisterTTSMessageGenerator(_cencEarthquakeTTSMessageGenerator = new()); worker.RegisterTTSMessageGenerator(new CENCEEWTTSMessageGenerator()); worker.RegisterTTSMessageGenerator(new CWAEarthquakeTTSMessageGenerator()); worker.RegisterTTSMessageGenerator(new CWAEEWTTSMessageGenerator()); @@ -149,10 +156,13 @@ namespace Cryville.EEW.Unity { worker.RegisterTTSMessageGenerator(new GeoNetQuakeHistoryTTSMessageGenerator()); worker.RegisterTTSMessageGenerator(new GeoNetQuakeTTSMessageGenerator()); worker.RegisterTTSMessageGenerator(new GeoNetStrongTTSMessageGenerator()); + worker.RegisterTTSMessageGenerator(new HKOEarthquakeTTSMessageGenerator()); worker.RegisterTTSMessageGenerator(new ICLEEWTTSMessageGenerator()); worker.RegisterTTSMessageGenerator(new JMAAtomTTSMessageGenerator()); worker.RegisterTTSMessageGenerator(new JMAEEWTTSMessageGenerator()); + worker.RegisterTTSMessageGenerator(new NingxiaEarthquakeTTSMessageGenerator()); worker.RegisterTTSMessageGenerator(new NOAATTSMessageGenerator()); + worker.RegisterTTSMessageGenerator(new ShakeAlertEEWTTSMessageGenerator()); worker.RegisterTTSMessageGenerator(new FANStudio.TTS.SichuanEEWTTSMessageGenerator()); worker.RegisterTTSMessageGenerator(new Wolfx.TTS.SichuanEEWTTSMessageGenerator()); } @@ -184,11 +194,17 @@ namespace Cryville.EEW.Unity { }, EMSCRealTimeEventSourceConfig => new EMSCRealTimeWorker(new("wss://www.seismicportal.eu/standing_order/websocket")), FANStudioEventSourceConfig fanStudio => fanStudio.Subtype switch { + "cenc" => new FANStudioWorker(new("wss://ws.fanstudio.tech/cenc")), "cea" => new FANStudioWorker(new("wss://ws.fanstudio.tech/cea")), "sichuan" => new FANStudioWorker(new("wss://ws.fanstudio.tech/sichuan")), + "ningxia" => new FANStudioWorker(new("wss://ws.fanstudio.tech/ningxia")), "fujian" => new FANStudioWorker(new("wss://ws.fanstudio.tech/fujian")), + "beijing" => new FANStudioWorker(new("wss://ws.fanstudio.tech/beijing")), + "hko" => new FANStudioWorker(new("wss://ws.fanstudio.tech/hko")), + "sa" => new FANStudioWorker(new("wss://ws.fanstudio.tech/hko")), _ => throw new InvalidOperationException("Unknown FAN Studio sub-type."), }, + FANStudioAllEventSourceConfig fanStudioAll => BuildFANStudioAllWorkerFilter(new FANStudioAllWorker(new("wss://ws.fanstudio.tech/all")), fanStudioAll), GeoNetEventSourceConfig geoNet => BuildGeoNetWorker(new(new("https://api.geonet.org.nz/quake"), new("https://api.geonet.org.nz/quake/history/index"), new("https://api.geonet.org.nz/intensity/strong/processed/index")), geoNet), GlobalQuakeServer15EventSourceConfig gq => new GlobalQuakeWorker15(gq.Host, gq.Port), GlobalQuakeServerEventSourceConfig gq => new GlobalQuakeWorker(gq.Host, gq.Port), @@ -232,6 +248,11 @@ namespace Cryville.EEW.Unity { return worker; } + FANStudioAllWorker BuildFANStudioAllWorkerFilter(FANStudioAllWorker worker, FANStudioAllEventSourceConfig config) { + if (config.Filter != null) worker.SetFilter(config.Filter); + worker.IsFilterWhitelist = config.IsFilterWhitelist; + return worker; + } static BMKGOpenDataWorker BuildBMKGOpenDataWorkerUris(BMKGOpenDataWorker worker, BMKGOpenDataEventSourceConfig config) { worker.SetDataUris(config.Subtypes.Select(i => new Uri(string.Format(CultureInfo.InvariantCulture, "https://data.bmkg.go.id/DataMKG/TEWS/{0}.json", i)))); return worker;