143 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			143 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | using System; | ||
|  | using System.Collections; | ||
|  | using System.Collections.Generic; | ||
|  | using Script.Utils; | ||
|  | using SDK.Utils; | ||
|  | using UnityEngine; | ||
|  | using DKManager.AdsSDKManager.Constant; | ||
|  | using SDKManager.AdsSDKManager.Constant; | ||
|  | 
 | ||
|  | namespace Script.SDKManager.AdsSDKManager.Utils | ||
|  | { | ||
|  |     [Serializable] | ||
|  |     public class AdTypeBidState | ||
|  |     { | ||
|  |         public AdsType AdType; | ||
|  |         public DateTime LastBidSuccessTime; | ||
|  |          | ||
|  |         public AdTypeBidState(AdsType adType) | ||
|  |         { | ||
|  |             AdType = adType; | ||
|  |             LastBidSuccessTime = DateTime.MinValue; | ||
|  |         } | ||
|  |          | ||
|  |         public bool IsBidExpired(int expireInSec) | ||
|  |         { | ||
|  |             // 如果功能关闭,则不视为过期 | ||
|  |             if (expireInSec == -1) return false; | ||
|  |              | ||
|  |             // 如果从未成功竞价过,则视为过期 | ||
|  |             // if (LastBidSuccessTime == DateTime.MinValue) return true; | ||
|  |              | ||
|  |             // 检查是否超过过期时间 | ||
|  |             TimeSpan timeSinceLastBid = DateTime.Now - LastBidSuccessTime; | ||
|  |             return timeSinceLastBid.TotalSeconds > expireInSec; | ||
|  |         } | ||
|  |     } | ||
|  |      | ||
|  |     [Serializable] | ||
|  |     public class BidPlatformState | ||
|  |     { | ||
|  |         public PlatformType PlatformName; | ||
|  |         public bool IsEnabled = true; | ||
|  |          | ||
|  |         // 每种广告类型的竞价状态 | ||
|  |         public Dictionary<AdsType, AdTypeBidState> AdTypeStates = new Dictionary<AdsType, AdTypeBidState>(); | ||
|  |          | ||
|  |         public BidPlatformState(PlatformType platformName) | ||
|  |         { | ||
|  |             PlatformName = platformName; | ||
|  |              | ||
|  |             // 初始化所有广告类型的状态 | ||
|  |             foreach (AdsType adType in Enum.GetValues(typeof(AdsType))) | ||
|  |             { | ||
|  |                 AdTypeStates.Add(adType, new AdTypeBidState(adType)); | ||
|  |             } | ||
|  |         } | ||
|  |          | ||
|  |         // 记录特定广告类型的竞价成功 | ||
|  |         public void RecordBidSuccess(AdsType adType) | ||
|  |         { | ||
|  |             if (AdTypeStates.TryGetValue(adType, out var state)) | ||
|  |             { | ||
|  |                 state.LastBidSuccessTime = DateTime.Now; | ||
|  |                 Debug.Log($"{PlatformName} 平台 {adType} 广告竞价成功,记录时间: {state.LastBidSuccessTime}"); | ||
|  |             } | ||
|  |         } | ||
|  |          | ||
|  |         // 检查特定广告类型的竞价是否过期 | ||
|  |         public bool IsBidExpired(AdsType adType, int expireInSec) | ||
|  |         { | ||
|  |             if (!IsEnabled || expireInSec == -1) return false; | ||
|  |              | ||
|  |             if (AdTypeStates.TryGetValue(adType, out var state)) | ||
|  |             { | ||
|  |                 return state.IsBidExpired(expireInSec); | ||
|  |             } | ||
|  |              | ||
|  |             return false; | ||
|  |         } | ||
|  |          | ||
|  |         // 获取所有过期的广告类型 | ||
|  |         public List<AdsType> GetExpiredAdTypes(int expireInSec) | ||
|  |         { | ||
|  |             List<AdsType> expiredAdTypes = new List<AdsType>(); | ||
|  |              | ||
|  |             if (!IsEnabled || expireInSec == -1) return expiredAdTypes; | ||
|  |              | ||
|  |             foreach (var kvp in AdTypeStates) | ||
|  |             { | ||
|  |                 if (kvp.Value.IsBidExpired(expireInSec)) | ||
|  |                 { | ||
|  |                     expiredAdTypes.Add(kvp.Key); | ||
|  |                 } | ||
|  |             } | ||
|  |              | ||
|  |             return expiredAdTypes; | ||
|  |         } | ||
|  |     } | ||
|  |     public class BidPlatformManager : NormalSingleton<BidPlatformManager> | ||
|  |     { | ||
|  |         private Dictionary<PlatformType, BidPlatformState> _platformStates = new Dictionary<PlatformType, BidPlatformState>(); | ||
|  |         private int _bidExpireInSec = -1; | ||
|  | 
 | ||
|  |         public void InitializePlatformStates(int expireInSec) | ||
|  |         { | ||
|  |             _bidExpireInSec = expireInSec; | ||
|  |             _platformStates.Clear(); | ||
|  |             _platformStates.Add(PlatformType.Admob, new BidPlatformState(PlatformType.Admob)); | ||
|  |             _platformStates.Add(PlatformType.Tpn, new BidPlatformState(PlatformType.Tpn)); | ||
|  |             _platformStates.Add(PlatformType.Max, new BidPlatformState(PlatformType.Max)); | ||
|  |             _platformStates.Add(PlatformType.Bigo, new BidPlatformState(PlatformType.Bigo)); | ||
|  |             _platformStates.Add(PlatformType.Kwai, new BidPlatformState(PlatformType.Kwai)); | ||
|  |         } | ||
|  | 
 | ||
|  |         // 记录平台竞价成功 | ||
|  |         public void RecordBidSuccess(PlatformType platformName, AdsType adType) | ||
|  |         { | ||
|  |             if (_platformStates.TryGetValue(platformName, out var state)) | ||
|  |             { | ||
|  |                 state.RecordBidSuccess(adType); | ||
|  |             } | ||
|  |         } | ||
|  |         // 获取所有过期平台 | ||
|  |         public Dictionary<PlatformType, List<AdsType>> GetExpiredBids() | ||
|  |         { | ||
|  |             Dictionary<PlatformType, List<AdsType>> expiredBids = new Dictionary<PlatformType, List<AdsType>>(); | ||
|  | 
 | ||
|  |             if (_bidExpireInSec == -1) return expiredBids; | ||
|  | 
 | ||
|  |             foreach (var kvp in _platformStates) | ||
|  |             { | ||
|  |                 List<AdsType> expiredAdTypes = kvp.Value.GetExpiredAdTypes(_bidExpireInSec); | ||
|  |                 if (expiredAdTypes.Count > 0) | ||
|  |                 { | ||
|  |                     expiredBids.Add(kvp.Key, expiredAdTypes); | ||
|  |                 } | ||
|  |             } | ||
|  | 
 | ||
|  |             return expiredBids; | ||
|  |         } | ||
|  |     } | ||
|  | } |