AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
AuctionHouseSearcher Class Reference

#include "AuctionHouseSearcher.h"

Public Member Functions

 AuctionHouseSearcher ()
 
 ~AuctionHouseSearcher ()
 
void Update ()
 
void QueueSearchRequest (AuctionSearcherRequest *searchRequestInfo)
 
void AddAuction (AuctionEntry const *auctionEntry)
 
void RemoveAuction (AuctionEntry const *auctionEntry)
 
void UpdateBid (AuctionEntry const *auctionEntry)
 
void NotifyAllWorkers (std::shared_ptr< AuctionSearcherUpdate > const auctionSearchUpdate)
 
void NotifyOneWorker (std::shared_ptr< AuctionSearcherUpdate > const auctionSearchUpdate)
 

Private Attributes

ProducerConsumerQueue< AuctionSearcherRequest * > _requestQueue
 
MPSCQueue< AuctionSearcherResponse_responseQueue
 
std::vector< std::unique_ptr< AuctionHouseWorkerThread > > _workerThreads
 

Detailed Description

Constructor & Destructor Documentation

◆ AuctionHouseSearcher()

AuctionHouseSearcher::AuctionHouseSearcher ( )
338{
339 for (uint32 i = 0; i < sWorld->getIntConfig(CONFIG_AUCTIONHOUSE_WORKERTHREADS); ++i)
340 _workerThreads.push_back(std::make_unique<AuctionHouseWorkerThread>(&_requestQueue, &_responseQueue));
341}
std::uint32_t uint32
Definition Define.h:107
@ CONFIG_AUCTIONHOUSE_WORKERTHREADS
Definition IWorld.h:424
MPSCQueue< AuctionSearcherResponse > _responseQueue
Definition AuctionHouseSearcher.h:298
std::vector< std::unique_ptr< AuctionHouseWorkerThread > > _workerThreads
Definition AuctionHouseSearcher.h:299
ProducerConsumerQueue< AuctionSearcherRequest * > _requestQueue
Definition AuctionHouseSearcher.h:297
#define sWorld
Definition World.h:363

References _requestQueue, _responseQueue, _workerThreads, CONFIG_AUCTIONHOUSE_WORKERTHREADS, and sWorld.

◆ ~AuctionHouseSearcher()

AuctionHouseSearcher::~AuctionHouseSearcher ( )
344{
346 for (std::unique_ptr<AuctionHouseWorkerThread> const& workerThread : _workerThreads)
347 workerThread->Stop();
348}
void Cancel()
Definition PCQueue.h:86

References _requestQueue, _workerThreads, and ProducerConsumerQueue< T >::Cancel().

Member Function Documentation

◆ AddAuction()

void AuctionHouseSearcher::AddAuction ( AuctionEntry const *  auctionEntry)
369{
370 Item* item = sAuctionMgr->GetAItem(auctionEntry->item_guid);
371 if (!item)
372 return;
373
374 // SearchableAuctionEntry is a shared_ptr as it will be shared among all the worker threads and needs to be self-managed
375 std::shared_ptr<SearchableAuctionEntry> searchableAuctionEntry = std::make_shared<SearchableAuctionEntry>();
376 searchableAuctionEntry->Id = auctionEntry->Id;
377
378 // Auction info
379 searchableAuctionEntry->ownerGuid = auctionEntry->owner;
380 sCharacterCache->GetCharacterNameByGuid(auctionEntry->owner, searchableAuctionEntry->ownerName);
381 searchableAuctionEntry->startbid = auctionEntry->startbid;
382 searchableAuctionEntry->buyout = auctionEntry->buyout;
383 searchableAuctionEntry->expire_time = auctionEntry->expire_time;
384 searchableAuctionEntry->listFaction = auctionEntry->GetFactionId();
385 searchableAuctionEntry->bid = auctionEntry->bid;
386 searchableAuctionEntry->bidderGuid = auctionEntry->bidder;
387
388 // Item info
389 searchableAuctionEntry->item.entry = item->GetEntry();
390
391 for (uint8 i = 0; i < MAX_INSPECTED_ENCHANTMENT_SLOT; ++i)
392 {
393 searchableAuctionEntry->item.enchants[i].id = item->GetEnchantmentId(EnchantmentSlot(i));
394 searchableAuctionEntry->item.enchants[i].duration = item->GetEnchantmentDuration(EnchantmentSlot(i));
395 searchableAuctionEntry->item.enchants[i].charges = item->GetEnchantmentCharges(EnchantmentSlot(i));
396 }
397
398 searchableAuctionEntry->item.randomPropertyId = item->GetItemRandomPropertyId();
399 searchableAuctionEntry->item.suffixFactor = item->GetItemSuffixFactor();
400 searchableAuctionEntry->item.count = item->GetCount();
401 searchableAuctionEntry->item.spellCharges = item->GetSpellCharges();
402 searchableAuctionEntry->item.itemTemplate = item->GetTemplate();
403
404 searchableAuctionEntry->SetItemNames();
405
406 // Let the worker threads know we have a new auction
407 NotifyAllWorkers(std::make_shared<AuctionSearchAdd>(searchableAuctionEntry));
408}
#define sAuctionMgr
Definition AuctionHouseMgr.h:224
#define sCharacterCache
Definition CharacterCache.h:83
std::uint8_t uint8
Definition Define.h:109
EnchantmentSlot
Definition Item.h:168
@ MAX_INSPECTED_ENCHANTMENT_SLOT
Definition Item.h:176
void NotifyAllWorkers(std::shared_ptr< AuctionSearcherUpdate > const auctionSearchUpdate)
Definition AuctionHouseSearcher.cpp:422
Definition Item.h:220
uint32 GetEnchantmentId(EnchantmentSlot slot) const
Definition Item.h:304
int32 GetSpellCharges(uint8 index=0) const
Definition Item.h:317
uint32 GetEnchantmentDuration(EnchantmentSlot slot) const
Definition Item.h:305
int32 GetItemRandomPropertyId() const
Definition Item.h:295
ItemTemplate const * GetTemplate() const
Definition Item.cpp:544
uint32 GetItemSuffixFactor() const
Definition Item.h:296
uint32 GetEnchantmentCharges(EnchantmentSlot slot) const
Definition Item.h:306
uint32 GetCount() const
Definition Item.h:272
uint32 GetEntry() const
Definition Object.h:115

