2023-08-21 10:58:17 -04:00
using System ;
2023-07-03 23:24:35 -04:00
using System.Collections.Generic ;
2023-08-21 10:58:17 -04:00
using System.IO ;
2023-07-03 23:24:35 -04:00
using System.Linq ;
2023-08-21 10:58:17 -04:00
using System.Threading.Tasks ;
2023-07-10 07:35:05 -04:00
using Luski.net.Enums ;
2023-07-03 23:24:35 -04:00
namespace Luski.net ;
public class API
{
2023-07-08 09:06:13 -04:00
public MainServer MainServer { get ; internal set ; }
internal List < PublicServer > InternalServers { get ; } = new ( ) ;
public IReadOnlyList < PublicServer > LoadedServers = > InternalServers . AsReadOnly ( ) ;
2023-07-03 23:24:35 -04:00
2023-08-21 10:58:17 -04:00
public async Task < PublicServer > GetPublicServer ( string Domain , string Version = "v1" , bool Secure = true )
2023-07-03 23:24:35 -04:00
{
2023-08-21 10:58:17 -04:00
DateTime dt = DateTime . UtcNow ;
Console . WriteLine ( "Connecting to public server '{0}' using API {1}." , Domain , Version ) ;
PublicServer s ;
try
2023-07-03 23:24:35 -04:00
{
2023-08-21 10:58:17 -04:00
IEnumerable < PublicServer > isl = InternalServers . Where ( a = > ( a . Domain = = Domain & & a . ApiVersion = = Version ) ) ;
if ( isl . Any ( ) ) return isl . First ( ) ;
s = new ( Domain , Version , Secure )
{
ServerType = ServerType . Public
} ;
}
catch ( Exception e )
{
Console . WriteLine ( "Failed to connect to public server '{0}' using API {1}." , Domain , Version ) ;
throw ;
}
Console . WriteLine ( "Connected to public server '{0}' using API {1} in {4}.\nServer Name: {2}\nServer Description: {3}" , Domain , Version , s . Name , s . Description , DateTime . UtcNow . Subtract ( dt ) . ToString ( "g" ) ) ;
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
{
}
2023-07-03 23:24:35 -04:00
InternalServers . Add ( s ) ;
return s ;
}
2023-07-08 09:06:13 -04:00
public MainServer GetMainServer ( string Domain , string Version = "v1" )
2023-07-03 23:24:35 -04:00
{
2023-08-21 10:58:17 -04:00
DateTime dt = DateTime . UtcNow ;
Console . WriteLine ( "Conecting to main server '{0}' using API {1}." , Domain , Version ) ;
2023-07-10 14:19:03 -04:00
MainServer = new ( Domain , Version )
2023-07-03 23:24:35 -04:00
{
2023-07-10 07:35:05 -04:00
ServerType = ServerType . Main
2023-07-03 23:24:35 -04:00
} ;
2023-08-21 10:58:17 -04:00
Console . WriteLine ( "Connected to main server '{0}' using API {1} in {2}." , Domain , Version , DateTime . UtcNow . Subtract ( dt ) . ToString ( "g" ) ) ;
2023-07-03 23:24:35 -04:00
return MainServer ;
}
}