226 lines
7.6 KiB
C#
226 lines
7.6 KiB
C#
|
|
|
|
|
|
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<Result> 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<Result> 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<NormalBidHighestUserCache>(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<Result> 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<bool> 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}";
|
|
}
|
|
} |