1333 lines
29 KiB
C#
1333 lines
29 KiB
C#
// ***********************************************************************
|
|
// Assembly : Game
|
|
// Author : Kimch
|
|
// Created : 2021-07-16
|
|
// Description :
|
|
// Last Modified By :
|
|
// Last Modified On :
|
|
// ***********************************************************************
|
|
// <copyright file= "KGMWindow" company="Kunpo"></copyright>
|
|
// <summary></summary>
|
|
// ***********************************************************************
|
|
//#define GM_TEST_SERVER
|
|
|
|
using F;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.Networking;
|
|
using UnityEngine.UI;
|
|
|
|
namespace G
|
|
{
|
|
/// <summary>
|
|
/// GM界面
|
|
/// </summary>
|
|
public class KGMWindow : KUIWidget
|
|
{
|
|
#if UNITY_EDITOR
|
|
|
|
static System.Tuple<ArchiveProxy.ArchiveInfo, IDictionary<string, object>> _CopyInfo;
|
|
|
|
class ArchiveWidget : KUIWidget
|
|
{
|
|
[KUIFlag]
|
|
Text _txtName;
|
|
[KUIFlag]
|
|
Text _txtContent;
|
|
[KUIFlag]
|
|
Button _btnLoad;
|
|
[KUIFlag]
|
|
Button _btnCopy;
|
|
|
|
public override void Refresh()
|
|
{
|
|
if (this.data is System.Tuple<ArchiveProxy.ArchiveInfo, IDictionary<string, object>> info)
|
|
{
|
|
var archive = info.Item2;
|
|
_txtName.text = archive.GetString("name");
|
|
_txtContent.text = archive.GetString("data");
|
|
}
|
|
}
|
|
|
|
private void OnLoadBtnClick()
|
|
{
|
|
if (this.data is System.Tuple<ArchiveProxy.ArchiveInfo, IDictionary<string, object>> info)
|
|
{
|
|
var archiveInfo = info.Item1;
|
|
var archive = info.Item2;
|
|
ArchiveProxy.Instance.LoadServerText(archiveInfo, archive.GetString("data"));
|
|
}
|
|
}
|
|
|
|
void OnCopyBtnClick()
|
|
{
|
|
if (this.data is System.Tuple<ArchiveProxy.ArchiveInfo, IDictionary<string, object>> info)
|
|
{
|
|
_CopyInfo = info;
|
|
}
|
|
}
|
|
|
|
private void Awake()
|
|
{
|
|
SetViewData();
|
|
_btnLoad.onClick.AddListener(this.OnLoadBtnClick);
|
|
_btnCopy.onClick.AddListener(this.OnCopyBtnClick);
|
|
}
|
|
}
|
|
|
|
class RankingWidget : KUIWidget
|
|
{
|
|
[KUIFlag]
|
|
Text _txtName;
|
|
[KUIFlag]
|
|
Text _txtScore;
|
|
[KUIFlag]
|
|
Button _btnQuery;
|
|
|
|
private string _uid;
|
|
public override void Refresh()
|
|
{
|
|
if (this.data is IDictionary<string, object> info)
|
|
{
|
|
_uid = info.GetString("uid");
|
|
_txtScore.text = info.GetString("score");
|
|
|
|
var rankingInfo = new RankingProxy.RankingInfo
|
|
{
|
|
userKey = info.GetString("user_key")
|
|
};
|
|
_txtName.text = rankingInfo.name;
|
|
}
|
|
else
|
|
_uid = null;
|
|
}
|
|
|
|
void OnQueryBtnClick()
|
|
{
|
|
if (!string.IsNullOrEmpty(_uid))
|
|
{
|
|
_Instance.SetAccount(_uid, true);
|
|
}
|
|
}
|
|
|
|
private void Awake()
|
|
{
|
|
SetViewData();
|
|
_btnQuery.onClick.AddListener(this.OnQueryBtnClick);
|
|
}
|
|
}
|
|
|
|
#region Field
|
|
|
|
#pragma warning disable CS0649 // 从未对字段赋值,字段将一直保持其默认值 null
|
|
|
|
[KUIFlag]
|
|
GameObject _goLogin;
|
|
[KUIFlag]
|
|
Button _btnGMLogin;
|
|
[KUIFlag]
|
|
InputField _inGMToken;
|
|
[KUIFlag]
|
|
Toggle _tgServer;
|
|
|
|
[KUIFlag]
|
|
GameObject _goManger;
|
|
|
|
[KUIFlag]
|
|
KUIToggleGroup _goPages;
|
|
|
|
#region Account
|
|
|
|
[KUIFlag]
|
|
GameObject _goAccount;
|
|
[KUIFlag]
|
|
InputField _inPlayer;
|
|
[KUIFlag]
|
|
Button _btnQuery;
|
|
[KUIFlag]
|
|
KUIList __listArchives;
|
|
[KUIFlag]
|
|
Text _txtStatus;
|
|
[KUIFlag]
|
|
Text _txtToken;
|
|
[KUIFlag]
|
|
Button _btnUpload;
|
|
[KUIFlag]
|
|
Button _btnUploadCopy;
|
|
|
|
[KUIFlag]
|
|
Button _btnClear;
|
|
[KUIFlag]
|
|
Button _btnBlock;
|
|
[KUIFlag]
|
|
Button _btnUnblock;
|
|
[KUIFlag]
|
|
Toggle _tgUID;
|
|
[KUIFlag]
|
|
Text _txtUserInfo;
|
|
[KUIFlag]
|
|
Button _btnGod;
|
|
[KUIFlag]
|
|
Button _btnUngod;
|
|
|
|
#endregion
|
|
|
|
#region Mail
|
|
|
|
[KUIFlag]
|
|
GameObject _goMail;
|
|
[KUIFlag]
|
|
InputField _inMailTitle;
|
|
[KUIFlag]
|
|
InputField _inMailContent;
|
|
[KUIFlag]
|
|
InputField _inMailRewards;
|
|
[KUIFlag]
|
|
InputField _inMailId;
|
|
[KUIFlag]
|
|
Button _btnMailSend;
|
|
|
|
#endregion
|
|
|
|
#region Ranking
|
|
|
|
[KUIFlag]
|
|
GameObject _goRanking;
|
|
[KUIFlag]
|
|
KUIList __listRanking;
|
|
[KUIFlag]
|
|
Button _btnPullRanking;
|
|
[KUIFlag]
|
|
Button _btnDelRanking;
|
|
[KUIFlag]
|
|
Dropdown _ddRankingId;
|
|
|
|
#endregion
|
|
|
|
#pragma warning restore CS0649 // 从未对字段赋值,字段将一直保持其默认值 null
|
|
|
|
private string _userInfo;
|
|
private bool _loginSuccess => !string.IsNullOrEmpty(gmToken);
|
|
|
|
private object _rankingData;
|
|
|
|
#endregion
|
|
|
|
#region Method
|
|
|
|
public override void Refresh()
|
|
{
|
|
_goLogin.SetActive(!_loginSuccess);
|
|
_goManger.SetActive(_loginSuccess);
|
|
}
|
|
|
|
void ShowLogin()
|
|
{
|
|
_inGMToken.text = gmToken;
|
|
_goLogin.SetActive(true);
|
|
_goManger.SetActive(false);
|
|
}
|
|
|
|
void SetAccount(string account, bool isUID)
|
|
{
|
|
_goPages.toggles[0].isOn = true;
|
|
_inPlayer.text = account;
|
|
_tgUID.isOn = isUID;
|
|
}
|
|
|
|
int GetRankId()
|
|
{
|
|
int rank_id = 0;
|
|
switch (_ddRankingId.value)
|
|
{
|
|
case 0:
|
|
rank_id = 1;
|
|
break;
|
|
case 1:
|
|
rank_id = 2;
|
|
break;
|
|
case 2:
|
|
rank_id = 3;
|
|
break;
|
|
case 3:
|
|
rank_id = 101;
|
|
break;
|
|
case 4:
|
|
rank_id = 102;
|
|
break;
|
|
case 5:
|
|
rank_id = 103;
|
|
break;
|
|
case 6:
|
|
rank_id = 105;
|
|
break;
|
|
case 7:
|
|
rank_id = 5;
|
|
break;
|
|
case 8:
|
|
rank_id = 201;
|
|
break;
|
|
case 9:
|
|
rank_id = 202;
|
|
break;
|
|
case 10:
|
|
rank_id = 203;
|
|
break;
|
|
case 11:
|
|
rank_id = 205;
|
|
break;
|
|
|
|
}
|
|
return rank_id;
|
|
}
|
|
|
|
void OnLoginBtnClick()
|
|
{
|
|
var token = _inGMToken.text;
|
|
if (!string.IsNullOrEmpty(token))
|
|
{
|
|
this.gmToken = token;
|
|
Refresh();
|
|
}
|
|
else
|
|
{
|
|
if (_tgServer.isOn)
|
|
Application.OpenURL("https://dev-cdn-shaoxia.lanfeitech.com/gm/dev/index.html");
|
|
else
|
|
Application.OpenURL("https://dev-cdn-shaoxia.lanfeitech.com/gm/prod/index.html");
|
|
Debug.Log($"输入GMToken {(_tgServer.isOn ? "测试服" : "正式服")}");
|
|
}
|
|
}
|
|
|
|
void OnQueryBtnClick()
|
|
{
|
|
var account = _inPlayer.text;
|
|
if (!string.IsNullOrEmpty(account))
|
|
{
|
|
QueryArchive(OnQueryArchive);
|
|
QueryBanInfo(OnQueryBanInfo);
|
|
_txtStatus.text = "查询存档";
|
|
}
|
|
}
|
|
|
|
void OnQueryArchive(int error, string message, object data)
|
|
{
|
|
if (error == 0)
|
|
{
|
|
if (data is IList<object> archives)
|
|
{
|
|
if (archives.Count > 0)
|
|
{
|
|
var archive0 = archives[0] as IDictionary<string, object>;
|
|
var archiveInfo = new ArchiveProxy.ArchiveInfo();
|
|
archiveInfo.FromString(archive0.GetString("data"));
|
|
}
|
|
|
|
ArchiveProxy.ArchiveInfo archiveInfo1 = null;
|
|
ArchiveProxy.ArchiveInfo archiveInfo2 = null;
|
|
IDictionary<string, object> archive1 = null;
|
|
IDictionary<string, object> archive2 = null;
|
|
|
|
for (int i = 0; i < archives.Count; i++)
|
|
{
|
|
var archiveI = archives[i] as IDictionary<string, object>;
|
|
switch (archiveI.GetString("name"))
|
|
{
|
|
case "archive_info":
|
|
archiveInfo1 = new ArchiveProxy.ArchiveInfo();
|
|
archiveInfo1.FromString(archiveI.GetString("data"));
|
|
string infoText =
|
|
$"名字:{archiveInfo1.playerName}\n" +
|
|
$"时间:{F.Utils.Time.ToDataTime(archiveInfo1.timestamp).ToLocalTime().ToString()}\n" +
|
|
$"等级:{archiveInfo1.playerGrade}\n" +
|
|
$"进度:{archiveInfo1.completedLevel}";
|
|
_txtToken.text = infoText;
|
|
break;
|
|
case "archive2_info":
|
|
archiveInfo2 = new ArchiveProxy.ArchiveInfo();
|
|
archiveInfo2.FromString(archiveI.GetString("data"));
|
|
break;
|
|
case "archive":
|
|
archive1 = archiveI;
|
|
break;
|
|
case "archive2":
|
|
archive2 = archiveI;
|
|
break;
|
|
case "user_info":
|
|
_userInfo = archiveI.GetString("data");
|
|
_txtUserInfo.text = _userInfo;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
__listArchives.Clear();
|
|
if (archiveInfo1 != null && archive1 != null)
|
|
{
|
|
__listArchives.GetItem().SetData(new System.Tuple<ArchiveProxy.ArchiveInfo, IDictionary<string, object>>(archiveInfo1, archive1));
|
|
}
|
|
if (archiveInfo2 != null && archive2 != null)
|
|
{
|
|
__listArchives.GetItem().SetData(new System.Tuple<ArchiveProxy.ArchiveInfo, IDictionary<string, object>>(archiveInfo2, archive2));
|
|
}
|
|
}
|
|
|
|
_txtStatus.text = "查询结束";
|
|
}
|
|
else
|
|
{
|
|
gmToken = "";
|
|
Refresh();
|
|
}
|
|
}
|
|
|
|
void OnQueryBanInfo(int error, string message)
|
|
{
|
|
_userInfo = message;
|
|
_txtUserInfo.text = _userInfo;
|
|
}
|
|
|
|
void OnUploadBtnClick()
|
|
{
|
|
var account = _inPlayer.text;
|
|
if (!string.IsNullOrEmpty(account))
|
|
{
|
|
UploadArchive((error, message) =>
|
|
{
|
|
if (error == 0)
|
|
{
|
|
_txtStatus.text = "上传存档成功";
|
|
}
|
|
else
|
|
{
|
|
_txtStatus.text = message;
|
|
}
|
|
});
|
|
_txtStatus.text = "上传存档";
|
|
}
|
|
}
|
|
|
|
void OnUploadCopyBtnClick()
|
|
{
|
|
var account = _inPlayer.text;
|
|
if (!string.IsNullOrEmpty(account))
|
|
{
|
|
UploadCopyArchive((error, message) =>
|
|
{
|
|
if (error == 0)
|
|
{
|
|
_txtStatus.text = "上传存档成功";
|
|
}
|
|
else
|
|
{
|
|
_txtStatus.text = message;
|
|
}
|
|
});
|
|
_txtStatus.text = "上传存档";
|
|
}
|
|
}
|
|
|
|
void OnBlockBtnClick()
|
|
{
|
|
var account = _inPlayer.text;
|
|
if (!string.IsNullOrEmpty(account))
|
|
{
|
|
BlockArchive((error, message) =>
|
|
{
|
|
if (error == 0)
|
|
{
|
|
_txtStatus.text = "封禁帐号成功";
|
|
}
|
|
else
|
|
{
|
|
_txtStatus.text = message;
|
|
}
|
|
});
|
|
_txtStatus.text = "封禁帐号";
|
|
}
|
|
}
|
|
|
|
void OnUnblockBtnClick()
|
|
{
|
|
var account = _inPlayer.text;
|
|
if (!string.IsNullOrEmpty(account))
|
|
{
|
|
UnblockArchive((error, message) =>
|
|
{
|
|
if (error == 0)
|
|
{
|
|
_txtStatus.text = "解禁帐号成功";
|
|
}
|
|
else
|
|
{
|
|
_txtStatus.text = message;
|
|
}
|
|
});
|
|
_txtStatus.text = "解禁帐号";
|
|
}
|
|
}
|
|
|
|
void OnClearBtnClick()
|
|
{
|
|
var account = _inPlayer.text;
|
|
if (!string.IsNullOrEmpty(account))
|
|
{
|
|
ClearArchive((int error, string message) =>
|
|
{
|
|
if (error == 0)
|
|
{
|
|
_txtStatus.text = "清除帐号成功";
|
|
}
|
|
else
|
|
{
|
|
_txtStatus.text = message;
|
|
}
|
|
});
|
|
|
|
_txtStatus.text = "清除帐号";
|
|
}
|
|
}
|
|
|
|
void OnGodRankBtnClick()
|
|
{
|
|
var account = _inPlayer.text;
|
|
if (!string.IsNullOrEmpty(account))
|
|
{
|
|
UploadGodState(false, (error, message) =>
|
|
{
|
|
if (error == 0)
|
|
{
|
|
_txtStatus.text = "加入封神榜成功";
|
|
}
|
|
else
|
|
{
|
|
_txtStatus.text = message;
|
|
}
|
|
});
|
|
_txtStatus.text = "加入封神榜";
|
|
}
|
|
|
|
}
|
|
|
|
void OnUngodBtnClick()
|
|
{
|
|
var account = _inPlayer.text;
|
|
if (!string.IsNullOrEmpty(account))
|
|
{
|
|
UploadGodState(true, (error, message) =>
|
|
{
|
|
if (error == 0)
|
|
{
|
|
_txtStatus.text = "解除封神榜成功";
|
|
}
|
|
else
|
|
{
|
|
_txtStatus.text = message;
|
|
}
|
|
});
|
|
_txtStatus.text = "解除封神榜";
|
|
}
|
|
}
|
|
|
|
void OnMailSendBtnClick()
|
|
{
|
|
var account = _inPlayer.text;
|
|
if (!string.IsNullOrEmpty(account))
|
|
{
|
|
if (string.IsNullOrEmpty(_inMailId.text))
|
|
{
|
|
SendMail(_inMailTitle.text, _inMailContent.text, _inMailRewards.text, OnSendMail);
|
|
}
|
|
else
|
|
{
|
|
int.TryParse(_inMailId.text, out int mailId);
|
|
var mailItem = ItemProxy.Instance.GetStaticItem<ItemMail>(mailId);
|
|
if (mailItem != null)
|
|
{
|
|
SendMail(mailItem.title, mailItem.content, mailItem.rewardText, OnSendMail);
|
|
}
|
|
}
|
|
_txtStatus.text = "发送邮件";
|
|
}
|
|
}
|
|
|
|
void OnSendMail(int error, string message)
|
|
{
|
|
if (error != 0)
|
|
{
|
|
Debug.Log(message);
|
|
}
|
|
}
|
|
|
|
void OnPullRankingBtnClick()
|
|
{
|
|
var rank_id = GetRankId();
|
|
if (rank_id > 0)
|
|
{
|
|
PullRanking(rank_id, OnPullRanking);
|
|
_txtStatus.text = $"拉取排行 {rank_id}";
|
|
}
|
|
}
|
|
|
|
void OnPullRanking(int error, string message, object data)
|
|
{
|
|
if (error == 0)
|
|
{
|
|
_rankingData = data;
|
|
IList<object> rankDataList = data as IList<object>;
|
|
__listRanking.Clear();
|
|
foreach (var rankData in rankDataList)
|
|
{
|
|
__listRanking.GetItem().SetData(rankData);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
_txtStatus.text = message;
|
|
}
|
|
}
|
|
|
|
private void OnDelRankingBtnClick()
|
|
{
|
|
var account = _inPlayer.text;
|
|
if (!string.IsNullOrEmpty(account))
|
|
{
|
|
var rank_id = GetRankId();
|
|
if (rank_id > 0)
|
|
{
|
|
DeleteRanking(rank_id, OnDelRanking);
|
|
_txtStatus.text = $"删除排行 {rank_id}";
|
|
}
|
|
}
|
|
}
|
|
|
|
private void OnDelRanking(int error, string message)
|
|
{
|
|
}
|
|
|
|
void OnPageSelected(int index)
|
|
{
|
|
if (index == 0)
|
|
{
|
|
_goAccount.SetActive(true);
|
|
_goMail.SetActive(false);
|
|
_goRanking.SetActive(false);
|
|
}
|
|
else if (index == 1)
|
|
{
|
|
_goAccount.SetActive(false);
|
|
_goMail.SetActive(true);
|
|
_goRanking.SetActive(false);
|
|
}
|
|
else if (index == 2)
|
|
{
|
|
_goAccount.SetActive(false);
|
|
_goMail.SetActive(false);
|
|
_goRanking.SetActive(true);
|
|
}
|
|
}
|
|
|
|
public void OnCloseBtnClick()
|
|
{
|
|
this.gameObject.SetActive(!this.gameObject.activeSelf);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Net
|
|
|
|
/// <summary>
|
|
/// 查询存档
|
|
/// </summary>
|
|
/// <param name="sdkID"></param>
|
|
/// <param name="callback"></param>
|
|
void QueryArchive(Callback3 callback)
|
|
{
|
|
var jsonData = GetCommonData();
|
|
|
|
jsonData.Add("tb_names", new string[] { "user_info", "archive_info", "archive", "archive2" });
|
|
|
|
var body = F.Utils.ToJsonText(jsonData);
|
|
|
|
void process(int error, object data)
|
|
{
|
|
if (error == 0)
|
|
{
|
|
var table = F.Utils.ToJsonTable((byte[])data);
|
|
int errorCode = table.GetInt("code");
|
|
if (errorCode == 0)
|
|
{
|
|
var dataT = table.GetDictionary("data");
|
|
var archives = dataT.GetList("archives");
|
|
callback?.Invoke(0, "", archives);
|
|
}
|
|
else
|
|
{
|
|
string errorMsg = table.GetString("msg");
|
|
callback?.Invoke(errorCode, errorMsg, null);
|
|
OnServerError(errorCode, errorMsg);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
callback?.Invoke(error, data?.ToString(), null);
|
|
OnNetworkError(error, data?.ToString());
|
|
}
|
|
};
|
|
|
|
StartCoroutine(Request("/gm/gm/get_archive", body, process));
|
|
}
|
|
|
|
/// <summary>
|
|
/// 更新存档
|
|
/// </summary>
|
|
/// <param name="showToast"></param>
|
|
/// <param name="callback"></param>
|
|
void UploadArchive(Callback2 callback = null)
|
|
{
|
|
var jsonData = GetCommonData();
|
|
|
|
string mainData = ArchiveProxy.Instance.GetUploadText();
|
|
string infoData = ArchiveProxy.Instance.GetUploadInfo();
|
|
//
|
|
jsonData.Add("archives", new List<object>
|
|
{
|
|
new Dictionary<string, object>
|
|
{
|
|
{ "name", "archive" },
|
|
{ "data",mainData}
|
|
},
|
|
new Dictionary<string, object>
|
|
{
|
|
{ "name", "archive_info" },
|
|
{ "data",infoData}
|
|
}
|
|
});
|
|
|
|
var body = F.Utils.ToJsonText(jsonData);
|
|
|
|
void process(int error, object data)
|
|
{
|
|
if (error == 0)
|
|
{
|
|
var table = F.Utils.ToJsonTable((byte[])data);
|
|
int errorCode = table.GetInt("code");
|
|
if (errorCode == 0)
|
|
{
|
|
Debug.Log("上传存档");
|
|
callback?.Invoke(0, null);
|
|
}
|
|
else
|
|
{
|
|
string errorMsg = table.GetString("msg");
|
|
callback?.Invoke(errorCode, errorMsg);
|
|
OnServerError(errorCode, errorMsg);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
callback?.Invoke(error, data?.ToString());
|
|
OnNetworkError(error, data?.ToString());
|
|
}
|
|
}
|
|
|
|
StartCoroutine(Request("/gm/gm/update_archive", body, process));
|
|
}
|
|
|
|
void UploadCopyArchive(Callback2 callback = null)
|
|
{
|
|
if (_CopyInfo == null)
|
|
return;
|
|
var jsonData = GetCommonData();
|
|
|
|
string mainData = _CopyInfo.Item2.GetString("data");// ArchiveProxy.Instance.GetUploadText();
|
|
string infoData = _CopyInfo.Item1.ToString();
|
|
//
|
|
jsonData.Add("archives", new List<object>
|
|
{
|
|
new Dictionary<string, object>
|
|
{
|
|
{ "name", "archive" },
|
|
{ "data",mainData}
|
|
},
|
|
new Dictionary<string, object>
|
|
{
|
|
{ "name", "archive_info" },
|
|
{ "data",infoData}
|
|
}
|
|
});
|
|
|
|
var body = F.Utils.ToJsonText(jsonData);
|
|
|
|
void process(int error, object data)
|
|
{
|
|
if (error == 0)
|
|
{
|
|
var table = F.Utils.ToJsonTable((byte[])data);
|
|
int errorCode = table.GetInt("code");
|
|
if (errorCode == 0)
|
|
{
|
|
Debug.Log("上传存档");
|
|
callback?.Invoke(0, null);
|
|
}
|
|
else
|
|
{
|
|
string errorMsg = table.GetString("msg");
|
|
callback?.Invoke(errorCode, errorMsg);
|
|
OnServerError(errorCode, errorMsg);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
callback?.Invoke(error, data?.ToString());
|
|
OnNetworkError(error, data?.ToString());
|
|
}
|
|
}
|
|
|
|
StartCoroutine(Request("/gm/gm/update_archive", body, process));
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="clear"></param>
|
|
/// <param name="callback"></param>
|
|
void UploadGodState(bool clear, Callback2 callback = null)
|
|
{
|
|
var jsonData = GetCommonData();
|
|
|
|
string infoData = clear ? "" : "{\"god_rank\":true}";
|
|
//
|
|
jsonData.Add("archives", new List<object>
|
|
{
|
|
new Dictionary<string, object>
|
|
{
|
|
{ "name", "user_info" },
|
|
{ "data",infoData}
|
|
},
|
|
});
|
|
|
|
var body = F.Utils.ToJsonText(jsonData);
|
|
|
|
void process(int error, object data)
|
|
{
|
|
if (error == 0)
|
|
{
|
|
var table = F.Utils.ToJsonTable((byte[])data);
|
|
int errorCode = table.GetInt("code");
|
|
if (errorCode == 0)
|
|
{
|
|
Debug.Log("上传存档");
|
|
callback?.Invoke(0, null);
|
|
}
|
|
else
|
|
{
|
|
string errorMsg = table.GetString("msg");
|
|
callback?.Invoke(errorCode, errorMsg);
|
|
OnServerError(errorCode, errorMsg);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
callback?.Invoke(error, data?.ToString());
|
|
OnNetworkError(error, data?.ToString());
|
|
}
|
|
}
|
|
|
|
StartCoroutine(Request("/gm/gm/update_archive", body, process));
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="callback"></param>
|
|
void ClearArchive(Callback2 callback = null)
|
|
{
|
|
var jsonData = GetCommonData();
|
|
|
|
var archiveInfo = new ArchiveProxy.ArchiveInfo();
|
|
|
|
string infoData = archiveInfo.ToString();
|
|
//
|
|
jsonData.Add("archives", new List<object>
|
|
{
|
|
new Dictionary<string, object>
|
|
{
|
|
{ "name", "user_info" },
|
|
{ "data",""}
|
|
},
|
|
new Dictionary<string, object>
|
|
{
|
|
{ "name", "archive" },
|
|
{ "data",""}
|
|
},
|
|
new Dictionary<string, object>
|
|
{
|
|
{ "name", "archive_info" },
|
|
{ "data",infoData}
|
|
}
|
|
});
|
|
|
|
var body = F.Utils.ToJsonText(jsonData);
|
|
|
|
void process(int error, object data)
|
|
{
|
|
if (error == 0)
|
|
{
|
|
var table = F.Utils.ToJsonTable((byte[])data);
|
|
int errorCode = table.GetInt("code");
|
|
if (errorCode == 0)
|
|
{
|
|
//Debug.Log("清除存档");
|
|
callback?.Invoke(0, null);
|
|
}
|
|
else
|
|
{
|
|
string errorMsg = table.GetString("msg");
|
|
callback?.Invoke(errorCode, errorMsg);
|
|
OnServerError(errorCode, errorMsg);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
callback?.Invoke(error, data?.ToString());
|
|
OnNetworkError(error, data?.ToString());
|
|
}
|
|
}
|
|
|
|
StartCoroutine(Request("/gm/gm/update_archive", body, process));
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="callback"></param>
|
|
void QueryBanInfo(Callback2 callback = null)
|
|
{
|
|
var jsonData = GetCommonData();
|
|
//
|
|
var body = F.Utils.ToJsonText(jsonData);
|
|
|
|
void process(int error, object data)
|
|
{
|
|
if (error == 0)
|
|
{
|
|
var table = F.Utils.ToJsonTable((byte[])data);
|
|
int errorCode = table.GetInt("code");
|
|
if (errorCode == 0)
|
|
{
|
|
var ban_status = table.GetInt("ban_status") == 0 ? "正常" : "封号";
|
|
var ban_result = table.GetString("record");
|
|
var ban_open_time = table.GetInt("open_time");
|
|
var ban_count = table.GetInt("ban_count");
|
|
|
|
var result = $"status:{ban_status} time:{F.Utils.Time.ToDataTime(ban_open_time).ToShortDateString()} result:{ban_result}";
|
|
callback?.Invoke(0, result);
|
|
|
|
}
|
|
else
|
|
{
|
|
string errorMsg = table.GetString("msg");
|
|
callback?.Invoke(errorCode, errorMsg);
|
|
OnServerError(errorCode, errorMsg);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
callback?.Invoke(error, data?.ToString());
|
|
OnNetworkError(error, data?.ToString());
|
|
}
|
|
}
|
|
|
|
StartCoroutine(Request("/gm/gm/query_ban", body, process));
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="callback"></param>
|
|
void BlockArchive(Callback2 callback = null)
|
|
{
|
|
var jsonData = GetCommonData();
|
|
jsonData.Add("record", "当前账号存在异常,若有疑问请联系官方 qq群:923503162");
|
|
jsonData.Add("open_time", 1672506061);
|
|
|
|
_userInfo = "{\"ban\":1672506061,\"ban_text\":\"当前账号存在异常,若有疑问请联系官方 qq群:923503162\"}";
|
|
//
|
|
var body = F.Utils.ToJsonText(jsonData);
|
|
|
|
void process(int error, object data)
|
|
{
|
|
if (error == 0)
|
|
{
|
|
var table = F.Utils.ToJsonTable((byte[])data);
|
|
int errorCode = table.GetInt("code");
|
|
if (errorCode == 0)
|
|
{
|
|
Debug.Log("封禁帐号");
|
|
callback?.Invoke(0, null);
|
|
}
|
|
else
|
|
{
|
|
string errorMsg = table.GetString("msg");
|
|
callback?.Invoke(errorCode, errorMsg);
|
|
OnServerError(errorCode, errorMsg);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
callback?.Invoke(error, data?.ToString());
|
|
OnNetworkError(error, data?.ToString());
|
|
}
|
|
}
|
|
|
|
StartCoroutine(Request("/gm/gm/ban", body, process));
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="ban"></param>
|
|
/// <param name="callback"></param>
|
|
void UnblockArchive(Callback2 callback = null)
|
|
{
|
|
var jsonData = GetCommonData();
|
|
|
|
_userInfo = "";
|
|
//
|
|
var body = F.Utils.ToJsonText(jsonData);
|
|
|
|
void process(int error, object data)
|
|
{
|
|
if (error == 0)
|
|
{
|
|
var table = F.Utils.ToJsonTable((byte[])data);
|
|
int errorCode = table.GetInt("code");
|
|
if (errorCode == 0)
|
|
{
|
|
Debug.Log("解禁帐号");
|
|
callback?.Invoke(0, null);
|
|
}
|
|
else
|
|
{
|
|
string errorMsg = table.GetString("msg");
|
|
callback?.Invoke(errorCode, errorMsg);
|
|
OnServerError(errorCode, errorMsg);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
callback?.Invoke(error, data?.ToString());
|
|
OnNetworkError(error, data?.ToString());
|
|
}
|
|
}
|
|
|
|
StartCoroutine(Request("/gm/gm/relieve_ban", body, process));
|
|
}
|
|
|
|
/// <summary>
|
|
/// 查询存档
|
|
/// </summary>
|
|
/// <param name="account"></param>
|
|
/// <param name="callback"></param>
|
|
void SendMail(string title, string content, string rewards, Callback2 callback)
|
|
{
|
|
var jsonData = GetCommonData();
|
|
|
|
jsonData.Add("title", title);
|
|
jsonData.Add("content", content);
|
|
jsonData.Add("rewards", rewards);
|
|
|
|
var body = F.Utils.ToJsonText(jsonData);
|
|
|
|
void process(int error, object data)
|
|
{
|
|
if (error == 0)
|
|
{
|
|
var table = F.Utils.ToJsonTable((byte[])data);
|
|
int errorCode = table.GetInt("code");
|
|
if (errorCode == 0)
|
|
{
|
|
callback?.Invoke(0, "");
|
|
}
|
|
else
|
|
{
|
|
string errorMsg = table.GetString("msg");
|
|
callback?.Invoke(errorCode, errorMsg);
|
|
OnServerError(errorCode, errorMsg);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
callback?.Invoke(error, data?.ToString());
|
|
OnNetworkError(error, data?.ToString());
|
|
}
|
|
};
|
|
|
|
StartCoroutine(Request("/gm/gm/send_mail", body, process));
|
|
}
|
|
|
|
/// <summary>
|
|
/// uid string user_key string score
|
|
/// </summary>
|
|
/// <param name="rank_id"></param>
|
|
/// <param name="callback"></param>
|
|
void PullRanking(int rank_id, Callback3 callback)
|
|
{
|
|
var jsonData = GetCommonData();
|
|
jsonData.Add("rank_id", rank_id);
|
|
|
|
var body = F.Utils.ToJsonText(jsonData);
|
|
void process(int error, object data)
|
|
{
|
|
if (error == 0)
|
|
{
|
|
var table = F.Utils.ToJsonTable((byte[])data);
|
|
int errorCode = table.GetInt("code");
|
|
if (errorCode == 0)
|
|
{
|
|
var dataT = table.GetDictionary("data");
|
|
var rankList = dataT.GetList("list");
|
|
callback?.Invoke(0, "", rankList);
|
|
}
|
|
else
|
|
{
|
|
string errorMsg = table.GetString("msg");
|
|
callback?.Invoke(errorCode, errorMsg, null);
|
|
OnServerError(errorCode, errorMsg);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
callback?.Invoke(error, data?.ToString(), null);
|
|
OnNetworkError(error, data?.ToString());
|
|
}
|
|
};
|
|
|
|
StartCoroutine(Request("/gm/gm/load_rank", body, process));
|
|
}
|
|
|
|
void UpdateRanking(int rank_id, Callback2 callback)
|
|
{
|
|
var jsonData = GetCommonData();
|
|
jsonData.Add("rank_id", rank_id);
|
|
|
|
var body = F.Utils.ToJsonText(jsonData);
|
|
void process(int error, object data)
|
|
{
|
|
if (error == 0)
|
|
{
|
|
var table = F.Utils.ToJsonTable((byte[])data);
|
|
int errorCode = table.GetInt("code");
|
|
if (errorCode == 0)
|
|
{
|
|
callback?.Invoke(0, "");
|
|
}
|
|
else
|
|
{
|
|
string errorMsg = table.GetString("msg");
|
|
callback?.Invoke(errorCode, errorMsg);
|
|
OnServerError(errorCode, errorMsg);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
callback?.Invoke(error, data?.ToString());
|
|
OnNetworkError(error, data?.ToString());
|
|
}
|
|
};
|
|
|
|
StartCoroutine(Request("/gm/gm/del_rank", body, process));
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="rank_id"></param>
|
|
/// <param name="callback"></param>
|
|
void DeleteRanking(int rank_id, Callback2 callback)
|
|
{
|
|
var jsonData = GetCommonData();
|
|
jsonData.Add("rank_id", rank_id);
|
|
|
|
var body = F.Utils.ToJsonText(jsonData);
|
|
void process(int error, object data)
|
|
{
|
|
if (error == 0)
|
|
{
|
|
var table = F.Utils.ToJsonTable((byte[])data);
|
|
int errorCode = table.GetInt("code");
|
|
if (errorCode == 0)
|
|
{
|
|
callback?.Invoke(0, "");
|
|
}
|
|
else
|
|
{
|
|
string errorMsg = table.GetString("msg");
|
|
callback?.Invoke(errorCode, errorMsg);
|
|
OnServerError(errorCode, errorMsg);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
callback?.Invoke(error, data?.ToString());
|
|
OnNetworkError(error, data?.ToString());
|
|
}
|
|
};
|
|
|
|
StartCoroutine(Request("/gm/gm/del_rank", body, process));
|
|
}
|
|
|
|
private void OnNetworkError(int error, string errorMsg)
|
|
{
|
|
}
|
|
|
|
private void OnServerError(int error, string errorMsg)
|
|
{
|
|
Debug.Log("server error " + error + " " + errorMsg);
|
|
if (error == 15002)
|
|
{
|
|
gmToken = "";
|
|
ShowLogin();
|
|
}
|
|
}
|
|
|
|
private string gmToken
|
|
{
|
|
get { return UnityEditor.EditorPrefs.GetString("gm_token"); }
|
|
set
|
|
{
|
|
UnityEditor.EditorPrefs.SetString("gm_token", value);
|
|
}
|
|
}
|
|
|
|
private readonly Dictionary<string, object> _jsonData = new Dictionary<string, object>();
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
private Dictionary<string, object> GetCommonData()
|
|
{
|
|
_jsonData.Clear();
|
|
|
|
var account = _inPlayer.text;
|
|
if (!string.IsNullOrEmpty(account))
|
|
{
|
|
if (_tgUID.isOn)
|
|
_jsonData.Add("uid", account);
|
|
else
|
|
_jsonData.Add("userid", account);
|
|
}
|
|
|
|
return _jsonData;
|
|
}
|
|
|
|
public static string GetSign(string body, string timestamp, bool testServer)
|
|
{
|
|
string raw_str;
|
|
if (testServer)
|
|
raw_str = F.Utils.Text.Format("appid=KHQiAUtB&body={0}&signkey=3c3c3aa984ccbbc791655fbf9f8e0fb1&time={1}&", body, timestamp);
|
|
else
|
|
raw_str = F.Utils.Text.Format("appid=KHQiAUtB&body={0}&signkey=8adb871756f5bdea6b3d57547fdec8d9&time={1}&", body, timestamp);
|
|
|
|
return F.Utils.Security.GetMd5Hex(raw_str);
|
|
}
|
|
|
|
IEnumerator Request(string api, string body, System.Action<int, object> callback)
|
|
{
|
|
string url = "";
|
|
if (_tgServer.isOn)
|
|
url = "https://dev-shaoxia.lanfeitech.com" + api;
|
|
else
|
|
url = "https://prod-shaoxia.lanfeitech.com" + api;
|
|
|
|
var webRequest = new UnityWebRequest(url, UnityWebRequest.kHttpVerbPOST)
|
|
{
|
|
uploadHandler = new UploadHandlerRaw(System.Text.Encoding.UTF8.GetBytes(body))
|
|
{
|
|
contentType = "application/json"
|
|
},
|
|
downloadHandler = new DownloadHandlerBuffer()
|
|
};
|
|
|
|
var timeStr = Launch.Timestamp.ToString();
|
|
webRequest.SetRequestHeader("sign", GetSign(body, timeStr, _tgServer.isOn));
|
|
webRequest.SetRequestHeader("time", timeStr);
|
|
if (!string.IsNullOrEmpty(gmToken))
|
|
{
|
|
webRequest.SetRequestHeader("authorization", gmToken);
|
|
}
|
|
#if UNITY_EDITOR
|
|
Debug.Log(body);
|
|
#endif
|
|
yield return webRequest.SendWebRequest();
|
|
if (webRequest.isNetworkError || webRequest.isHttpError)
|
|
{
|
|
Debug.Log(webRequest.error);
|
|
callback(1, webRequest.error);
|
|
}
|
|
else
|
|
{
|
|
#if UNITY_EDITOR
|
|
Debug.Log(webRequest.downloadHandler.text);
|
|
#endif
|
|
callback(0, webRequest.downloadHandler.data);
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Unity
|
|
|
|
static KGMWindow _Instance;
|
|
|
|
// Use this for initialization
|
|
private void Awake()
|
|
{
|
|
_Instance = this;
|
|
|
|
SetViewData();
|
|
_goPages.onToggleSelected.AddListener(this.OnPageSelected);
|
|
|
|
_btnGMLogin.onClick.AddListener(this.OnLoginBtnClick);
|
|
_btnQuery.onClick.AddListener(this.OnQueryBtnClick);
|
|
_btnUpload.onClick.AddListener(this.OnUploadBtnClick);
|
|
_btnUploadCopy.onClick.AddListener(this.OnUploadCopyBtnClick);
|
|
|
|
_btnBlock.onClick.AddListener(this.OnBlockBtnClick);
|
|
_btnUnblock.onClick.AddListener(this.OnUnblockBtnClick);
|
|
_btnClear.onClick.AddListener(this.OnClearBtnClick);
|
|
|
|
_btnDelRanking.onClick.AddListener(this.OnDelRankingBtnClick);
|
|
_btnPullRanking.onClick.AddListener(this.OnPullRankingBtnClick);
|
|
|
|
_btnMailSend.onClick.AddListener(this.OnMailSendBtnClick);
|
|
|
|
_btnGod.onClick.AddListener(this.OnGodRankBtnClick);
|
|
_btnUngod.onClick.AddListener(this.OnUngodBtnClick);
|
|
|
|
__listArchives.AddTemplate<ArchiveWidget>(true);
|
|
__listRanking.AddTemplate<RankingWidget>(true);
|
|
|
|
_inGMToken.text = this.gmToken;
|
|
}
|
|
|
|
private void OnEnable()
|
|
{
|
|
Refresh();
|
|
}
|
|
|
|
// Update is called once per frame
|
|
private void Update()
|
|
{
|
|
}
|
|
|
|
#endregion
|
|
#endif
|
|
}
|
|
}
|