Files
caliverse_server/ServerCommon/Cache/CaliumStorageCacheRequest.cs
2025-05-01 07:20:41 +09:00

141 lines
4.7 KiB
C#

using ServerCore; using ServerBase;
using StackExchange.Redis;
using USER_GUID = System.String;
namespace ServerCommon;
public class CaliumStorageCacheRequest : RedisRequestSharedBase
{
private const int DefaultManageExpireMs = 1 * 60 * 1000;
// in
// out
public CaliumStorageCacheRequest(RedisConnector redisConnector) : base("CaliumStorageCache", redisConnector)
{
}
protected override string onMakeKey() => "caliumstorage:start";
private string getSyncKey() => "caliumstorage:sync:start";
private string getRetryKey() => "caliumstorage:retry";
public override string toBasicString() => "CaliumStorageCacheRequest";
public async Task<bool> startCaliumConverterManage(bool isSync = false)
{
var result = new Result();
var redis_key = isSync ? getSyncKey() : onMakeKey();
try
{
result = await onPrepareRequest();
if (result.isFail()) return false;
var database = getDatabase();
NullReferenceCheckHelper.throwIfNull(database, () => $"database is null !!!");
var redis_value = await database.StringSetAsync(redis_key, DateTimeHelper.Current.ToString("yyyy-MM-dd HH:mm:ss"), TimeSpan.FromMilliseconds(DefaultManageExpireMs), When.NotExists);
if (false == redis_value) return false;
}
catch (Exception e)
{
var error_code = ServerErrorCode.TryCatchException;
var err_msg = $"Failed to get CaliumConverterManageCache from Redis !!! : : errorCode{error_code}, errMsg:{e.Message}";
result.setFail(error_code, err_msg);
Log.getLogger().error(result.toBasicString());
return false;
}
return true;
}
public async Task<bool> checkRetryKey()
{
var result = new Result();
var redis_key = getRetryKey();
try
{
result = await onPrepareRequest();
if (result.isFail()) return false;
var database = getDatabase();
NullReferenceCheckHelper.throwIfNull(database, () => $"database is null !!!");
var redis_value = await database.KeyExistsAsync(redis_key);
return redis_value;
}
catch (Exception e)
{
var error_code = ServerErrorCode.TryCatchException;
var err_msg = $"Failed to get CaliumConverterManageCache from Redis !!! : : errorCode{error_code}, errMsg:{e.Message}";
result.setFail(error_code, err_msg);
Log.getLogger().error(result.toBasicString());
return false;
}
}
public async Task<bool> setRetryKey()
{
var result = new Result();
var redis_key = getRetryKey();
try
{
result = await onPrepareRequest();
if (result.isFail()) return false;
var database = getDatabase();
NullReferenceCheckHelper.throwIfNull(database, () => $"database is null !!!");
var check_date = DateTimeHelper.Current.AddDays(1);
var next_date = new DateTime(check_date.Year, check_date.Month, check_date.Day, 0, 0, 0);
next_date = next_date.AddMinutes(-1);
var expire_time = next_date - DateTimeHelper.Current;
var redis_value = await database.StringSetAsync(redis_key, DateTimeHelper.Current.ToString("yyyy-MM-dd HH:mm:ss"), expire_time, When.NotExists);
if (false == redis_value) return false;
}
catch (Exception e)
{
var error_code = ServerErrorCode.TryCatchException;
var err_msg = $"Failed to get CaliumConverterManageCache from Redis !!! : : errorCode{error_code}, errMsg:{e.Message}";
result.setFail(error_code, err_msg);
Log.getLogger().error(result.toBasicString());
return false;
}
return true;
}
public async Task deleteRetryKey()
{
var result = new Result();
var redis_key = getRetryKey();
try
{
result = await onPrepareRequest();
if (result.isFail()) return;
var database = getDatabase();
NullReferenceCheckHelper.throwIfNull(database, () => $"database is null !!!");
await database.KeyDeleteAsync(redis_key, CommandFlags.FireAndForget);
}
catch (Exception e)
{
var error_code = ServerErrorCode.TryCatchException;
var err_msg = $"Failed to get CaliumConverterManageCache from Redis !!! : : errorCode{error_code}, errMsg:{e.Message}";
result.setFail(error_code, err_msg);
Log.getLogger().error(result.toBasicString());
}
}
}