using RelayServer.Endpoints; using RelayServer.Services.Chat; using RelayServer.Services.Core; using RelayServer.Services.Data; using RelayServer.Services.Rtc; using WebSocketSharp.Server; var surrealService = new SurrealService(); var coreClient = new CoreClientService(); var cryptoService = new ChannelCryptoService(); await using var db = await surrealService.ConnectAsync(); ChatSocketBehavior.ClientKeyService = new ClientKeyService(db); ChatSocketBehavior.Db = db; ChatSocketBehavior.ChannelCryptoService = cryptoService; var bootstrapService = new ServerBootstrapService(db, coreClient, cryptoService); await bootstrapService.InitializeAsync(); var builder = WebApplication.CreateBuilder(args); builder.Services.AddSingleton(db); builder.Services.AddScoped(); var app = builder.Build(); app.MapGet("/", () => "Server Running!"); app.MapRtcEndpoints(); var wssv = new WebSocketServer("ws://localhost:1337"); wssv.AddWebSocketService("/"); RtcNotificationService.Server = wssv; //TODO: Use AnswerCallback as a test on client and use the /rtc/answer endpoint call as a test on server wssv.Start(); Console.WriteLine("WebSocket server started"); await app.StartAsync(); Console.WriteLine("HTTP API started"); Console.ReadKey(true); // TODO: Make program stop be a console command wssv.Stop(); await app.StopAsync(); return;