Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 29 additions & 28 deletions Libraries/SPTarkov.Server.Core/Utils/RagfairOfferHolder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ ItemHelper itemHelper
/// <summary>
/// Expired offer Ids
/// </summary>
private readonly HashSet<MongoId> _expiredOfferIds = [];
private readonly ConcurrentDictionary<MongoId, byte> _expiredOfferIds = [];

/// <summary>
/// Ragfair offer cache, keyed by offer Id
Expand All @@ -43,7 +43,7 @@ ItemHelper itemHelper
/// </summary>
private readonly ConcurrentDictionary<MongoId, HashSet<MongoId>> _fakePlayerOffers = new();

private readonly Lock _expiredOfferIdsLock = new();
private readonly Lock _processExpiredOffersLock = new();
private readonly Lock _ragfairOperationLock = new();

/// <summary>
Expand All @@ -60,11 +60,11 @@ ItemHelper itemHelper
/// Get a ragfair offer by its id
/// </summary>
/// <returns>RagfairOffer</returns>
public HashSet<MongoId> GetStaleOfferIds()
public List<MongoId> GetStaleOfferIds()
{
lock (_expiredOfferIdsLock)
lock (_processExpiredOffersLock)
{
return _expiredOfferIds;
return _expiredOfferIds.Keys.ToList();
}
}

Expand Down Expand Up @@ -107,12 +107,7 @@ public IEnumerable<RagfairOffer> GetOffersByTrader(MongoId traderId)
/// <returns>RagfairOffer list</returns>
public List<RagfairOffer> GetOffers()
{
if (!_offersById.IsEmpty)
{
return _offersById.Values.ToList();
}

return [];
return _offersById.IsEmpty ? [] : _offersById.Values.ToList();
}

/// <summary>
Expand Down Expand Up @@ -324,9 +319,9 @@ protected bool AddFakePlayerOffer(MongoId itemTpl, MongoId offerId)
/// <param name="staleOfferId">Id of offer to add to stale collection</param>
public void FlagOfferAsExpired(MongoId staleOfferId)
{
lock (_expiredOfferIdsLock)
lock (_processExpiredOffersLock)
{
if (!_expiredOfferIds.Add(staleOfferId))
if (!_expiredOfferIds.TryAdd(staleOfferId, 0))
{
logger.Warning($"Unable to add offer: {staleOfferId} to expired offers");
}
Expand All @@ -339,7 +334,7 @@ public void FlagOfferAsExpired(MongoId staleOfferId)
/// <returns>Number of expired offers</returns>
public int GetExpiredOfferCount()
{
lock (_expiredOfferIdsLock)
lock (_processExpiredOffersLock)
{
return _expiredOfferIds.Count;
}
Expand All @@ -352,9 +347,9 @@ public int GetExpiredOfferCount()
public IEnumerable<List<Item>> GetExpiredOfferItems()
{
List<MongoId> expiredOfferIdsCopy;
lock (_expiredOfferIdsLock)
lock (_processExpiredOffersLock)
{
expiredOfferIdsCopy = _expiredOfferIds.ToList();
expiredOfferIdsCopy = _expiredOfferIds.Keys.ToList();
}

// list of lists of item+children
Expand Down Expand Up @@ -385,7 +380,7 @@ public IEnumerable<List<Item>> GetExpiredOfferItems()
/// </summary>
public void ResetExpiredOfferIds()
{
lock (_expiredOfferIdsLock)
lock (_processExpiredOffersLock)
{
_expiredOfferIds.Clear();
}
Expand All @@ -397,24 +392,30 @@ public void ResetExpiredOfferIds()
/// <param name="timestamp">Timestamp at point offer is 'expired'</param>
public void FlagExpiredOffersAfterDate(long timestamp)
{
lock (_expiredOfferIdsLock)
lock (_processExpiredOffersLock)
{
foreach (var offer in GetOffers())
{
if (_expiredOfferIds.Contains(offer.Id) || offer.IsTraderOffer())
var offers = GetOffers();
Parallel.ForEach(
offers,
offer =>
{
// Already flagged or trader offer (handled separately), skip
continue;
}
if (_expiredOfferIds.ContainsKey(offer.Id) || offer.IsTraderOffer())
{
// Already flagged or trader offer (handled separately), skip
return;
}

if (offer.IsStale(timestamp))
{
if (!_expiredOfferIds.Add(offer.Id))
if (!offer.IsStale(timestamp))
{
return;
}

if (!_expiredOfferIds.TryAdd(offer.Id, 0))
{
logger.Warning($"Unable to add offer: {offer.Id} to expired offers as it already exists");
}
}
}
);
}
}
}
Loading