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);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|