473 lines
18 KiB
C#
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";
|
|
}
|
|
} |