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 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 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 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()); } } }