// ***********************************************************************
// Assembly : Game
// Author : Kimch
// Created : 2021-05-01
// Description :
// Last Modified By :
// Last Modified On :
// ***********************************************************************
//
//
// ***********************************************************************
#if UNITY_EDITOR || DEBUG_MY
#define TEST_SERVER
#endif
using F;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
namespace G
{
///
/// 服务器
///
public class ServerProxy : F.GameProxy
{
public class ServerTask
{
public string taskName;
public object taskData;
}
#region Field
private string uid
{
get => UserProxy.AccountID;
set => UserProxy.AccountID = value;
}
private string token
{
get => UserProxy.AccountToken;
set => UserProxy.AccountToken = value;
}
public string openId
{
get;
private set;
}
public static System.Action LoginSuccessEvent;
#endregion
#region Property
public bool isSdkLoginSuccess
{
get;
set;
}
public bool isLoginSuccess
{
get;
private set;
}
public int loginStatus
{
get;
private set;
}
public bool getUserInfoSuccess
{
get;
private set;
}
public int banStatus
{
get;
private set;
}
public string banMessage
{
get;
private set;
}
#endregion
#region Method
///
///
///
///
///
/// 通过游客方式登录 LOGIN_TYPE_VISITOR = 1
/// // 正常登陆 NormalLogin = 1,// 账号绑定 AccountBind = 2,// 切换账号 SwitchAccount = 3,
public void OnSDKLogin(string openId, string openToken, int loginType, int loginInvokeMode)
{
isLoginSuccess = false;
Login();
}
///
///
///
///
///
///
public void OnSDKLoginFail(int error, string errorMsg, int apiLoginType)
{
PostNotification(GlobalDefine.EVENT_SHOW_TOAST, "帐号登录失败,请重新登录");
}
///
///
///
///
private bool CheckLogin()
{
if (string.IsNullOrEmpty(KPlatform.Instance.openId))
{
PostNotification(GlobalDefine.EVENT_SHOW_TOAST, "帐号登录失败,请重新登录");
return false;
}
if (!isLoginSuccess)
{
PostNotification(GlobalDefine.EVENT_SHOW_TOAST, "帐号未登录,请检查网络");
return false;
}
return true;
}
///
///
///
public void Login()
{
// 临时登录
var dataTT = new Dictionary();
OnLoginSuccess(dataTT);
loginStatus = 1;
return;
loginStatus = 0;
_jsonData.Clear();
_jsonData.Add("device_id", KPlatform.Instance.deviceId);
#if !UNITY_EDITOR && SDK_WECHAT_WASM
if (!string.IsNullOrEmpty(KPlatform.Instance.openId))
_jsonData.Add("js_code", KPlatform.Instance.openId);
#else
_jsonData.Add("sdkid", KPlatform.Instance.openId);
if (!string.IsNullOrEmpty(KPlatform.Instance.openToken))
_jsonData.Add("token", KPlatform.Instance.openToken);
#endif
_jsonData.Add("channel", KPlatform.Instance.channel);
_jsonData.Add("sub_channel", KPlatform.Instance.subChanel);
_jsonData.Add("plat", KPlatform.Instance.platform);
_jsonData.Add("version", Application.version);
var body = F.Utils.ToJsonBytes(_jsonData);
StartCoroutine(Request("/api/user/auth", body, process));
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");
this.OnLoginSuccess(dataT);
loginStatus = 1;
}
else
{
string errorMsg = table.GetString("msg");
OnServerError(errorCode, errorMsg);
loginStatus = 2;
}
}
else
{
OnNetworkError(error, data?.ToString());
loginStatus = 3;
}
}
}
///
///
///
///
private void OnLoginSuccess(IDictionary data)
{
if (data != null)
{
uid = data.GetString("uid");
token = data.GetString("token");
UserProxy.UserId = data.GetString("userid");
this.openId = data.GetString("sdkid");
var timestamp = data.GetInt("timestamp");
AntiCheatProxy.Instance.SetServerTimestamp(timestamp);
Launch.SetServerTimestamp(timestamp);
this.isLoginSuccess = true;
banStatus = data.GetInt("ban_status");
if (banStatus != 0)
{
var banReason = data.GetString("ban_record");
var banTimestamp = data.GetInt("open_time");
banMessage = "封禁帐号\n" + UserProxy.UserId + "\n" + banReason + "\n封禁截止" + F.Utils.Time.ToDataTime(banTimestamp).ToLocalTime().ToString();
}
else
{
LoginSuccessEvent?.Invoke();
LoginSuccessEvent = null;
}
if (KPlatform.Instance.loginInvokeMode != 1)
ArchiveProxy.Instance.OnServerLogin(KPlatform.Instance.loginInvokeMode);
}
//StartCoroutine(ScheduleCO());
#if UNITY_EDITOR
StartCoroutine(TestCO());
#endif
}
IEnumerator ScheduleCO()
{
yield return new WaitForSeconds(1f);
KPlatform.Instance.GetUserNickName((error, message) =>
{
if (error == 0)
{
UpdateUserInfo(PlayerProxy.Instance.socialNickName, PlayerProxy.Instance.socialAvatarUrl);
}
});
yield return new WaitForSeconds(1f);
var inviteInfo = KPlatform.Instance.inviteInfo;
if (inviteInfo != null)
{
Invite(inviteInfo.userId, (error, message) =>
{
if (error != ErrorCode.NETWORK_ERROR)
KPlatform.Instance.inviteInfo = null;
});
}
}
IEnumerator TestCO()
{
yield return new WaitForSeconds(5f);
GetInviteCount(null);
yield return new WaitForSeconds(1f);
}
///
/// 获取用户信息
///
///
public void GetUserInfo(Callback3 callback)
{
if (!CheckLogin())
{
return;
}
var jsonData = GetCommonData();
jsonData.Add("nick", PlayerProxy.Instance.nickName);
jsonData.Add("avatar", PlayerProxy.Instance.headURL);
jsonData.Add("lv", PlayerProxy.Instance.grade);
jsonData.Add("bat_power", PlayerProxy.Instance.combatValue);
var body = F.Utils.ToJsonBytes(jsonData);
StartCoroutine(Request("/api/user/update_user", body, process));
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, "", null);
}
else
{
string errorMsg = table.GetString("msg");
OnServerError(errorCode, errorMsg);
callback?.Invoke(errorCode, errorMsg, null);
}
}
else
{
OnNetworkError(error, data?.ToString());
callback?.Invoke(error, data?.ToString(), null);
}
};
}
///
///
///
///
///
private void OnNetworkError(int errorCode, string errorMsg)
{
PostNotification(GlobalDefine.EVENT_SHOW_TOAST, errorMsg);
Debug.Log($"网络错误 {errorCode} {errorMsg}");
}
///
///
///
///
///
private void OnServerError(int errorCode, string errorMsg)
{
PostNotification(GlobalDefine.EVENT_SHOW_TOAST, errorMsg);
Debug.Log($"服务器错误 {errorCode} {errorMsg}");
}
///
///
///
///
///
public void UploadArchive(string archiveInfo, string archive, string archiveInfo2, string archive2, Callback2 callback)
{
if (!CheckLogin())
{
return;
}
var jsonData = GetCommonData();
var archives = new List