using System.Collections; using System.Collections.Generic; using System.Threading.Tasks; using UnityEngine; namespace TcgEngine { /// /// Base class for all Authenticators, must be inherited /// public abstract class Authenticator { protected string user_id = null; protected string username = null; protected bool logged_in = false; protected bool inited = false; public virtual async Task Initialize() { inited = true; await Task.Yield(); //Do nothing } public virtual async Task Login(string username) { await Task.Yield(); //Do nothing return false; } public virtual async Task Login(string username, string token) { return await Login(username); //Some authenticator dont define this function } public virtual async Task RefreshLogin() { return await Login(username); //Same as Login if not defined } //Bypass login system by just assigning your own values, for testing public virtual void LoginTest(string username) { this.user_id = username; this.username = username; logged_in = true; } public virtual async Task Register(string username, string email, string token) { return await Login(username, token); //Some authenticator dont define this function } public virtual async Task LoadUserData() { await Task.Yield(); //Do nothing return null; } public virtual async Task SaveUserData() { await Task.Yield(); //Do nothing return false; } public virtual void Logout() { logged_in = false; user_id = null; username = null; } public virtual bool IsInited() { return inited; } public virtual bool IsConnected() { return IsSignedIn() && !IsExpired(); } public virtual bool IsSignedIn() { return logged_in; //IsSignedIn will still be true if the login expires } public virtual bool IsExpired() { return false; } public virtual string GetUserId() { return user_id; } public virtual string GetUsername() { return username; } public virtual int GetPermission() { return logged_in ? 1 : 0; } public virtual UserData GetUserData() { return null; } public virtual string GetError() { return ""; //Should return the latest error } public bool IsTest() { return NetworkData.Get().auth_type == AuthenticatorType.LocalSave; } public bool IsApi() { return NetworkData.Get().auth_type == AuthenticatorType.Api; } public string UserID{ get{ return GetUserId(); }} public string Username{ get { return GetUsername(); } } public UserData UserData{ get { return GetUserData(); } } public static Authenticator Create(AuthenticatorType type) { if (type == AuthenticatorType.Api) return new AuthenticatorApi(); else return new AuthenticatorLocal(); } public static Authenticator Get() { return TcgNetwork.Get().Auth; //Access authenticator } } public enum AuthenticatorType { LocalSave = 0, //Test Mode, Fake login for quick testing without the need to login each time Api = 10, //Actual online login } }