Documentation for the Unity C# Library
Loading...
Searching...
No Matches
LoginController.cs
Go to the documentation of this file.
1using PixoVR.Apex;
2using PixoVR.Apex.XAPI;
3using PixoVR.Event;
4using System;
5using System.Collections;
6using System.Net.Http;
7using UnityEngine;
8
10{
11 public class LoginController : MonoBehaviour
12 {
13 [SerializeField] private GameObject _loginUIRoot;
14 [SerializeField] private LoginScreen _loginScreen;
15
16 private const int HUB_LOGIN_FALLBACK_TIMEOUT = 4;
17 private const string LOGIN_PLAYER_PREF = "login";
18 private const string PASSWORD_PLAYER_PREF = "password";
19 private const string REMEMBER_ME_PLAYER_PREF = "rememberMe";
21 private bool isRememberCredentials;
22 private bool isLoggedFromHub = false;
26 private void OnEnable()
27 {
28 _sceneLoader = GetComponent<SceneLoader>();
29 ApexSystem.Instance.OnPingFailed.AddListener(OnApexPingFailed);
30 ApexSystem.Instance.OnPingSuccess.AddListener(OnApexPingSucceeded);
31
32 ApexSystem.Ping();
34 //OnLoginButtonClicked("dberezniak@n-ix.com", "PixoSecrets!");
35 _loginScreen.LoginButtonClicked += OnLoginButtonClicked;
36 _loginScreen.RememberMeToggleValueChanged += OnRememberMeToggleValueChanged;
37 }
38
39 private void OnDisable()
40 {
41 ApexSystem.Instance.OnPingFailed.RemoveListener(OnApexPingFailed);
42 ApexSystem.Instance.OnPingSuccess.RemoveListener(OnApexPingSucceeded);
43
44 _loginScreen.LoginButtonClicked -= OnLoginButtonClicked;
45 _loginScreen.RememberMeToggleValueChanged -= OnRememberMeToggleValueChanged;
46 }
47
48 private void Start()
49 {
50 StatesService.SaveState(new ApexSessionState());
51 ApexSystem.Instance.OnModuleAccessSuccess.AddListener(OnLoginSuccess);
52 ApexSystem.Instance.OnLoginFailed.AddListener(OnLoginError);
53 ApexSystem.Instance.OnModuleAccessFailed.AddListener(OnLoginError);
55 if (LoginFromHub())
56 {
57 Debug.Log("HUB_APP: Logged in from Hub");
58 isLoggedFromHub = true;
59 return;
60 }
61
62 isLoggedFromHub = false;
63 Debug.Log("HUB_APP: Regular login");
66 {
68 }
69 }
70
71 public void PromoVideoFinished()
72 {
73 Debug.Log($"HUB_APP: Promo video finished. isLoggedFromHub {isLoggedFromHub}");
74 if (!isLoggedFromHub)
75 {
76 _loginUIRoot.SetActive(true);
77 }
78 else
79 {
80 StartCoroutine(FallbackFromHubLogin());
81 }
82 }
83
84 private void OnApexPingFailed(HttpResponseMessage info)
85 {
87 }
88
89 private void OnApexPingSucceeded(HttpResponseMessage info)
90 {
92 }
93
94 private void TryGetRememberedCredentials()
95 {
96 var login = PlayerPrefs.GetString(LOGIN_PLAYER_PREF, string.Empty);
97 var password = PlayerPrefs.GetString(PASSWORD_PLAYER_PREF, string.Empty);
98
99 Debug.Log($"SavedCredsTest::TryGetRememberedCredentials login {login} password {!string.IsNullOrEmpty(password)}");
101 if (string.IsNullOrEmpty(login) || string.IsNullOrEmpty(password)) return;
102
104 }
105
106 private void TryRestoreRememberMeState()
107 {
108 var rememberMe = PlayerPrefs.GetInt(REMEMBER_ME_PLAYER_PREF, -1);
109 isRememberCredentials = rememberMe == 1;
110 Debug.Log($"SavedCredsTest::TryRestoreRememberMeState rememberMe {rememberMe} isRememberCredentials {isRememberCredentials}");
113
114 private void OnRememberMeToggleValueChanged(bool isToggleOn)
115 {
116 isRememberCredentials = isToggleOn;
117 PlayerPrefs.SetInt(REMEMBER_ME_PLAYER_PREF, isRememberCredentials ? 1 : 0);
118 Debug.Log($"SavedCredsTest::OnRememberMeToggleValueChanged isRememberCredentials {isRememberCredentials}");
119 }
121 private void OnLoginButtonClicked(string login, string password)
122 {
123 Debug.Log($"SavedCredsTest::OnLoginButtonClicked isRememberCredentials {isRememberCredentials}");
124
126 {
127 PlayerPrefs.SetString(LOGIN_PLAYER_PREF, login);
128 PlayerPrefs.SetString(PASSWORD_PLAYER_PREF, password);
129
130 //for testing only, remove when remember me is fixed
131 var savedLogin = PlayerPrefs.GetString(LOGIN_PLAYER_PREF, string.Empty);
132 var savedPassword = PlayerPrefs.GetString(PASSWORD_PLAYER_PREF, string.Empty);
133 Debug.Log($"SavedCredsTest::OnLoginButtonClicked " +
134 $"savedLogin {savedLogin} savedPassword {!string.IsNullOrEmpty(savedPassword)}");
135 }
136 else
137 {
138 var rememberMe = PlayerPrefs.GetInt(REMEMBER_ME_PLAYER_PREF, -1);
139 Debug.Log($"SavedCredsTest::OnLoginButtonClicked deleted creds rememberMe {rememberMe}");
140 PlayerPrefs.DeleteKey(LOGIN_PLAYER_PREF);
141 PlayerPrefs.DeleteKey(PASSWORD_PLAYER_PREF);
142 }
143
144 ApexSystem.Login(login, password);
145 }
146
147 private void OnLoginSuccess(LoginResponseContent info)
148 {
149 Debug.Log($"OnLoginSuccess {info != null}");
150
151 var apexSessionState = StatesService.GetState<ApexSessionState>();
152 Debug.Log($"OnLoginSuccess apexSessionState {apexSessionState != null}");
154 apexSessionState.IsLoggedIn = true;
155 apexSessionState.Email = info?.Email;
156 apexSessionState.UserName = info?.First + " " + info?.Last;
157 apexSessionState.MinimumPassingScore = info != null ? info.MinimumPassingScore : 0;
158 apexSessionState.LoggedFromHub = isLoggedFromHub;
159 Debug.Log($"HUB_APP: apexSessionState.LoggedFromHub {apexSessionState.LoggedFromHub}");
160
161 StatesService.SaveState(apexSessionState);
162
164 }
165
166 private void OnLoginError(FailureResponse info)
167 {
168 Debug.Log("OnLoginError " + info.Message);
169
170 _loginScreen.ShowErrorMessage(info.Message);
171 }
173 private bool LoginFromHub()
174 {
176 {
177 Debug.Log($"HUB_APP: Hub App not installed");
178 return false;
180
181 string token = ApexSystem.Instance._GetAuthenticationToken();
182 Debug.Log($"HUB_APP: LoginFromHub token {token}");
183 if (!string.IsNullOrEmpty(token))
184 {
185 return ApexSystem.Instance._LoginWithToken(token);
186 }
187
188 return false;
189 }
190
191 private IEnumerator FallbackFromHubLogin()
192 {
193 Debug.Log($"HUB_APP: FallbackFromHubLogin started for {HUB_LOGIN_FALLBACK_TIMEOUT}");
194 yield return new WaitForSeconds(HUB_LOGIN_FALLBACK_TIMEOUT);
195 _loginUIRoot.SetActive(true);
196 Debug.Log($"HUB_APP: FallbackFromHubLogin finished after timeout, activating regular login UI");
198 }
199}
void LoadScene(SceneType sceneType)
Logic for saving and unloading states during project execution.
void ShowRememberedCredentials(string login, string password)
void SetOnlineMode(Mode mode)
void ShowErrorMessage(string message)
void SetRememberMe(bool isOn)
void OnApexPingSucceeded(HttpResponseMessage info)
LoginScreen _loginScreen
[SerializeField]
void OnRememberMeToggleValueChanged(bool isToggleOn)
void OnLoginSuccess(LoginResponseContent info)
void OnLoginButtonClicked(string login, string password)
void OnApexPingFailed(HttpResponseMessage info)
void OnLoginError(FailureResponse info)
GameObject _loginUIRoot
[SerializeField]