private static ServiceProvider CreateServiceProvider(ClientStartParameters clientStartParameters) { Log.Logger = new LoggerConfiguration() .Enrich.FromLogContext() .MinimumLevel.Verbose() .WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}") .WriteTo.File("client.log") .CreateLogger(); var services = new ServiceCollection(); services.AddSingleton(clientStartParameters); services.Configure <GraphicsSettings>(_configuration.GetSection(GraphicsSettings.Key)); services.Configure <ClientSettings>(_configuration.GetSection(ClientSettings.Key)); services.AddSingleton(Log.Logger); services.AddSingleton(_configuration); services.AddSingleton <INetworkClient, NetworkClient>(); services.AddSingleton <IProjectService, ProjectService>(); services.AddSingleton <ITokenService, TokenService>(); services.AddSingleton <IMemoryCache, MemoryCache>(); services.AddSingleton <IPasswordHasher, PasswordHasher>(); services.AddSingleton <IContext, Context>(); services.AddWindows(); services.AddSingleton <IWorldProvider, WorldProvider>(); services.AddSingleton <IWorldRenderer, WorldRenderer>(); services.AddSingleton <MainGame>(); return(services.BuildServiceProvider()); }
public static void Main(string[] args) { _configuration = new ConfigurationBuilder() .AddJsonFile("appsettings.json", false, true) .Build(); ClientStartParameters clientStartParameters = new ClientStartParameters { ProjectId = 1, }; #if RELEASE if (args.Length == 0) { Console.WriteLine("Unable to start client. Use the launcher."); return; } if (args.Length > 0) { var clientStartParametersEncoded = args[0]; var clientStartParametersJson = Convert.FromBase64String(clientStartParametersEncoded); var clientStartParameters = JsonSerializer.Deserialize <ClientStartParameters>(clientStartParametersJson); if (clientStartParameters == null) { Console.WriteLine("Illegal StartParameters, unable to start client. Use the launcher."); Console.ReadLine(); return; } var connectionTicketEncoded = UrlEncodeBase64(clientStartParameters.ConnectionTicket); using var httpClient = new HttpClient(); httpClient.BaseAddress = new Uri(_configuration["Api:ApiEndpoint"]); httpClient.DefaultRequestHeaders.Clear(); var validateTicketResponse = httpClient.GetAsync($"api/auth/validateTicket/{connectionTicketEncoded}").GetAwaiter().GetResult(); if (!validateTicketResponse.IsSuccessStatusCode) { Console.WriteLine("Unable to start client. Use the launcher."); Console.ReadLine(); return; } } #endif DllMap.Initialise(); using var serviceProvider = CreateServiceProvider(clientStartParameters); var graphicsSettings = serviceProvider.GetRequiredService <IOptions <GraphicsSettings> >(); Environment.SetEnvironmentVariable("FNA3D_FORCE_DRIVER", graphicsSettings.Value.Backend.ToString()); using var mainGame = serviceProvider.GetRequiredService <MainGame>(); mainGame.Run(); }
public MainGame( ILogger logger, ClientStartParameters clientStartParameters, IOptions <GraphicsSettings> graphicsSettings, INetworkClient networkClient, IWindowProvider windowProvider, IWorldProvider worldProvider, IWorldRenderer worldRenderer, IContext context) { _logger = logger; _clientStartParameters = clientStartParameters; _graphicsSettings = graphicsSettings; FNALoggerEXT.LogError = message => _logger.Error("FNA: {@Message}", message); FNALoggerEXT.LogInfo = message => _logger.Information("FNA: {@Message}", message); FNALoggerEXT.LogWarn = message => _logger.Warning("FNA: {@Message}", message); _networkClient = networkClient; _networkClient.Connected += NetworkClientConnected; _networkClient.Disconnected += NetworkClientDisconnected; _networkClient.ChunkReceived += NetworkClientChunkReceived; _windowProvider = windowProvider; _context = context; _windowProvider.Load(); _ftc = new FrameTimeCalculator(this); _worldProvider = worldProvider; _worldRenderer = worldRenderer; Content.RootDirectory = nameof(Content); Window.Title = "UO-Studio"; Window.AllowUserResizing = true; Activated += WindowActivated; Deactivated += WindowDeactivated; _ = new GraphicsDeviceManager(this) { PreferredBackBufferWidth = graphicsSettings.Value.ResolutionWidth, PreferredBackBufferHeight = graphicsSettings.Value.ResolutionHeight, PreferMultiSampling = graphicsSettings.Value.IsMultiSamplingEnabled, GraphicsProfile = GraphicsProfile.HiDef, SynchronizeWithVerticalRetrace = graphicsSettings.Value.IsVsyncEnabled }; _camera = new Camera(graphicsSettings.Value.ResolutionWidth, graphicsSettings.Value.ResolutionHeight) { Mode = CameraMode.Perspective }; IsMouseVisible = true; IsFixedTimeStep = false; }