218 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			218 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | using System; | ||
|  | using BigoAds.Scripts.Api; | ||
|  | using BigoAds.Scripts.Api.Constant; | ||
|  | 
 | ||
|  | namespace BigoAds.Scripts.Common | ||
|  | { | ||
|  |     public class BigoBaseAd<T>  where T : BigoRequest | ||
|  |     { | ||
|  |         /// <summary> | ||
|  |         /// event for load ad success | ||
|  |         /// </summary> | ||
|  |         public event Action OnLoad; | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// load ad failed with error code and error message | ||
|  |         /// </summary> | ||
|  |         public event Action<int, string> OnLoadFailed; | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// event for ad impression | ||
|  |         /// </summary> | ||
|  |         public event Action OnAdShowed; | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// event for ad be clicked | ||
|  |         /// </summary> | ||
|  |         public event Action OnAdClicked; | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// event for ad be closed | ||
|  |         /// </summary> | ||
|  |         public event Action OnAdDismissed; | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// event for ad error | ||
|  |         /// </summary> | ||
|  |         public event Action<int, string> OnAdError; | ||
|  | 
 | ||
|  |         private readonly string _slotId; | ||
|  | 
 | ||
|  |         private bool _isAdLoaded; | ||
|  | 
 | ||
|  |         protected readonly IBigoAd<T> ADClient; | ||
|  | 
 | ||
|  |         public bool CallbackOnMainThread { get; set; } = true; | ||
|  | 
 | ||
|  |         private BigoAdBid _bid; | ||
|  | 
 | ||
|  |         protected BigoBaseAd(string id, IBigoAd<T> adClient) | ||
|  |         { | ||
|  |             _slotId = id; | ||
|  |             ADClient = adClient; | ||
|  |             InitEvent(ADClient); | ||
|  |         } | ||
|  | 
 | ||
|  |         private void InitEvent(IBigoAd<T> adClient) | ||
|  |         { | ||
|  |             adClient.OnLoad += InvokeOnLoad; | ||
|  |             adClient.OnLoadFailed += InvokeOnLoadFailed; | ||
|  | 
 | ||
|  |             adClient.OnAdShowed += InvokeOnAdShowed; | ||
|  |             adClient.OnAdClicked += InvokeOnAdClicked; | ||
|  |             adClient.OnAdDismissed += InvokeOnAdDismissed; | ||
|  |             adClient.OnAdError += InvokeOnAdError; | ||
|  |         } | ||
|  | 
 | ||
|  |         public void Load(T request) | ||
|  |         { | ||
|  |             if (_isAdLoaded) | ||
|  |             { | ||
|  |                 InvokeOnLoad(); | ||
|  |             } | ||
|  |             if (string.IsNullOrEmpty(_slotId)) | ||
|  |             { | ||
|  |                 InvokeOnLoadFailed(-1, "slotId must be not null"); | ||
|  |                 return; | ||
|  |             } | ||
|  | 
 | ||
|  |             if (!BigoAdSdk.IsInitSuccess()) | ||
|  |             { | ||
|  |                 InvokeOnLoadFailed(-1, "sdk has not init"); | ||
|  |                 return; | ||
|  |             } | ||
|  |             ADClient?.Load(_slotId, request); | ||
|  |         } | ||
|  | 
 | ||
|  |         public virtual void Show() | ||
|  |         { | ||
|  |             _isAdLoaded = false; | ||
|  |             ADClient?.Show(); | ||
|  |         } | ||
|  | 
 | ||
|  |         public void DestroyAd() | ||
|  |         { | ||
|  |             ADClient?.Destroy(); | ||
|  |         } | ||
|  | 
 | ||
|  |         public bool IsLoaded() | ||
|  |         { | ||
|  |             return _isAdLoaded; | ||
|  |         } | ||
|  | 
 | ||
|  |         public bool IsExpired() | ||
|  |         { | ||
|  |             return ADClient == null ? false : ADClient.IsExpired(); | ||
|  |         } | ||
|  | 
 | ||
|  |         public string GetExtraInfo(String key) | ||
|  |         { | ||
|  |             return ADClient == null ? "" : ADClient.GetExtraInfo(key); | ||
|  |         } | ||
|  | 
 | ||
|  |         private void InvokeOnLoad() | ||
|  |         { | ||
|  |             OnLoad?.Invoke(); | ||
|  |             _isAdLoaded = true; | ||
|  |         } | ||
|  | 
 | ||
|  |         protected void InvokeOnLoadFailed(int errorCode, string errorMessage) | ||
|  |         { | ||
|  |             if (CallbackOnMainThread) | ||
|  |             { | ||
|  |                 BigoDispatcher.PostTask((() => { OnLoadFailed?.Invoke(errorCode, errorMessage); })); | ||
|  |             } | ||
|  |             else | ||
|  |             { | ||
|  |                 OnLoadFailed?.Invoke(errorCode, errorMessage); | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  | 
 | ||
|  |         private void InvokeOnAdShowed() | ||
|  |         { | ||
|  |             if (CallbackOnMainThread) | ||
|  |             { | ||
|  |                 BigoDispatcher.PostTask((() => { OnAdShowed?.Invoke(); })); | ||
|  |             } | ||
|  |             else | ||
|  |             { | ||
|  |                 OnAdShowed?.Invoke(); | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         private void InvokeOnAdClicked() | ||
|  |         { | ||
|  |             if (CallbackOnMainThread) | ||
|  |             { | ||
|  |                 BigoDispatcher.PostTask((() => { OnAdClicked?.Invoke(); })); | ||
|  |             } | ||
|  |             else | ||
|  |             { | ||
|  |                 OnAdClicked?.Invoke(); | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         private void InvokeOnAdDismissed() | ||
|  |         { | ||
|  |             if (CallbackOnMainThread) | ||
|  |             { | ||
|  |                 BigoDispatcher.PostTask((() => { OnAdDismissed?.Invoke(); })); | ||
|  |             } | ||
|  |             else | ||
|  |             { | ||
|  |                 OnAdDismissed?.Invoke(); | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         private void InvokeOnAdError(int errorCode, string errorMessage) | ||
|  |         { | ||
|  |             if (CallbackOnMainThread) | ||
|  |             { | ||
|  |                 BigoDispatcher.PostTask((() => { OnAdError?.Invoke(errorCode, errorMessage); })); | ||
|  |             } | ||
|  |             else | ||
|  |             { | ||
|  |                 OnAdError?.Invoke(errorCode, errorMessage); | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         public BigoAdBid GetBid() | ||
|  |         { | ||
|  |             if (ADClient == null) return null; | ||
|  |             if (!ADClient.IsClientBidding()) return null; | ||
|  |             if (_bid == null) | ||
|  |             { | ||
|  |                 _bid = new BigoAdBid(ADClient); | ||
|  |             } | ||
|  |             return _bid; | ||
|  |         } | ||
|  | 
 | ||
|  |         public class BigoAdBid : IClientBidding | ||
|  |         { | ||
|  |             protected readonly IBigoAd<T> _ADClient; | ||
|  | 
 | ||
|  |             public BigoAdBid(IBigoAd<T> ADClient) | ||
|  |             { | ||
|  |                 _ADClient = ADClient; | ||
|  |             } | ||
|  |             /// get price | ||
|  |             public double getPrice() | ||
|  |             { | ||
|  |                 return _ADClient == null ? 0 : _ADClient.getPrice(); | ||
|  |             } | ||
|  | 
 | ||
|  |             ///notify win | ||
|  |             public void notifyWin(double secPrice, string secBidder) | ||
|  |             { | ||
|  |                 _ADClient?.notifyWin(secPrice, secBidder); | ||
|  |             } | ||
|  | 
 | ||
|  |             ///notify loss | ||
|  |             public void notifyLoss(double firstPrice, string firstBidder, BGAdLossReason lossReason) | ||
|  |             { | ||
|  |                 _ADClient?.notifyLoss(firstPrice, firstBidder, lossReason); | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | } |