SDK_UnityMoney/Assets/Plugins/PC/TaskManager/ThinkingSDKTask.cs

131 lines
3.8 KiB
C#

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using ThinkingSDK.PC.Request;
using ThinkingSDK.PC.Constant;
using ThinkingSDK.PC.Storage;
using ThinkingSDK.PC.Main;
namespace ThinkingSDK.PC.TaskManager
{
[DisallowMultipleComponent]
public class ThinkingSDKTask : MonoBehaviour
{
private readonly static object _locker = new object();
private List<ThinkingSDKBaseRequest> requestList = new List<ThinkingSDKBaseRequest>();
private List<ResponseHandle> responseHandleList = new List<ResponseHandle>();
private List<int> batchSizeList = new List<int>();
private List<string> appIdList = new List<string>();
private static ThinkingSDKTask mSingleTask;
private bool isWaiting = false;
private float updateInterval = 0;
public static ThinkingSDKTask SingleTask()
{
return mSingleTask;
}
private void Awake() {
mSingleTask = this;
}
private void Start() {
}
private void Update() {
updateInterval += UnityEngine.Time.deltaTime;
if (updateInterval > 0.2)
{
updateInterval = 0;
if (!isWaiting && requestList.Count > 0)
{
WaitOne();
StartRequestSendData();
}
}
}
//private void OnDestroy()
//{
// ThinkingPCSDK.OnDestory();
//}
/// <summary>
/// hold signal
/// </summary>
public void WaitOne()
{
isWaiting = true;
}
/// <summary>
/// release signal
/// </summary>
public void Release()
{
isWaiting = false;
}
public void SyncInvokeAllTask()
{
}
public void StartRequest(ThinkingSDKBaseRequest mRequest, ResponseHandle responseHandle, int batchSize, string appId)
{
lock(_locker)
{
requestList.Add(mRequest);
responseHandleList.Add(responseHandle);
batchSizeList.Add(batchSize);
appIdList.Add(appId);
}
}
private void StartRequestSendData()
{
if (requestList.Count > 0)
{
ThinkingSDKBaseRequest mRequest;
ResponseHandle responseHandle;
string list;
int eventCount = 0;
lock (_locker)
{
mRequest = requestList[0];
responseHandle = responseHandleList[0];
list = ThinkingSDKFileJson.DequeueBatchTrackingData(batchSizeList[0], appIdList[0], out eventCount);
}
if (mRequest != null)
{
if (eventCount > 0 && list.Length > 0)
{
this.StartCoroutine(this.SendData(mRequest, responseHandle, list, eventCount));
}
else
{
if (responseHandle != null)
{
responseHandle(null);
}
}
lock(_locker)
{
requestList.RemoveAt(0);
responseHandleList.RemoveAt(0);
batchSizeList.RemoveAt(0);
appIdList.RemoveAt(0);
}
}
}
}
private IEnumerator SendData(ThinkingSDKBaseRequest mRequest, ResponseHandle responseHandle, string list, int eventCount) {
yield return mRequest.SendData_2(responseHandle, list, eventCount);
}
}
}