server-master/srcs/_plugins/WingsEmu.Plugins.BasicImplementation/ItemUsage/IItemUsageToggleManager.cs
2026-02-10 18:21:30 +01:00

54 lines
No EOL
1.6 KiB
C#

// WingsEmu
//
// Developed by NosWings Team
using System;
using System.Collections.Generic;
using System.Net;
using System.Threading.Tasks;
using StackExchange.Redis;
using WingsEmu.Game.Inventory;
namespace WingsEmu.Plugins.BasicImplementations.ItemUsage;
public class RedisItemUsageToggleManager : IItemUsageToggleManager
{
private const string ITEM_TOGGLE_FEATURE_PREFIX = "game:item-toggle:";
private readonly IDatabase _database;
private readonly IConnectionMultiplexer _multiplexer;
public RedisItemUsageToggleManager(IConnectionMultiplexer multiplexer)
{
_multiplexer = multiplexer;
_database = _multiplexer.GetDatabase(0);
}
public async Task<bool> IsItemBlocked(int vnum) => await _database.KeyExistsAsync(ITEM_TOGGLE_FEATURE_PREFIX + vnum);
public async Task BlockItemUsage(int vnum)
{
await _database.StringSetAsync(ITEM_TOGGLE_FEATURE_PREFIX + vnum, "blocked");
}
public async Task UnblockItemUsage(int vnum)
{
await _database.KeyDeleteAsync(ITEM_TOGGLE_FEATURE_PREFIX + vnum);
}
public async Task<IEnumerable<int>> GetBlockedItemUsages()
{
var disabledItems = new List<int>();
foreach (EndPoint ep in _multiplexer.GetEndPoints())
{
IAsyncEnumerable<RedisKey> keys = _multiplexer.GetServer(ep).KeysAsync(0, ITEM_TOGGLE_FEATURE_PREFIX + "*");
await foreach (RedisKey redisKey in keys)
{
string integerKey = redisKey.ToString().Split(':')[2];
disabledItems.Add(Convert.ToInt32(integerKey));
}
}
return disabledItems;
}
}