using UnityEngine; using System; namespace Tech3C { /// /// Bridge component to receive callbacks from native Android/iOS SDK via Unity messaging /// This GameObject receives UnitySendMessage calls from native code /// public class Tech3CSDKBridge : MonoBehaviour { private static Tech3CSDKBridge instance; // Callback references private static IAuthCallback authCallback; private static ILogoutCallback logoutCallback; private static IUserInfoCallback userInfoCallback; #region Singleton public static Tech3CSDKBridge Instance { get { if (instance == null) { GameObject go = new GameObject("Tech3CSDKBridge"); instance = go.AddComponent(); DontDestroyOnLoad(go); } return instance; } } private void Awake() { if (instance == null) { instance = this; DontDestroyOnLoad(gameObject); Debug.Log("[Tech3C Bridge] Bridge initialized"); } else if (instance != this) { Destroy(gameObject); } } #endregion #region Set Callbacks /// /// Set the auth callback to be invoked when auth events occur /// public static void SetAuthCallback(IAuthCallback callback) { authCallback = callback; Debug.Log("[Tech3C Bridge] Auth callback set"); } /// /// Set the logout callback to be invoked when logout events occur /// public static void SetLogoutCallback(ILogoutCallback callback) { logoutCallback = callback; Debug.Log("[Tech3C Bridge] Logout callback set"); } /// /// Set the user info callback to be invoked when user info events occur /// public static void SetUserInfoCallback(IUserInfoCallback callback) { userInfoCallback = callback; Debug.Log("[Tech3C Bridge] User info callback set"); } #endregion #region Auth Callbacks /// /// Called from native code when authentication is successful /// Message format: "userId|password|accessToken|refreshToken|loginType|expiryTime" /// public void OnAuthSuccess(string message) { Debug.Log($"[Tech3C Bridge] OnAuthSuccess received: {message}"); if (authCallback == null) { Debug.LogWarning("[Tech3C Bridge] No auth callback registered"); return; } try { string[] parts = message.Split('|'); if (parts.Length >= 6) { string userId = parts[0]; string password = parts[1]; string accessToken = parts[2]; string refreshToken = parts[3]; LoginType loginType = (LoginType)Enum.Parse(typeof(LoginType), parts[4]); long expiryTime = long.Parse(parts[5]); Debug.Log($"[Tech3C Bridge] Parsed auth success: userId={userId}, loginType={loginType}"); authCallback.OnAuthSuccess(userId, password, accessToken, refreshToken, loginType, expiryTime); } else { Debug.LogError($"[Tech3C Bridge] Invalid message format: {message}"); } } catch (Exception e) { Debug.LogError($"[Tech3C Bridge] Error parsing auth success message: {e.Message}"); } } /// /// Called from native code when authentication is cancelled /// public void OnAuthCancelled(string message) { Debug.Log("[Tech3C Bridge] OnAuthCancelled received"); if (authCallback == null) { Debug.LogWarning("[Tech3C Bridge] No auth callback registered"); return; } authCallback.OnAuthCancelled(); } /// /// Called from native code when an authentication error occurs /// Message format: "errorCode|errorMessage" /// public void OnAuthError(string message) { Debug.Log($"[Tech3C Bridge] OnAuthError received: {message}"); if (authCallback == null) { Debug.LogWarning("[Tech3C Bridge] No auth callback registered"); return; } try { string[] parts = message.Split('|'); int errorCode = -1; string errorMessage = "Unknown error"; if (parts.Length >= 1) { int.TryParse(parts[0], out errorCode); } if (parts.Length >= 2) { errorMessage = parts[1]; } Debug.Log($"[Tech3C Bridge] Parsed auth error: code={errorCode}, message={errorMessage}"); authCallback.OnAuthError(errorCode, errorMessage); } catch (Exception e) { Debug.LogError($"[Tech3C Bridge] Error parsing auth error message: {e.Message}"); } } #endregion #region Logout Callbacks /// /// Called from native code when logout is successful /// public void OnLogoutSuccess(string message) { Debug.Log("[Tech3C Bridge] OnLogoutSuccess received"); if (logoutCallback == null) { Debug.LogWarning("[Tech3C Bridge] No logout callback registered"); return; } logoutCallback.OnLogoutSuccess(); } /// /// Called from native code when a logout error occurs /// Message format: "errorCode|errorMessage" /// public void OnLogoutError(string message) { Debug.Log($"[Tech3C Bridge] OnLogoutError received: {message}"); if (logoutCallback == null) { Debug.LogWarning("[Tech3C Bridge] No logout callback registered"); return; } try { string[] parts = message.Split('|'); int errorCode = -1; string errorMessage = "Unknown error"; if (parts.Length >= 1) { int.TryParse(parts[0], out errorCode); } if (parts.Length >= 2) { errorMessage = parts[1]; } logoutCallback.OnLogoutError(errorCode, errorMessage); } catch (Exception e) { Debug.LogError($"[Tech3C Bridge] Error parsing logout error message: {e.Message}"); } } #endregion #region User Info Callbacks /// /// Called from native code when user info is received /// Message format: "userId|username|email|phone" /// public void OnUserInfoReceived(string message) { Debug.Log($"[Tech3C Bridge] OnUserInfoReceived received: {message}"); if (userInfoCallback == null) { Debug.LogWarning("[Tech3C Bridge] No user info callback registered"); return; } try { string[] parts = message.Split('|'); if (parts.Length >= 4) { string userId = parts[0]; string username = parts[1]; string email = parts[2]; string phone = parts[3]; Debug.Log($"[Tech3C Bridge] Parsed user info: userId={userId}, username={username}"); userInfoCallback.OnUserInfoReceived(userId, username, email, phone); } else { Debug.LogError($"[Tech3C Bridge] Invalid message format: {message}"); } } catch (Exception e) { Debug.LogError($"[Tech3C Bridge] Error parsing user info message: {e.Message}"); } } /// /// Called from native code when user info retrieval is cancelled /// public void OnUserInfoCancelled(string message) { Debug.Log("[Tech3C Bridge] OnUserInfoCancelled received"); if (userInfoCallback == null) { Debug.LogWarning("[Tech3C Bridge] No user info callback registered"); return; } userInfoCallback.OnUserInfoCancelled(); } /// /// Called from native code when a user info error occurs /// Message format: "errorCode|errorMessage" /// public void OnUserInfoError(string message) { Debug.Log($"[Tech3C Bridge] OnUserInfoError received: {message}"); if (userInfoCallback == null) { Debug.LogWarning("[Tech3C Bridge] No user info callback registered"); return; } try { string[] parts = message.Split('|'); int errorCode = -1; string errorMessage = "Unknown error"; if (parts.Length >= 1) { int.TryParse(parts[0], out errorCode); } if (parts.Length >= 2) { errorMessage = parts[1]; } userInfoCallback.OnUserInfoError(errorCode, errorMessage); } catch (Exception e) { Debug.LogError($"[Tech3C Bridge] Error parsing user info error message: {e.Message}"); } } #endregion } }