88 lines
3.3 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
}
|