using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; using Luski.net.Enums; namespace Luski.net; public class API { public MainServer MainServer { get; internal set; } internal List InternalServers { get; } = new(); public IReadOnlyList LoadedServers => InternalServers.AsReadOnly(); public async Task GetPublicServer(string Domain, string Version = "v1", bool Secure = true) { PublicServer s; try { IEnumerable isl = InternalServers.Where(a => (a.Domain == Domain && a.ApiVersion == Version)); if (isl.Any()) return isl.First(); s = await PublicServer.GetServer(Domain, Version, Secure); } catch (Exception e) { Console.WriteLine("Failed to connect to public server '{0}' using API {1}. No alternate server was found.", Domain, Version); throw; } string? f = s.Storage.GetStorageDirectory(StorageDirectory.StorageInfo) + "token"; if (File.Exists(f)) { f = File.ReadAllText(f); } else f = null; try { if (f is not null) { bool b = await s.LoginViaToken(f); if (b) Console.WriteLine("Auto Login Successful"); else { s.Token = null; s.Error = null; } } } catch { } InternalServers.Add(s); return s; } public MainServer GetMainServer(string Domain, string Version = "v1") { DateTime dt = DateTime.UtcNow; Console.WriteLine("Conecting to main server '{0}' using API {1}.", Domain, Version); MainServer = new(Domain, Version) { ServerType = ServerType.Main }; Console.WriteLine("Connected to main server '{0}' using API {1} in {2}.", Domain, Version, DateTime.UtcNow.Subtract(dt).ToString("g")); return MainServer; } }