Modularisierung: WSS-/Alchemy-Listener ins Copytrading-Modul verschoben

Beide Listener sind copytrading-spezifisch (überwachen die getrackten Master-
Trader bzw. Auto-Redeem nach Copytrading-Settings) und werden jetzt vom Modul
besessen statt von der App. Reiner Move, keine Logikänderung.

- services/AlchemyWebsocketService.cs + services/PolymarketWssClient.cs
  -> src/PolyTrader.Modules.CopyTrading/Services/ (Namespace bleibt transitional).
- CopyTradingModule.RegisterServices registriert nun beide Hosted Services sowie
  IBlockchainWssClientFactory->AlchemyWssClientFactory (Core-WSS-Infra, nur vom
  Copytrading-Blockchain-Listener genutzt).
- Program.cs: die drei Registrierungen entfernt (WSS-Factory + 2 Hosted Services)
  + ungenutztes using PolyTrader.Core.Streaming.
- WSS-Verbindungsinfrastruktur (AlchemyWssClient/BlockchainWss) bleibt in Core.

DI-Auflösung unverändert (gleicher Container). Build grün, --smoke-ui grün.
Laufzeit-Verifikation der WSS-Verbindungen: Server-Test.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Richard
2026-07-06 18:44:49 +02:00
co-authored by Claude Opus 4.8
parent 1b51872f00
commit 3456fd9768
4 changed files with 9 additions and 4 deletions
-4
View File
@@ -9,7 +9,6 @@ using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using PolyTrader.Core.Configuration; using PolyTrader.Core.Configuration;
using PolyTrader.Core.DependencyInjection; using PolyTrader.Core.DependencyInjection;
using PolyTrader.Core.Streaming;
using PolyTrader.Core.Modularity; using PolyTrader.Core.Modularity;
using PolyTrader.Modules.CopyTrading; using PolyTrader.Modules.CopyTrading;
using PolyTrader.Modules.CopyTrading.Persistence; using PolyTrader.Modules.CopyTrading.Persistence;
@@ -79,7 +78,6 @@ internal static class Program
}; };
services.Configure<DatabaseOptions>(context.Configuration.GetSection(DatabaseOptions.SectionName)); services.Configure<DatabaseOptions>(context.Configuration.GetSection(DatabaseOptions.SectionName));
services.AddCorePersistence(databaseOptions); services.AddCorePersistence(databaseOptions);
services.AddSingleton<IBlockchainWssClientFactory, AlchemyWssClientFactory>();
services.AddSingleton((IServiceProvider sp) => ServerSettings.Load("server_settings.xml")); services.AddSingleton((IServiceProvider sp) => ServerSettings.Load("server_settings.xml"));
services.AddSingleton<TradingState>(); services.AddSingleton<TradingState>();
services.AddSingleton(delegate(IServiceProvider sp) services.AddSingleton(delegate(IServiceProvider sp)
@@ -124,11 +122,9 @@ internal static class Program
module.RegisterServices(services, context.Configuration); module.RegisterServices(services, context.Configuration);
} }
services.AddHostedService<AlchemyWebsocketService>();
services.AddHostedService<PersistenceService>(); services.AddHostedService<PersistenceService>();
services.AddHostedService<MarketSyncService>(); services.AddHostedService<MarketSyncService>();
services.AddHostedService<MasterTraderAnalyticsJob>(); services.AddHostedService<MasterTraderAnalyticsJob>();
services.AddHostedService<PolymarketWssClient>();
services.AddHostedService((IServiceProvider sp) => sp.GetRequiredService<MullvadVpnService>()); services.AddHostedService((IServiceProvider sp) => sp.GetRequiredService<MullvadVpnService>());
services.AddHostedService((IServiceProvider sp) => sp.GetRequiredService<ThreemaService>()); services.AddHostedService((IServiceProvider sp) => sp.GetRequiredService<ThreemaService>());
services.AddSingleton<PolyTraderSharp.Ui.ShellUiHost>(); services.AddSingleton<PolyTraderSharp.Ui.ShellUiHost>();
@@ -7,6 +7,7 @@ using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using PolyTrader.Core.Configuration; using PolyTrader.Core.Configuration;
using PolyTrader.Core.Modularity; using PolyTrader.Core.Modularity;
using PolyTrader.Core.Streaming;
using PolyTrader.Modules.CopyTrading.Persistence; using PolyTrader.Modules.CopyTrading.Persistence;
using PolyTrader.Modules.CopyTrading.Persistence.Ef; using PolyTrader.Modules.CopyTrading.Persistence.Ef;
using PolyTrader.Modules.CopyTrading.Ui; using PolyTrader.Modules.CopyTrading.Ui;
@@ -47,11 +48,19 @@ namespace PolyTrader.Modules.CopyTrading
services.AddSingleton<ITrackedTraderRepository, EfTrackedTraderRepository>(); services.AddSingleton<ITrackedTraderRepository, EfTrackedTraderRepository>();
services.AddSingleton<IMasterTraderHistoryRepository, EfMasterTraderHistoryRepository>(); services.AddSingleton<IMasterTraderHistoryRepository, EfMasterTraderHistoryRepository>();
// WSS-Infrastruktur (Core) wird nur vom Copytrading-Blockchain-Listener genutzt.
services.AddSingleton<IBlockchainWssClientFactory, AlchemyWssClientFactory>();
// Modul-Services (Signalquelle, Ausführung, Analytics) // Modul-Services (Signalquelle, Ausführung, Analytics)
services.AddSingleton<TraderMonitorService>(); services.AddSingleton<TraderMonitorService>();
services.AddHostedService(sp => sp.GetRequiredService<TraderMonitorService>()); services.AddHostedService(sp => sp.GetRequiredService<TraderMonitorService>());
services.AddHostedService<CopyTradingEngine>(); services.AddHostedService<CopyTradingEngine>();
services.AddHostedService<TraderAnalyticsJob>(); services.AddHostedService<TraderAnalyticsJob>();
// WSS-Listener des Moduls: Blockchain (Alchemy → Master-Trader-Wallets) und
// Polymarket-Markt-WSS (Auto-Redeem nach Copytrading-Settings).
services.AddHostedService<AlchemyWebsocketService>();
services.AddHostedService<PolymarketWssClient>();
} }
public void RegisterUi(IModuleUiHost host, IServiceProvider services) public void RegisterUi(IModuleUiHost host, IServiceProvider services)