using Newtonsoft.Json; using StackExchange.Redis; using ServerCore; using ServerBase; using META_ID = System.UInt32; using USER_GUID = System.String; using LAND_AUCTION_NUMBER = System.Int32; namespace ServerCommon; public class NormalBidHighestUserCache : CacheBase { public META_ID LandMetaId { get; set; } = 0; public LAND_AUCTION_NUMBER AuctionNumber { get; set; } = 0; //============================================================================================= // 일반 입찰 최고 입찰자 정보 //============================================================================================= public double NormalHighestBidPrice { get; set; } = 0; // 일반 입찰 최고가 public string NormalHighestBidUserGuid { get; set; } = string.Empty; // 일반 입찰 최고가 유저 식별키 public string NormalHighestBidUserNickname { get; set; } = string.Empty; // 일반 입찰 최고가 유저 닉네임 public DateTime HighestRankVersionTime { get; set; } = DateTimeHelper.MinTime; // 최고 입찰자 순위 버전 정보 public NormalBidHighestUserCache() { } } public class LandAuctionNormalBidHighestUserCacheRequest: RedisRequestSharedBase { private readonly META_ID m_land_meta_id; private NormalBidHighestUserCache? m_normal_bid_highest_user_cache; public LandAuctionNormalBidHighestUserCacheRequest(META_ID landMetaId, RedisConnector redisConnector) : base(landMetaId.ToString(), redisConnector) { m_land_meta_id = landMetaId; } public LandAuctionNormalBidHighestUserCacheRequest(NormalBidHighestUserCache cache, RedisConnector redisConnector) : base(cache.LandMetaId.ToString(), redisConnector) { m_land_meta_id = cache.LandMetaId; m_normal_bid_highest_user_cache = cache; } public async Task upsertNormalBidHighestUser(double cacheExpiryMinutes) { var result = new Result(); var err_msg = string.Empty; try { result = await onPrepareRequest(); if (result.isFail()) { return result; } var cache_json_string = getNormalBidHighestUserCache()?.toJsonString(); var database = getDatabase(); NullReferenceCheckHelper.throwIfNull(database, () => $"database is null !!! - {toBasicString()}"); var expiry = TimeSpan.FromMinutes(cacheExpiryMinutes); if (expiry.TotalMilliseconds <= 0) expiry = TimeSpan.FromMilliseconds(1); if (false == await database.StringSetAsync(getKey(), cache_json_string, expiry)) { err_msg = $"Failed to set NormalBidHighestUserCache to Redis !!! : redisKey:{getKey()} - {toBasicString()}"; result.setFail(ServerErrorCode.LandAuctionRedisCacheSetFailed, err_msg); Log.getLogger().error(err_msg); return result; } err_msg = $"NormalBidHighestUserCache save to Cache !!! : redisKey:{getKey()} - {toBasicString()}"; Log.getLogger().info(err_msg); } catch (Exception e) { var error_code = ServerErrorCode.TryCatchException; err_msg = $"Failed to process in upsertLandAuction() !!! : errorCode{error_code}, exception:{e} - redisKey:{getKey()}, {toBasicString()}"; result.setFail(error_code, err_msg); Log.getLogger().error(result.toBasicString()); } return result; } public async Task fetchNormalBidHighestUser() { var result = new Result(); var err_msg = string.Empty; try { result = await onPrepareRequest(); if (result.isFail()) { return result; } var database = getDatabase(); NullReferenceCheckHelper.throwIfNull(database, () => $"database is null !!!"); var redis_value = await database.StringGetAsync(getKey(), CommandFlags.PreferReplica); if (true == redis_value.HasValue) { var curr_cache = JsonConvert.DeserializeObject(redis_value.ToString()); if (null == curr_cache) { err_msg = $"Failed to convert DeserializeObject of Json !!! : {redis_value.ToString()} - {toBasicString()}"; result.setFail(ServerErrorCode.JsonConvertDeserializeFailed, err_msg); Log.getLogger().error(err_msg); return result; } m_normal_bid_highest_user_cache = curr_cache; err_msg = $"NormalBidHighestUserCache fetch from Cache !!! : redisKey:{getKey()} - {toBasicString()}"; Log.getLogger().info(err_msg); } } catch (Exception e) { var error_code = ServerErrorCode.TryCatchException; err_msg = $"Failed to process in fetchNormalBidHighestUserCache() !!! : errorCode{error_code}, exception:{e} - redisKey:{getKey()}, {toBasicString()}"; result.setFail(error_code, err_msg); Log.getLogger().error(result.toBasicString()); } return result; } public async Task deleteNormalBidHighestUser() { var result = new Result(); string err_msg; try { result = await onPrepareRequest(); if (result.isFail()) { return result; } m_normal_bid_highest_user_cache = null; var database = getDatabase(); var is_success = await database.KeyDeleteAsync(getKey()); if (false == is_success) { err_msg = $"Failed to KeyDeleteAsync() !!! : redisKey:{getKey()} - {toBasicString()}"; Log.getLogger().debug(err_msg); return result; } err_msg = $"NormalBidHighestUserCache deleted from Cache - redisKey:{getKey()}, {toBasicString()}"; Log.getLogger().debug(err_msg); } catch (Exception e) { var error_code = ServerErrorCode.TryCatchException; err_msg = $"Failed to process in deleteNormalBidHighestUser() !!! : errorCode{error_code}, execption:{e} - redisKey:{getKey()}, {toBasicString()}"; result.setFail(error_code, err_msg); Log.getLogger().error(result.toBasicString()); } return result; } protected override string onMakeKey() { return $"{{{m_land_meta_id}}}:land_auction_normal_bid_highest_user"; } public async Task isExistKey() { try { var result = await onPrepareRequest(); if (result.isFail()) return false; var database = getDatabase(); return await database.KeyExistsAsync(onMakeKey()); } catch (Exception e) { var error_code = ServerErrorCode.TryCatchException; var err_msg = $"Failed to process in isExistKey() !!! : errorCode{error_code}, execption:{e} - redisKey:{getKey()}, {toBasicString()}"; Log.getLogger().error(err_msg); } return false; } public string toKey() { return onMakeKey(); } public NormalBidHighestUserCache? getNormalBidHighestUserCache() => m_normal_bid_highest_user_cache; public void setNormalBidHighestUserCache(NormalBidHighestUserCache cache) => m_normal_bid_highest_user_cache = cache; public override string toBasicString() { return $"{this.getTypeName()} - LandMetaId:{m_land_meta_id}"; } }