Files
BABA_YAGA/Assets/Scripts/UI/FirebaseService.cs
2026-06-09 22:46:32 +07:00

88 lines
3.3 KiB
C#

using System;
using System.Collections;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.Networking;
namespace Hallucinate.UI
{
public static class FirebaseService
{
private static string _baseUrl;
private static string BASE_URL
{
get
{
if (string.IsNullOrEmpty(_baseUrl))
{
// Nó sẽ tìm file tên "FirebaseConfig" trong bất kỳ folder "Resources" nào
var config = Resources.Load<FirebaseConfig>("FirebaseConfig");
if (config != null)
{
if (string.IsNullOrEmpty(config.baseUrl))
{
Debug.LogError("<color=red>[FirebaseService]</color> Base URL trong file FirebaseConfig đang trống!");
return null;
}
_baseUrl = config.baseUrl.TrimEnd('/');
}
else
{
Debug.LogError("<color=red>[FirebaseService]</color> Không tìm thấy file 'FirebaseConfig' trong folder Resources! " +
"Hãy đảm bảo bạn đã tạo file tại: Assets/.../Resources/FirebaseConfig");
return null;
}
}
return _baseUrl + "/users";
}
}
public static async Task<bool> IsUsernameTaken(string username)
{
string url = $"{BASE_URL}/{username}.json";
using (UnityWebRequest request = UnityWebRequest.Get(url))
{
var operation = request.SendWebRequest();
while (!operation.isDone) await Task.Yield();
if (request.result != UnityWebRequest.Result.Success) return false;
// Nếu kết quả trả về không phải "null" nghĩa là user đã tồn tại
return request.downloadHandler.text != "null";
}
}
public static async Task<Hallucinate.Game.PlayerEloData> GetPlayerData(string username)
{
string url = $"{BASE_URL}/{username}/elo.json";
using (UnityWebRequest request = UnityWebRequest.Get(url))
{
var operation = request.SendWebRequest();
while (!operation.isDone) await Task.Yield();
if (request.result != UnityWebRequest.Result.Success || request.downloadHandler.text == "null")
{
return Hallucinate.Game.PlayerEloData.Default;
}
return JsonUtility.FromJson<Hallucinate.Game.PlayerEloData>(request.downloadHandler.text);
}
}
public static async Task<bool> SavePlayerData(string username, Hallucinate.Game.PlayerEloData data)
{
string url = $"{BASE_URL}/{username}/elo.json";
string jsonData = JsonUtility.ToJson(data);
using (UnityWebRequest request = UnityWebRequest.Put(url, jsonData))
{
var operation = request.SendWebRequest();
while (!operation.isDone) await Task.Yield();
return request.result == UnityWebRequest.Result.Success;
}
}
}
}