Files
2026-05-28 15:23:36 +08:00

473 lines
18 KiB
C#

namespace ZooMatch
{
using System.Text;
using UnityEngine.Events;
using System.Collections;
using UnityEngine.Networking;
using System.Collections.Generic;
using Newtonsoft.Json;
using UnityEngine;
using System;
using DG.Tweening;
using Unity.VisualScripting;
public class NetworkKit
{
public static string CDNUrl;
//打点需要的值-----began----
public static string trace_id;
public static string channel_id;
public static long userId;
//打点需要的值-----end----
public static Dictionary<string, bool> statusDic = new Dictionary<string, bool>();
public static Dictionary<string, Dictionary<string, bool>> statusDic2 = new Dictionary<string, Dictionary<string, bool>>();
public static string GetCacheToken()
{
string token = null;
if (PlayerPrefsKit.HasKey(PrefsKeyConst.JarvisToken))
{
token = PlayerPrefsKit.ReadString(PrefsKeyConst.JarvisToken);
}
return token;
}
public static void SetCacheToken(string token)
{
PlayerPrefsKit.WriteString(PrefsKeyConst.JarvisToken, token);
}
private static IEnumerator PostInternal<T>(string url, object requestData, UnityAction<bool, T> onCompleted,
Dictionary<string, string> header = null)
{
var requestJson = SerializeUtil.ToJsonIndented(requestData);
var url2 = url;
#if ZooMatchRelease
url2 = Base64Kit.Encode(url);
requestJson = Base64Kit.Encode(requestJson);
#endif
var bytes = Encoding.UTF8.GetBytes(requestJson);
var url1 = NetworkManager.crazyUrl + url2;
var loginRequest = new UnityWebRequest(url1, UnityWebRequest.kHttpVerbPOST)
{
uploadHandler = new UploadHandlerRaw(bytes),
downloadHandler = new DownloadHandlerBuffer()
};
if (header != null)
{
foreach (var keyValuePair in header)
{
loginRequest.SetRequestHeader(keyValuePair.Key, keyValuePair.Value);
}
}
SetRequestContentType(loginRequest);
// Debug.Log($"request url1======= {url1}");
yield return loginRequest.SendWebRequest();
// Debug.Log($"requestData11111======={url1}=={requestJson}");
// Debug.Log($"requestData22222====={url1}==={JsonConvert.SerializeObject(loginRequest)}");
if (loginRequest.result is not UnityWebRequest.Result.Success)
{
onCompleted?.Invoke(false, default);
}
else
{
var receiveContent = loginRequest.downloadHandler.text;
#if ZooMatchRelease
if (!receiveContent.IsNullOrWhiteSpace())
{
receiveContent = receiveContent.Substring(0, receiveContent.Length - 1);
receiveContent = receiveContent.Substring(1);
receiveContent = Base64Kit.Decode(receiveContent,NetworkManager.DomainRelease);
}
#endif
var response = SerializeUtil.ToObject<ResponseData>(receiveContent);
#if UNITY_EDITOR
var respJson = JsonConvert.SerializeObject(response);
Debug.Log($"requestData====url==={url}==={url1}=={requestJson}");
Debug.Log($"response========={respJson}");
#endif
if (response?.code == 0)
{
var responseData = SerializeUtil.ToObject<T>(response.data.ToString());
onCompleted?.Invoke(true, responseData);
}
else
{
if (response.code == 1005)
{
ReLoginGetToken();
}
onCompleted?.Invoke(false, default);
}
}
loginRequest.Dispose();
}
public static void SetRequestContentType(UnityWebRequest request)
{
request.SetRequestHeader("Content-Type", "application/json;charset=utf-8");
}
public static void Post<T>(string url, object requestData, UnityAction<bool, T> onCompleted)
{
CrazyAsyKit.StartCoroutine(PostInternal(url, requestData, onCompleted));
}
public static void PostWithHeader<T>(string url, object requestData = null,
UnityAction<bool, T> onCompleted = null)
{
ReSetToken();
var headers = new Dictionary<string, string> { { "x-token", GetCacheToken() } };
CrazyAsyKit.StartCoroutine(PostInternal(url, requestData, onCompleted, headers));
}
public static void PostWithHeader<T>(string url, UnityAction<bool, T> onCompleted)
{
if (onCompleted != null)
{
PostWithHeader<T>(url, null, (isSuccess, obj) => { onCompleted.Invoke(isSuccess, obj); });
}
else
{
PostWithHeader<T>(url);
}
}
public static void PostWithHeader(string url, object requestData = null, UnityAction<bool> onCompleted = null)
{
if (onCompleted != null)
{
PostWithHeader<object>(url, requestData, (isSuccess, obj) => { onCompleted?.Invoke(isSuccess); });
}
else
{
PostWithHeader<object>(url, requestData);
}
}
public static void PostFunnelLogin(RespLoginFunnelData reqData = null)
{
if (statusDic.TryGetValue(reqData.type, out var status))
{
if (status)
{
return;
}
}
if (reqData.type == "bootstrap")
{
long timestamp = DateTime.Now.ToUniversalTime().Ticks - 621355968000000000;
trace_id = timestamp.ToString();
}
var requestData = new RespLoginFunnelData
{
uid = userId,
trace_id = trace_id,
device_id = SystemInfo.deviceUniqueIdentifier,
pack_name = NetworkManager.identifier,
version = Application.version,
channel = SuperApplication.Instance.attribution,
type = reqData.type,
payload = reqData.payload
};
statusDic.Add(reqData.type, true);
// Debug.Log($"PostFunnelLogin requestData1111========={reqData.type}");
Post<RespLoginFunnelData>("event/funnelLogin", requestData, (isSuccess, data) =>
{
// Debug.Log($"PostFunnelLogin responseData2222========={isSuccess}{reqData.type}");
});
}
public static void SendLogToServer(RespDebugData reqData)
{
Debug.Log("barry SendLogToServer ====" + GameHelper.GetLoginModel().debug_log);
if (!GameHelper.GetLoginModel().debug_log) return;
// 如果只需要日期部分,可以使用ToShortDateString()或ToString("yyyy-MM-dd")等进行格式化
System.DateTime currentDate = System.DateTime.Now;
var formattedDate = currentDate.ToString("yyyy_MM_dd_HH_mm");
var md5Str = MD5Kit.GetStringMD5(reqData.message + reqData.stacktrace);
if (!statusDic2.ContainsKey(formattedDate))
{
statusDic2.Add(formattedDate, new Dictionary<string, bool>());
}
if (!statusDic2[formattedDate].ContainsKey(md5Str))
{
statusDic2[formattedDate].Add(md5Str, false);
}
// Debug.Log($"SendLogToServer requestData========={formattedDate} \nmd5Str=== {md5Str}");
if (statusDic2[formattedDate][md5Str])
{
return;
}
var requestData = new RespDebugData
{
uid = userId,
device = SystemInfo.deviceModel,
os_ver = SystemInfo.operatingSystem,
network = GetNetworkType(),
device_id = SystemInfo.deviceUniqueIdentifier,
pack_name = NetworkManager.identifier,
version = Application.version,
level = reqData.level,
message = reqData.message,
stacktrace = reqData.stacktrace,
channel = SuperApplication.Instance.attribution,
};
statusDic2[formattedDate][md5Str] = true;
//Debug.Log($"SendLogToServer requestData1========={JsonConvert.SerializeObject(requestData)}");
Post<RespDebugData>("event/cliDebugLog", requestData, (isSuccess, data) =>
{
});
}
public static string GetNetworkType()
{
switch (Application.internetReachability)
{
case NetworkReachability.ReachableViaCarrierDataNetwork:
return NetworkType.mobile;
case NetworkReachability.ReachableViaLocalAreaNetwork:
return NetworkType.wifi;
case NetworkReachability.NotReachable:
return NetworkType.notConnected;
default:
return NetworkType.notConnected;
}
}
public static BuriedPointObject buriedPointObject = new BuriedPointObject();
/*
* 打点
*/
public static void BuriedPoint(string eventname, string eventproperty, int integer, bool enableModeSwitch = true)
{
if (enableModeSwitch)
{
if (eventname == BuriedPointEvent.Apple_AD_event || eventname == BuriedPointEvent.Apple_pay_event)
{
eventname = GameHelper.IsAdModelOfPay() ? BuriedPointEvent.Apple_AD_event : BuriedPointEvent.Apple_pay_event;
}
}
buriedPointObject.@event = eventname;
buriedPointObject.property = eventproperty;
buriedPointObject.n = integer;
PostWithHeader<BuriedPointObject>("/event/incrN", buriedPointObject, (isSuccess, obj) =>
{
// Debug.Log(isSuccess);
// Debug.Log(eventproperty);
//Debug.Log(JsonUtility.ToJson(obj));
});
}
private static bool isReqToken = false;
public static void ReSetToken()
{
if (isReqToken) return;
var nowTimes = GameHelper.GetNowTime();
var passtime = GameHelper.GetLoginModel().expires_at;
// Debug.Log($"ReSetToken nowTimes:{nowTimes} passtime:{passtime}");
if (passtime == 0 || passtime - nowTimes > 3600) return;
isReqToken = true;
var headers = new Dictionary<string, string> { { "x-token", GetCacheToken() } };
CrazyAsyKit.StartCoroutine(PostInternal<ResquestTokenData>("tokenRefresh", null, (isSuccess, tokenData) =>
{
if (isSuccess)
{
LoginModel loginModel = GameHelper.GetLoginModel();
loginModel.token = tokenData.token;
loginModel.expires_at = tokenData.expires_at;
SetCacheToken(tokenData.token);
}
isReqToken = false;
}, headers));
}
private static bool isReqToken1 = false;
public static void ReLoginGetToken()
{
if (isReqToken1) return;
var requestLoginData = new RequestLoginData
{
device_id = SystemInfo.deviceUniqueIdentifier,
pack_name = NetworkManager.identifier,
app_version = Application.version,
channel = SuperApplication.Instance.attribution,
sim = NetworkManager.haveSimCard
};
isReqToken1 = true;
Post<LoginModel>("login", requestLoginData, (isSuccess, loginData) =>
{
if (isSuccess)
{
LoginModel loginModel = GameHelper.GetLoginModel();
loginModel.token = loginData.token;
loginModel.expires_at = loginData.expires_at;
SetCacheToken(loginData.token);
}
isReqToken1 = false;
});
}
}
public class NetworkType
{
public static string mobile = "Mobile Data";
public static string wifi = "Wi-Fi";
public static string notConnected = "Not Connected";
}
public class BuriedPointObject
{
public string @event;
public string property;
public int n;
}
public class BuriedPointEvent
{
public static string play_event = "Number_of_people_play";
public static string play_property = "Number_of_people_playing";
public static string playing_event = "Playing_time";
public static string playing_property = "Room_type";
public static string ad_task = "ad_task";
public static string watch_ad_number = "watch_ad_number";
public static string finish_ad_number = "finish_ad_number";
public static string h5_event = "H5_task";
public static string h5_event_time = "H5_time";
public static string h5_event_numbers = "finish_H5_number";
public static string withdraw_behavior = "withdraw_behavior";
public static string withdraw_message = "withdraw_message";
public static string withdraw_cash1 = "withdraw_cash1";
public static string withdraw_cash2 = "withdraw_cash2";
public static string withdraw_cash3 = "withdraw_cash3";
public static string Hall_behavior = "Hall_behavior";
public static string open_hall_number = "open_hall_number";
//public static string open_hall_people = "open_hall_people";
public static string collect_fly_number = "collect_fly_number";
//public static string collect_fly_people = "collect_fly_people";
public static string fly_ct_number = "fly_ct_number";
//public static string fly_ct_people = "fly_ct_people";
public static string annular_finish_number = "annular_finish_number";
public static string annular_get_number = "annular_get_number";
public static string annular_ct_number = "annular_ct_number";
//public static string annular_ct_people = "annular_ct_people";
public static string video_behavior = "video_behavior";
public static string watch_ad_people = "watch_ad_people";
public static string watch_success_ad_people = "watch_success_ad_people";
public static string AdLoadCode = "ad_load_code_";
public static string ADShowCode = "ad_show_code_";
public static string video_type = "video_type";
public static string Rewarded_videos_trigger_number = "Rewarded_videos_trigger_number";
public static string Rewarded_videos_fill_number = "Rewarded_videos_fill_number";
public static string Rewarded_videos_dinish_number = "Rewarded_videos_dinish_number";
public static string Interstitial_videos_trigger_number = "Interstitial_videos_trigger_number";
public static string Interstitial_videos_fill_number = "Interstitial_videos_fill_number";
public static string Interstitial_videos_dinish_number = "Interstitial_videos_dinish_number";
public static string Apple_pay_event = "Pay_Event";
public static string Apple_AD_event = "AD_Event";
public static string AD_event = "AD";
public static string pack_show = "pack_show";
public static string pack_click = "pack_click";
public static string pack_open = "pack_open";
public static string pack_success = "pack_success";
public static string remove_ad_show = "remove_ad_show";
public static string remove_ad_click = "remove_ad_click";
public static string remove_ad_open = "remove_ad_open";
public static string remove_ad_success = "remove_ad_success";
public static string pass_show = "pass_show";
public static string pass_click = "pass_click";
public static string pass_open = "pass_open";
public static string pass_success = "pass_success";
public static string buy_one_show = "buy_one_show";
public static string buy_one_click = "buy_one_click";
public static string buy_one_open = "buy_one_open";
public static string buy_one_success = "buy_one_success";
public static string gold_show = "shop_show";
public static string gold_click_ad = "gold_click_ad";
public static string gold_click_1 = "gold_click_1";
public static string gold_click_2 = "gold_click_2";
public static string gold_click_3 = "gold_click_3";
public static string gold_click_4 = "gold_click_4";
public static string gold_open_1 = "gold_open_1";
public static string gold_open_2 = "gold_open_2";
public static string gold_open_3 = "gold_open_3";
public static string gold_open_4 = "gold_open_4";
public static string gold_success_1 = "gold_success_1";
public static string gold_success_2 = "gold_success_2";
public static string gold_success_3 = "gold_success_3";
public static string gold_success_4 = "gold_success_4";
public static string afterRewardAdShow = "afterRewardAdShow";
public static string afterRewardAdEnd = "afterRewardAdEnd";
public static string fail_show = "fail_show";
public static string fail_click = "fail_click";
public static string fail_buy_success = "fail_buy_success";
public static string three_days_gift_show = "three_days_gift_show";
public static string three_days_gift_click = "three_days_gift_click";
public static string three_days_gift_buy_success = "three_days_gift_buy_success";
public static string three_days_gift_open = "three_days_gift_open";
public static string three_day1_success = "three_day1_success";
public static string three_day2_success = "three_day2_success";
public static string three_day3_success = "three_day3_success";
public static string Three_days_gift_event = "Three_days_gift_event";
}
}