Files
JJBB/Assets/Project/Script/SDK/SdkControl.cs

331 lines
8.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Collections.Generic;
using Games.Events;
using GCGame.Table;
using UnityEngine;
using XLua;
/// <summary>sdk管理器</summary>
[LuaCallCSharp]
public class SdkControl : MonoBehaviour
{
private const string _sdkControlName = "SdkControl";
//属性
/// <summary>唯一实例</summary>
private static SdkControl _instance;
/// <summary>sdk的接口元件</summary>
private SdkBase _sdkItem;
public LoginData.ServerListData currentServerData { get; private set; }
/// <summary>
/// 表格版本
/// </summary>
public string TableVariant
{
get { return _sdkItem.tableVariant; }
}
public bool useGm
{
get { return _sdkItem.useGm; }
}
public static SdkControl instance
{
get
{
if (_instance == null && !appQuit)
{
var go = new GameObject(_sdkControlName);
DontDestroyOnLoad(go);
_instance = go.AddComponent<SdkControl>();
// 不要试图改这个为var会判定成SDKForAndroid导致赋值SDKBase编译不通过。
// ReSharper disable once SuggestVarOrType_SimpleTypes
// ReSharper disable once IdentifierTypo
SdkBase sdkItem = //new SdkEmpty();
#if UNITY_EDITOR
new SdkEditor();
#elif UNITY_ANDROID
SdkAndroidBase.CreateSdkLink();
#elif UNITY_IOS || UNITY_IPHONE
SdkIosBase.CreateSdkLink();
#else
new SdkEmpty();
#endif
// ReSharper disable once ConditionIsAlwaysTrueOrFalse
if (sdkItem == null)
{
// ReSharper disable once HeuristicUnreachableCode
sdkItem = new SdkEmpty();
Debug.LogError("SdkItem fell to SdkEmpty!");
}
// ReSharper disable once ConditionIsAlwaysTrueOrFalse
// 注使用宏进行判定在非Editor环境需要处理Sdk初始化失败的问题
var success = sdkItem != null;
// ReSharper disable once ConditionIsAlwaysTrueOrFalse
if (success)
_instance._sdkItem = sdkItem;
// ReSharper disable once ConditionIsAlwaysTrueOrFalse
EventDispatcher.Instance.Dispatch(EventId.SdkCallback,
new SdkEventData(SdkEventType.SdkInit, success, string.Empty));
}
return _instance;
}
}
public static bool appQuit { get; private set; }
public int GetDefaultServer()
{
return _sdkItem.defaultServer;
}
private void OnDestroy()
{
if (_sdkItem != null && !appQuit)
{
_sdkItem.Dispose();
_sdkItem = null;
}
_instance = null;
}
private void OnApplicationQuit()
{
appQuit = true;
}
#region Unity判定指令
/// <summary>
/// Sdk登录是否完成
/// </summary>
public bool IsSdkLogin()
{
return _sdkItem.IsLogin();
}
#endregion
#region SdkItem输入指令
public void LoginPhpComplete(string ip, int port)
{
var success = port >= 0;
var data = new SdkPhpLoginResult(success, ip, port);
EventDispatcher.Instance.Dispatch(EventId.SdkPhpLogin, data);
}
public void NoticeComplete(string title, string description, bool willOpen)
{
var success = !string.IsNullOrEmpty(title);
var data = new SdkNoticeData(success, title, description, willOpen);
EventDispatcher.Instance.Dispatch(EventId.NoticeCallback, data);
}
#endregion
#region Unity输入指令
public void Logout()
{
_sdkItem.Logout();
}
public void SwitchAccount()
{
_sdkItem.SwitchAccount();
}
public void GetNotice(bool alwaysOpen)
{
_sdkItem.Notice(alwaysOpen);
}
public void RedemptionCode(string code)
{
_sdkItem.RedemptionCode(code);
}
/// <summary>
/// 手机震动
/// </summary>
public void ShakeDevice()
{
_sdkItem.ShakeDevice();
}
/// <summary>
/// 登录Php服务器
/// </summary>
public void LoginPhp(LoginData.ServerListData serverData)
{
currentServerData = serverData;
_sdkItem.LoginPhp(serverData.m_id);
}
/// <summary>
/// 从Php服务器获得游戏服列表
/// </summary>
public void GetServerList()
{
_sdkItem.GetServerList();
}
/// <summary>
/// Sdk内部使用的服务器列表回调
/// SdkItem组合好不同类型的服务器情况然后推送给Control
/// </summary>
public void PostServerList(List<LoginData.ServerPageData> serverList)
{
EventDispatcher.Instance.Dispatch(EventId.ServerListCallback, serverList);
}
public void SubmitLoadData(LoadDataType action)
{
_sdkItem.SubmitLoadData(action);
}
/// <summary>
/// 向Sdk发送玩家数据
/// </summary>
public void SubmitData(RoleDataSubmit submitType)
{
// 注不同Sdk要的数据不一样
// 所以Sdk内存处理这些问题
_sdkItem.SubmitData(submitType);
}
/// <summary>
/// 唤起Sdk登录操作
/// </summary>
public void LoginSdk(bool isAuto)
{
_sdkItem.LoginSdk(isAuto);
}
/// <summary>
/// 唤起Sdk退出游戏进程
/// </summary>
public void CloseGame()
{
_sdkItem.CloseGame();
}
public void Payment(int goodsId)
{
_sdkItem.Payment(goodsId);
}
#endregion
#region Sdk输入指令
/// <summary>
/// Sdk接收到手机退出键
/// 仅仅在Sdk自身无法处理时试图唤起游戏内的退出窗口
/// </summary>
public void StartCloseGame(string args)
{
// 如果Sdk不包含退出窗口则使用游戏本身的功能
var dicStr = StrDictionary.GetClientDictionaryString("#{4933}");
MessageBoxLogic.OpenOKCancelBox(dicStr, "", CloseGame,
() => { });
}
/// <summary>
/// Sdk登录完成回调
/// </summary>
public void LoginComplete(string args)
{
var success = _sdkItem.LoginComplete(args);
EventDispatcher.Instance.Dispatch(EventId.SdkCallback, new SdkEventData(SdkEventType.LoginSdk, success, args));
}
/// <summary>
/// Sdk登出账号完成回调
/// </summary>
public void LogoutComplete(string args)
{
var success = _sdkItem.LogOutComplete(args);
if (success)
LoginData.accountData = null;
EventDispatcher.Instance.Dispatch(EventId.SdkCallback, new SdkEventData(SdkEventType.Logout, success, args));
}
/// <summary>
/// Sdk支付完成回调
/// </summary>
public void PaymentComplete(string args)
{
var success = _sdkItem.PaymentComplete(args);
EventDispatcher.Instance.Dispatch(EventId.SdkCallback, new SdkEventData(SdkEventType.Payment, success, args));
}
#endregion
}
public class SdkPhpLoginResult
{
public readonly string ip;
public readonly int port;
public readonly bool success;
public SdkPhpLoginResult(bool success, string ip, int port)
{
this.success = success;
this.ip = ip;
this.port = port;
}
}
public class SdkNoticeData
{
public readonly string content;
public readonly bool success;
public readonly string title;
public readonly bool willOpen;
public SdkNoticeData(bool success, string title, string content, bool willOpen)
{
this.success = success;
this.title = title;
this.content = content;
this.willOpen = willOpen;
}
}
public class SdkEventData
{
public readonly string args;
public readonly bool success;
public readonly SdkEventType type;
public SdkEventData(SdkEventType type, bool success, string args)
{
this.success = success;
this.type = type;
this.args = args;
}
}
public enum RoleDataSubmit
{
Create,
EnterGame,
LevelUp,
Other
}
public enum SdkEventType
{
SdkInit, // Sdk初始化失败
LoginSdk, // Sdk登录完成
Logout, // Sdk登出完成
Payment // Sdk支付完成
}