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("closed_trades"); cleanupCol.DeleteMany(Builders.Filter.Type("_id", MongoDB.Bson.BsonType.ObjectId)); } catch { } Channel copySignalChannel = Channel.CreateUnbounded(); Channel closedTradeChannel = Channel.CreateUnbounded(); AppHost = Host.CreateDefaultBuilder().ConfigureServices(delegate(HostBuilderContext context, IServiceCollection services) { services.AddSingleton((Func)((IServiceProvider sp) => { var client = new MongoClient("mongodb://localhost:27017"); return client.GetDatabase("PolyTraderDB"); })); services.AddSingleton((IServiceProvider sp) => ServerSettings.Load("server_settings.xml")); services.AddSingleton(); 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(); 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(); 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(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddHostedService((IServiceProvider sp) => sp.GetRequiredService()); services.AddHostedService(); services.AddHostedService(); services.AddHostedService(); services.AddHostedService(); services.AddHostedService(); services.AddHostedService(); services.AddHostedService(); services.AddHostedService((IServiceProvider sp) => sp.GetRequiredService()); services.AddHostedService((IServiceProvider sp) => sp.GetRequiredService()); services.AddTransient(); }).Build(); try { var db = AppHost.Services.GetRequiredService(); var state = AppHost.Services.GetRequiredService(); var maxTradeDoc = db.GetCollection("closed_trades") .Find(Builders.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(); Application.Run(requiredService); AppHost.StopAsync().GetAwaiter().GetResult(); } }