| 
									
										
										
										
											2025-08-31 07:12:52 +00:00
										 |  |  | using System; | 
					
						
							|  |  |  | using System.Collections; | 
					
						
							|  |  |  | using System.Collections.Generic; | 
					
						
							|  |  |  | using UnityEngine; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-01 10:32:50 +00:00
										 |  |  | namespace WZ | 
					
						
							| 
									
										
										
										
											2025-08-31 07:12:52 +00:00
										 |  |  | { | 
					
						
							|  |  |  |     [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; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2025-09-02 09:14:49 +00:00
										 |  |  |     public class BidPlatformManager : D_MonoSingleton<BidPlatformManager> | 
					
						
							| 
									
										
										
										
											2025-08-31 07:12:52 +00:00
										 |  |  |     { | 
					
						
							|  |  |  |         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)); | 
					
						
							| 
									
										
										
										
											2025-08-31 12:48:14 +00:00
										 |  |  |             _platformStates.Add(PlatformType.Topon, new BidPlatformState(PlatformType.Topon)); | 
					
						
							|  |  |  |             _platformStates.Add(PlatformType.AppLovin, new BidPlatformState(PlatformType.AppLovin)); | 
					
						
							| 
									
										
										
										
											2025-08-31 07:12:52 +00:00
										 |  |  |             _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; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |