feat: Add new event sources

This commit is contained in:
2025-07-27 11:25:19 +08:00
parent d2b2f2e708
commit 0630eb312a
3 changed files with 33 additions and 5 deletions

View File

@@ -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<string> 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);

View File

@@ -130,9 +130,11 @@ namespace Cryville.EEW.Unity.Map {
}
readonly ContextedGeneratorManager<IMapGeneratorContext, MapElement> _gen = new(new IContextedGenerator<IMapGeneratorContext, MapElement>[] {
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(),

View File

@@ -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<FANStudio.Model.CENCEarthquake>(new("wss://ws.fanstudio.tech/cenc")),
"cea" => new FANStudioWorker<FANStudio.Model.CEAEEW>(new("wss://ws.fanstudio.tech/cea")),
"sichuan" => new FANStudioWorker<FANStudio.Model.SichuanEEW>(new("wss://ws.fanstudio.tech/sichuan")),
"ningxia" => new FANStudioWorker<FANStudio.Model.NingxiaEarthquake>(new("wss://ws.fanstudio.tech/ningxia")),
"fujian" => new FANStudioWorker<FANStudio.Model.FujianEEW>(new("wss://ws.fanstudio.tech/fujian")),
"beijing" => new FANStudioWorker<FANStudio.Model.BeijingEarthquake>(new("wss://ws.fanstudio.tech/beijing")),
"hko" => new FANStudioWorker<FANStudio.Model.HKOEarthquake>(new("wss://ws.fanstudio.tech/hko")),
"sa" => new FANStudioWorker<FANStudio.Model.ShakeAlertEEW>(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;