diff --git a/Assets/Cryville.EEW.Unity/Config.cs b/Assets/Cryville.EEW.Unity/Config.cs index 101a1fe..a550b88 100644 --- a/Assets/Cryville.EEW.Unity/Config.cs +++ b/Assets/Cryville.EEW.Unity/Config.cs @@ -57,6 +57,7 @@ namespace Cryville.EEW.Unity { [JsonDerivedType(typeof(BMKGOpenDataEventSourceConfig), "BMKGOpenData")] [JsonDerivedType(typeof(CWAOpenDataEventSourceConfig), "CWAOpenData")] [JsonDerivedType(typeof(EMSCRealTimeEventSourceConfig), "EMSCRealTime")] + [JsonDerivedType(typeof(FANStudioEventSourceConfig), "FANStudio")] [JsonDerivedType(typeof(GeoNetEventSourceConfig), "GeoNet")] [JsonDerivedType(typeof(GlobalQuakeServerEventSourceConfig), "GlobalQuakeServer")] [JsonDerivedType(typeof(GlobalQuakeServer15EventSourceConfig), "GlobalQuakeServer15")] @@ -69,6 +70,7 @@ namespace Cryville.EEW.Unity { record BMKGOpenDataEventSourceConfig([property: JsonRequired] string[] Subtypes) : EventSourceConfig; record CWAOpenDataEventSourceConfig([property: JsonRequired] string Subtype, [property: JsonRequired] string Token) : EventSourceConfig; record EMSCRealTimeEventSourceConfig() : EventSourceConfig; + record FANStudioEventSourceConfig([property: JsonRequired] string Subtype) : 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 7ef7821..272abb4 100644 --- a/Assets/Cryville.EEW.Unity/Map/MapElementManager.cs +++ b/Assets/Cryville.EEW.Unity/Map/MapElementManager.cs @@ -2,6 +2,7 @@ using Cryville.EEW.BMKGOpenData.Map; using Cryville.EEW.Core; using Cryville.EEW.CWAOpenData.Map; using Cryville.EEW.EMSC.Map; +using Cryville.EEW.FANStudio.Map; using Cryville.EEW.GeoNet.Map; using Cryville.EEW.GlobalQuake.Map; using Cryville.EEW.JMAAtom.Map; @@ -130,22 +131,26 @@ namespace Cryville.EEW.Unity.Map { readonly ContextedGeneratorManager _gen = new(new IContextedGenerator[] { new BMKGEarthquakeMapGenerator(), + new CEAEEWMapGenerator(), new CENCEarthquakeMapGenerator(), new CENCEEWMapGenerator(), new CWAEarthquakeMapGenerator(), new CWAEEWMapGenerator(), new CWATsunamiMapGenerator(), new EMSCRealTimeEventMapGenerator(), - new FujianEEWMapGenerator(), + new FANStudio.Map.FujianEEWMapGenerator(), + new Wolfx.Map.FujianEEWMapGenerator(), new GeoNetQuakeHistoryMapGenerator(), new GeoNetQuakeMapGenerator(), new GeoNetStrongMapGenerator(), new GlobalQuakeMapViewGenerator(), + new ICLEEWMapGenerator(), new JMAAtomMapGenerator(), new JMAEEWMapGenerator(), new NOAAMapGenerator(), + new FANStudio.Map.SichuanEEWMapGenerator(), + new Wolfx.Map.SichuanEEWMapGenerator(), new QuakeMLEventMapGenerator(), - new SichuanEEWMapGenerator(), new USGSContoursMapGenerator(), }); public UnityMapElement Build(object e, out CultureInfo culture, out int order) { diff --git a/Assets/Cryville.EEW.Unity/Worker.cs b/Assets/Cryville.EEW.Unity/Worker.cs index b7bc5e3..ca566fb 100644 --- a/Assets/Cryville.EEW.Unity/Worker.cs +++ b/Assets/Cryville.EEW.Unity/Worker.cs @@ -5,6 +5,8 @@ using Cryville.EEW.CWAOpenData; using Cryville.EEW.CWAOpenData.Model; using Cryville.EEW.CWAOpenData.TTS; using Cryville.EEW.EMSC; +using Cryville.EEW.FANStudio; +using Cryville.EEW.FANStudio.TTS; using Cryville.EEW.GeoNet; using Cryville.EEW.GeoNet.TTS; using Cryville.EEW.GlobalQuake; @@ -19,7 +21,6 @@ using Cryville.EEW.Unity.UI; using Cryville.EEW.UpdateChecker; using Cryville.EEW.USGS; using Cryville.EEW.Wolfx; -using Cryville.EEW.Wolfx.Model; using Cryville.EEW.Wolfx.TTS; using System; using System.Collections.Concurrent; @@ -97,51 +98,60 @@ namespace Cryville.EEW.Unity { CENCEarthquakeRVMGenerator _cencEarthquakeRVMGenerator; void RegisterViewModelGenerators(CoreWorker worker) { worker.RegisterViewModelGenerator(new BMKGEarthquakeRVMGenerator()); + worker.RegisterViewModelGenerator(new CEAEEWRVMGenerator()); worker.RegisterViewModelGenerator(_cencEarthquakeRVMGenerator = new CENCEarthquakeRVMGenerator()); worker.RegisterViewModelGenerator(new CENCEEWRVMGenerator()); worker.RegisterViewModelGenerator(new CWAEarthquakeRVMGenerator()); worker.RegisterViewModelGenerator(new CWAEEWRVMGenerator()); worker.RegisterViewModelGenerator(new CWATsunamiRVMGenerator()); worker.RegisterViewModelGenerator(new EMSCRealTimeEventRVMGenerator()); - worker.RegisterViewModelGenerator(new FujianEEWRVMGenerator()); + worker.RegisterViewModelGenerator(new FANStudio.FujianEEWRVMGenerator()); + worker.RegisterViewModelGenerator(new Wolfx.FujianEEWRVMGenerator()); worker.RegisterViewModelGenerator(new GeoNetQuakeHistoryRVMGenerator()); worker.RegisterViewModelGenerator(new GeoNetQuakeRVMGenerator()); worker.RegisterViewModelGenerator(new GeoNetStrongRVMGenerator()); worker.RegisterViewModelGenerator(new GlobalQuakeRVMGenerator()); + worker.RegisterViewModelGenerator(new ICLEEWRVMGenerator()); worker.RegisterViewModelGenerator(new JMAAtomRVMGenerator()); worker.RegisterViewModelGenerator(new JMAEEWRVMGenerator()); worker.RegisterViewModelGenerator(new NOAAAtomRVMGenerator()); var quakemlEventRVMGenerator = new QuakeMLEventRVMGenerator(); quakemlEventRVMGenerator.AddExtension(new USGSQuakeMLExtension()); worker.RegisterViewModelGenerator(quakemlEventRVMGenerator); - worker.RegisterViewModelGenerator(new SichuanEEWRVMGenerator()); + worker.RegisterViewModelGenerator(new FANStudio.SichuanEEWRVMGenerator()); + worker.RegisterViewModelGenerator(new Wolfx.SichuanEEWRVMGenerator()); worker.RegisterViewModelGenerator(new USGSContoursRVMGenerator()); worker.RegisterViewModelGenerator(new VersionRVMGenerator()); } CENCEarthquakeTTSMessageGenerator _cencEarthquakeTTSMessageGenerator; void RegisterTTSMessageGenerators(CoreWorker worker) { worker.RegisterTTSMessageGenerator(new BMKGEarthquakeTTSMessageGenerator()); + worker.RegisterTTSMessageGenerator(new CEAEEWTTSMessageGenerator()); worker.RegisterTTSMessageGenerator(_cencEarthquakeTTSMessageGenerator = new CENCEarthquakeTTSMessageGenerator()); worker.RegisterTTSMessageGenerator(new CENCEEWTTSMessageGenerator()); worker.RegisterTTSMessageGenerator(new CWAEarthquakeTTSMessageGenerator()); worker.RegisterTTSMessageGenerator(new CWAEEWTTSMessageGenerator()); worker.RegisterTTSMessageGenerator(new CWATsunamiTTSMessageGenerator()); - worker.RegisterTTSMessageGenerator(new FujianEEWTTSMessageGenerator()); + worker.RegisterTTSMessageGenerator(new FANStudio.TTS.FujianEEWTTSMessageGenerator()); + worker.RegisterTTSMessageGenerator(new Wolfx.TTS.FujianEEWTTSMessageGenerator()); worker.RegisterTTSMessageGenerator(new GeoNetQuakeHistoryTTSMessageGenerator()); worker.RegisterTTSMessageGenerator(new GeoNetQuakeTTSMessageGenerator()); worker.RegisterTTSMessageGenerator(new GeoNetStrongTTSMessageGenerator()); + worker.RegisterTTSMessageGenerator(new ICLEEWTTSMessageGenerator()); worker.RegisterTTSMessageGenerator(new JMAAtomTTSMessageGenerator()); worker.RegisterTTSMessageGenerator(new JMAEEWTTSMessageGenerator()); worker.RegisterTTSMessageGenerator(new NOAATTSMessageGenerator()); - worker.RegisterTTSMessageGenerator(new SichuanEEWTTSMessageGenerator()); + worker.RegisterTTSMessageGenerator(new FANStudio.TTS.SichuanEEWTTSMessageGenerator()); + worker.RegisterTTSMessageGenerator(new Wolfx.TTS.SichuanEEWTTSMessageGenerator()); } bool _verified; void BuildWorkers() { App.MainLogger.Log(1, "App", null, "Building workers"); -#if UNITY_EDITOR +#if false//UNITY_EDITOR _worker.AddWorker(new WolfxWorker(new Uri("ws://localhost:9995/wolfx"))); _worker.AddWorker(new JMAAtomWorker(new Uri("http://localhost:9095/eqvol.xml"))); + _worker.AddWorker(new FANStudioWorker(new("ws://localhost:9995/fan/cea"))); _worker.AddWorker(new CWAReportWorker(new Uri("http://localhost:9095/E-A0014-001.json"), "1")); _worker.AddWorker(new CWAReportWorker(new Uri("http://localhost:9095/E-A0015-001.json"), "1")); _worker.AddWorker(new CWAReportWorker(new Uri("http://localhost:9095/E-A0016-001.json"), "1")); @@ -161,6 +171,12 @@ namespace Cryville.EEW.Unity { _ => throw new InvalidOperationException("Unknown CWA open data sub-type."), }, EMSCRealTimeEventSourceConfig => new EMSCRealTimeWorker(new("wss://www.seismicportal.eu/standing_order/websocket")), + FANStudioEventSourceConfig fanStudio => fanStudio.Subtype switch { + "cea" => new FANStudioWorker(new("wss://websocket.fanstudio.hk/cea")), + "sichuan" => new FANStudioWorker(new("wss://websocket.fanstudio.hk/sichuan")), + "fujian" => new FANStudioWorker(new("wss://websocket.fanstudio.hk/fujian")), + _ => throw new InvalidOperationException("Unknown FAN Studio sub-type."), + }, 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), @@ -188,12 +204,12 @@ namespace Cryville.EEW.Unity { } WolfxWorker BuildWolfxWorkerFilter(WolfxWorker worker, WolfxEventSourceConfig config) { if (config.Filter != null) worker.SetFilter(config.Filter.Select(i => i switch { - "cenc_eew" => typeof(CENCEEW), - "cenc_eqlist" => typeof(WolfxEarthquakeList), - "cwa_eew" => typeof(CWAEEW), - "fj_eew" => typeof(FujianEEW), - "jma_eew" => typeof(JMAEEW), - "sc_eew" => typeof(SichuanEEW), + "cenc_eew" => typeof(Wolfx.Model.CENCEEW), + "cenc_eqlist" => typeof(Wolfx.Model.WolfxEarthquakeList), + "cwa_eew" => typeof(Wolfx.Model.CWAEEW), + "fj_eew" => typeof(Wolfx.Model.FujianEEW), + "jma_eew" => typeof(Wolfx.Model.JMAEEW), + "sc_eew" => typeof(Wolfx.Model.SichuanEEW), _ => throw new InvalidOperationException("Unknown Wolfx event type."), })); worker.IsFilterWhitelist = config.IsFilterWhitelist;