131 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			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); | |||
|  |         } | |||
|  |     } | |||
|  | } | |||
|  | 
 |