References AuctionEntry::bid, AuctionEntry::bidder, AuctionEntry::buyout, AuctionEntry::expire_time, Item::GetCount(), Item::GetEnchantmentCharges(), Item::GetEnchantmentDuration(), Item::GetEnchantmentId(), Object::GetEntry(), AuctionEntry::GetFactionId(), Item::GetItemRandomPropertyId(), Item::GetItemSuffixFactor(), Item::GetSpellCharges(), Item::GetTemplate(), AuctionEntry::Id, AuctionEntry::item_guid, MAX_INSPECTED_ENCHANTMENT_SLOT, NotifyAllWorkers(), AuctionEntry::owner, sAuctionMgr, sCharacterCache, and AuctionEntry::startbid.

◆ NotifyAllWorkers()

void AuctionHouseSearcher::NotifyAllWorkers ( std::shared_ptr< AuctionSearcherUpdate > const  auctionSearchUpdate)
423{
424 for (std::unique_ptr<AuctionHouseWorkerThread> const& workerThread : _workerThreads)
425 workerThread->AddAuctionSearchUpdateToQueue(auctionSearchUpdate);
426}

References _workerThreads.

Referenced by AddAuction(), and RemoveAuction().

◆ NotifyOneWorker()

void AuctionHouseSearcher::NotifyOneWorker ( std::shared_ptr< AuctionSearcherUpdate > const  auctionSearchUpdate)
429{
430 // Just notify the first worker in the list, no big deal which
431 (*_workerThreads.begin())->AddAuctionSearchUpdateToQueue(auctionSearchUpdate);
432}

References _workerThreads.

Referenced by UpdateBid().

◆ QueueSearchRequest()

void AuctionHouseSearcher::QueueSearchRequest ( AuctionSearcherRequest searchRequestInfo)
364{
365 _requestQueue.Push(searchRequestInfo);
366}
void Push(const T &value)
Definition PCQueue.h:39

References _requestQueue, and ProducerConsumerQueue< T >::Push().

◆ RemoveAuction()

void AuctionHouseSearcher::RemoveAuction ( AuctionEntry const *  auctionEntry)
411{
412 NotifyAllWorkers(std::make_shared<AuctionSearchRemove>(auctionEntry->Id, auctionEntry->GetFactionId()));
413}

References AuctionEntry::GetFactionId(), AuctionEntry::Id, and NotifyAllWorkers().

◆ Update()

void AuctionHouseSearcher::Update ( )
351{
352 AuctionSearcherResponse* response = nullptr;
353 while (_responseQueue.Dequeue(response))
354 {
356 if (player)
357 player->GetSession()->SendPacket(&response->packet);
358
359 delete response;
360 }
361}
Definition Player.h:1081
WorldSession * GetSession() const
Definition Player.h:2005
void SendPacket(WorldPacket const *packet)
Send a packet to the client.
Definition WorldSession.cpp:226
Player * FindConnectedPlayer(ObjectGuid const guid)
Definition ObjectAccessor.cpp:257
Definition AuctionHouseSearcher.h:182
ObjectGuid playerGuid
Definition AuctionHouseSearcher.h:183
WorldPacket packet
Definition AuctionHouseSearcher.h:184

References _responseQueue, ObjectAccessor::FindConnectedPlayer(), Player::GetSession(), AuctionSearcherResponse::packet, AuctionSearcherResponse::playerGuid, and WorldSession::SendPacket().

Referenced by AuctionHouseMgr::Update().

◆ UpdateBid()

void AuctionHouseSearcher::UpdateBid ( AuctionEntry const *  auctionEntry)
416{
417 // Updating bids is a bit unique, we really only need to update a single worker as every worker thread contains
418 // a map of shared pointers to the same SearchableAuctionEntry's, so updating one will update them all.
419 NotifyOneWorker(std::make_shared<AuctionSearchUpdateBid>(auctionEntry->Id, auctionEntry->GetFactionId(), auctionEntry->bid, auctionEntry->bidder));
420}
void NotifyOneWorker(std::shared_ptr< AuctionSearcherUpdate > const auctionSearchUpdate)
Definition AuctionHouseSearcher.cpp:428

References AuctionEntry::bid, AuctionEntry::bidder, AuctionEntry::GetFactionId(), AuctionEntry::Id, and NotifyOneWorker().

Member Data Documentation

◆ _requestQueue

ProducerConsumerQueue<AuctionSearcherRequest*> AuctionHouseSearcher::_requestQueue
private

◆ _responseQueue

MPSCQueue<AuctionSearcherResponse> AuctionHouseSearcher::_responseQueue
private

Referenced by AuctionHouseSearcher(), and Update().

◆ _workerThreads

std::vector<std::unique_ptr<AuctionHouseWorkerThread> > AuctionHouseSearcher::_workerThreads
private

The documentation for this class was generated from the following files: