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 requestList = new List(); private List responseHandleList = new List(); private List batchSizeList = new List(); private List appIdList = new List(); 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(); //} /// /// hold signal /// public void WaitOne() { isWaiting = true; } /// /// release signal /// 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); } } }