Baseline: Ausgangszustand vor Modularisierung
Erster Commit des bestehenden monolithischen WinForms-Copytraders, inklusive der Alt-Backups (*.bak), damit diese dauerhaft in der Historie rekonstruierbar bleiben. Threema-Lib unter libs/ wurde vendored (nested .git entfernt). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+107
@@ -0,0 +1,107 @@
|
||||
using System;
|
||||
using MongoDB.Driver;
|
||||
using PolyTraderSharp.Extensions;
|
||||
using System.Net.Http;
|
||||
using System.Threading.Channels;
|
||||
using System.Windows.Forms;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using PolyTraderSharp.Models;
|
||||
using PolyTraderSharp.Services;
|
||||
|
||||
namespace PolyTraderSharp;
|
||||
|
||||
internal static class Program
|
||||
{
|
||||
public static IHost? AppHost { get; private set; }
|
||||
|
||||
[STAThread]
|
||||
private static void Main()
|
||||
{
|
||||
ApplicationConfiguration.Initialize();
|
||||
|
||||
try
|
||||
{
|
||||
var cleanupClient = new MongoClient("mongodb://localhost:27017");
|
||||
var cleanupCol = cleanupClient.GetDatabase("PolyTraderDB").GetCollection<MongoDB.Bson.BsonDocument>("closed_trades");
|
||||
cleanupCol.DeleteMany(Builders<MongoDB.Bson.BsonDocument>.Filter.Type("_id", MongoDB.Bson.BsonType.ObjectId));
|
||||
}
|
||||
catch { }
|
||||
Channel<CopySignal> copySignalChannel = Channel.CreateUnbounded<CopySignal>();
|
||||
Channel<ClosedTrade> closedTradeChannel = Channel.CreateUnbounded<ClosedTrade>();
|
||||
AppHost = Host.CreateDefaultBuilder().ConfigureServices(delegate(HostBuilderContext context, IServiceCollection services)
|
||||
{
|
||||
services.AddSingleton((Func<IServiceProvider, IMongoDatabase>)((IServiceProvider sp) => { var client = new MongoClient("mongodb://localhost:27017"); return client.GetDatabase("PolyTraderDB"); }));
|
||||
services.AddSingleton((IServiceProvider sp) => ServerSettings.Load("server_settings.xml"));
|
||||
services.AddSingleton<TradingState>();
|
||||
services.AddSingleton(copySignalChannel.Writer);
|
||||
services.AddSingleton(copySignalChannel.Reader);
|
||||
services.AddSingleton(closedTradeChannel.Writer);
|
||||
services.AddSingleton(closedTradeChannel.Reader);
|
||||
services.AddSingleton(delegate(IServiceProvider sp)
|
||||
{
|
||||
TerminalLogger requiredService2 = sp.GetRequiredService<TerminalLogger>();
|
||||
var httpHandler = new SocketsHttpHandler { PooledConnectionLifetime = TimeSpan.FromMinutes(2), MaxConnectionsPerServer = 100 };
|
||||
return new PolymarketApiService(requiredService2, new HttpClient(httpHandler)
|
||||
{
|
||||
DefaultRequestHeaders =
|
||||
{
|
||||
{ "User-Agent", "py_clob_client" },
|
||||
{ "Accept", "*/*" }
|
||||
}
|
||||
});
|
||||
});
|
||||
services.AddSingleton(delegate(IServiceProvider sp)
|
||||
{
|
||||
TerminalLogger requiredService2 = sp.GetRequiredService<TerminalLogger>();
|
||||
var httpHandler = new SocketsHttpHandler { PooledConnectionLifetime = TimeSpan.FromMinutes(2), MaxConnectionsPerServer = 100 };
|
||||
return new PolymarketClobClient(requiredService2, new HttpClient(httpHandler)
|
||||
{
|
||||
DefaultRequestHeaders =
|
||||
{
|
||||
{ "User-Agent", "py_clob_client" },
|
||||
{ "Accept", "*/*" }
|
||||
}
|
||||
});
|
||||
});
|
||||
services.AddSingleton<TerminalLogger>();
|
||||
services.AddSingleton<MullvadVpnService>();
|
||||
services.AddSingleton<ThreemaService>();
|
||||
services.AddSingleton<JobManager>();
|
||||
services.AddSingleton<TraderMonitorService>();
|
||||
services.AddHostedService((IServiceProvider sp) => sp.GetRequiredService<TraderMonitorService>());
|
||||
services.AddHostedService<CopyTradingEngine>();
|
||||
services.AddHostedService<AlchemyWebsocketService>();
|
||||
services.AddHostedService<PersistenceService>();
|
||||
services.AddHostedService<MarketSyncService>();
|
||||
services.AddHostedService<TraderAnalyticsJob>();
|
||||
services.AddHostedService<MasterTraderAnalyticsJob>();
|
||||
services.AddHostedService<PolymarketWssClient>();
|
||||
services.AddHostedService((IServiceProvider sp) => sp.GetRequiredService<MullvadVpnService>());
|
||||
services.AddHostedService((IServiceProvider sp) => sp.GetRequiredService<ThreemaService>());
|
||||
services.AddTransient<frm_main>();
|
||||
}).Build();
|
||||
|
||||
try
|
||||
{
|
||||
var db = AppHost.Services.GetRequiredService<IMongoDatabase>();
|
||||
var state = AppHost.Services.GetRequiredService<TradingState>();
|
||||
var maxTradeDoc = db.GetCollection<MongoDB.Bson.BsonDocument>("closed_trades")
|
||||
.Find(Builders<MongoDB.Bson.BsonDocument>.Filter.Empty)
|
||||
.SortByDescending(d => d["_id"])
|
||||
.Limit(1)
|
||||
.FirstOrDefault();
|
||||
|
||||
if (maxTradeDoc != null && maxTradeDoc.Contains("_id"))
|
||||
{
|
||||
state.TotalCopyTrades = maxTradeDoc["_id"].AsInt32;
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
|
||||
AppHost.Start();
|
||||
frm_main requiredService = AppHost.Services.GetRequiredService<frm_main>();
|
||||
Application.Run(requiredService);
|
||||
AppHost.StopAsync().GetAwaiter().GetResult();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user