mirror of
https://bitbucket.org/theswgsource/src-1.2.git
synced 2026-08-01 02:15:54 -04:00
Added the CommoditiesServer project
This commit is contained in:
@@ -0,0 +1,218 @@
|
||||
// DatabaseServerConnection.cpp
|
||||
// copyright 2000 Verant Interactive
|
||||
// Author: Justin Randall
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
#include "FirstCommodityServer.h"
|
||||
#include "DatabaseServerConnection.h"
|
||||
#include "ConfigCommodityServer.h"
|
||||
#include "AuctionMarket.h"
|
||||
#include "sharedLog/Log.h"
|
||||
#include "CommodityServer.h"
|
||||
#include "sharedNetwork/NetworkSetupData.h"
|
||||
#include "sharedNetworkMessages/GameNetworkMessage.h"
|
||||
#include "sharedNetworkMessages/DeleteCharacterMessage.h"
|
||||
#include "serverNetworkMessages/CommoditiesLoadDoneMessage.h"
|
||||
#include "serverNetworkMessages/GetAuctionLocationsMessage.h"
|
||||
#include "serverNetworkMessages/GetMarketAuctionsMessage.h"
|
||||
#include "serverNetworkMessages/GetMarketAuctionAttributesMessage.h"
|
||||
#include "serverNetworkMessages/GetMarketAuctionBidsMessage.h"
|
||||
#include "UnicodeUtils.h"
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
DatabaseServerConnection::DatabaseServerConnection(const std::string & a, const unsigned short p) :
|
||||
ServerConnection(a, p, NetworkSetupData())
|
||||
{
|
||||
LOG("DatabaseServerConnection", ("Connection with the database server created"));
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
DatabaseServerConnection::~DatabaseServerConnection()
|
||||
{
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
void DatabaseServerConnection::onConnectionClosed()
|
||||
{
|
||||
LOG("DatabaseServerConnection", ("Connection with the database server is closed"));
|
||||
static MessageConnectionCallback m("DatabaseServerConnectionClosed");
|
||||
emitMessage(m);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
void DatabaseServerConnection::onConnectionOpened()
|
||||
{
|
||||
LOG("DatabaseServerConnection", ("Connection with the database server is open"));
|
||||
static MessageConnectionCallback m("DatabaseServerConnectionOpened");
|
||||
emitMessage(m);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
void DatabaseServerConnection::onReceive(const Archive::ByteStream & message)
|
||||
{
|
||||
static int lastLocationCount = 0, currentLocationCount = 0;
|
||||
static int lastAuctionCount = 0, currentAuctionCount = 0;
|
||||
static int lastAuctionAttributeCount = 0, currentAuctionAttributeCount = 0;
|
||||
static int lastBidCount = 0, currentBidCount = 0;
|
||||
|
||||
Archive::ReadIterator ri = message.begin();
|
||||
GameNetworkMessage msg(ri);
|
||||
ri = message.begin();
|
||||
|
||||
if (msg.isType("CommoditiesLoadDone"))
|
||||
{
|
||||
if (currentLocationCount != lastLocationCount)
|
||||
{
|
||||
DEBUG_REPORT_LOG(true, (" -- %d AuctionLocations record received\n", currentLocationCount));
|
||||
LOG("CommoditiesServer", ("%d AuctionLocations record received\n", currentLocationCount));
|
||||
lastLocationCount = currentLocationCount;
|
||||
}
|
||||
if (currentAuctionCount != lastAuctionCount)
|
||||
{
|
||||
DEBUG_REPORT_LOG(true, (" -- %d MarketAuctions record received\n", currentAuctionCount));
|
||||
LOG("CommoditiesServer", ("%d MarketAuctions record received\n", currentAuctionCount));
|
||||
lastAuctionCount = currentAuctionCount;
|
||||
}
|
||||
if (currentAuctionAttributeCount != lastAuctionAttributeCount)
|
||||
{
|
||||
DEBUG_REPORT_LOG(true, (" -- %d MarketAuctionAttributes record received\n", currentAuctionAttributeCount));
|
||||
LOG("CommoditiesServer", ("%d MarketAuctionAttributes record received\n", currentAuctionAttributeCount));
|
||||
lastAuctionAttributeCount = currentAuctionAttributeCount;
|
||||
}
|
||||
if (currentBidCount != lastBidCount)
|
||||
{
|
||||
DEBUG_REPORT_LOG(true, (" -- %d MarketAuctionBids record received\n", currentBidCount));
|
||||
LOG("CommoditiesServer", ("%d MarketAuctionBids record received", currentBidCount));
|
||||
lastBidCount = currentBidCount;
|
||||
}
|
||||
REPORT_LOG("DatabaseServerConnection", ("CommoditiesLoadDone Message received on connection with the database server\n"));
|
||||
CommoditiesLoadDoneMessage m(ri);
|
||||
REPORT_LOG("DatabaseServerConnection", ("%d rows received on Auction_Locations\n", m.getAuctionLocationsCount()));
|
||||
REPORT_LOG("DatabaseServerConnection", ("%d rows received on Market_Auctions\n", m.getMarketAuctionsCount()));
|
||||
REPORT_LOG("DatabaseServerConnection", ("%d rows received on Market_Auction_Attributes\n", m.getMarketAuctionAttributesCount()));
|
||||
REPORT_LOG("DatabaseServerConnection", ("%d rows received on Market_Auction_Bids\n", m.getMarketAuctionBidsCount()));
|
||||
LOG("CommoditiesServer", ("CommoditiesLoadDone Message received, %d rows Auction_Locations, %d rows Market_Auctions, %d rows Market_Auction_Attributes, %d rows Market_Auction_Bids", m.getAuctionLocationsCount(), m.getMarketAuctionsCount(), m.getMarketAuctionAttributesCount(), m.getMarketAuctionBidsCount()));
|
||||
|
||||
LOG("CommoditiesServer", ("Start build index for attribute search"));
|
||||
AuctionMarket::getInstance().BuildAuctionsSearchableAttributeList();
|
||||
LOG("CommoditiesServer", ("End build index for attribute search"));
|
||||
|
||||
emitMessage(m);
|
||||
}
|
||||
else if (msg.isType("GetAuctionLocationsMessage"))
|
||||
{
|
||||
GetAuctionLocationsMessage m(ri);
|
||||
const std::list<GetAuctionLocationsMessage::AuctionLocation> & auctionLocations = m.getAuctionLocations();
|
||||
for (std::list<GetAuctionLocationsMessage::AuctionLocation>::const_iterator iter = auctionLocations.begin(); iter != auctionLocations.end(); ++iter)
|
||||
{
|
||||
AuctionMarket::getInstance().onReceiveAuctionLocations(iter->locationId, iter->locationName, iter->ownerId, iter->salesTax, iter->salesTaxBankId, iter->emptyDate, iter->lastAccessDate, iter->inactiveDate, iter->status, iter->searchEnabled, iter->entranceCharge);
|
||||
currentLocationCount++;
|
||||
if (currentLocationCount - lastLocationCount >= 1000)
|
||||
{
|
||||
DEBUG_REPORT_LOG(true, (" -- %d AuctionLocations record received\n", currentLocationCount));
|
||||
LOG("CommoditiesServer", ("%d AuctionLocations record received", currentLocationCount));
|
||||
lastLocationCount = currentLocationCount;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (msg.isType("GetMarketAuctionsMessage"))
|
||||
{
|
||||
if (currentLocationCount != lastLocationCount)
|
||||
{
|
||||
DEBUG_REPORT_LOG(true, (" -- %d AuctionLocations record received\n", currentLocationCount));
|
||||
LOG("CommoditiesServer", ("%d AuctionLocations record received\n", currentLocationCount));
|
||||
lastLocationCount = currentLocationCount;
|
||||
}
|
||||
GetMarketAuctionsMessage m(ri);
|
||||
const std::list<GetMarketAuctionsMessage::MarketAuction> & auctions = m.getAuctions();
|
||||
for (std::list<GetMarketAuctionsMessage::MarketAuction>::const_iterator iter = auctions.begin(); iter != auctions.end(); ++iter)
|
||||
{
|
||||
AuctionMarket::getInstance().onReceiveMarketAuctions(iter->itemId, iter->ownerId, iter->creatorId, iter->locationId, iter->minBid, iter->buyNowPrice, iter->auctionTimer, iter->oob, iter->userDescription, iter->category, iter->itemTemplateId, iter->itemName, iter->itemTimer, iter->active, iter->itemSize);
|
||||
currentAuctionCount++;
|
||||
if (currentAuctionCount - lastAuctionCount >= 10000)
|
||||
{
|
||||
DEBUG_REPORT_LOG(true, (" -- %d MarketAuctions record received\n", currentAuctionCount));
|
||||
LOG("CommoditiesServer", ("%d MarketAuctions record received", currentAuctionCount));
|
||||
lastAuctionCount = currentAuctionCount;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (msg.isType("GetMarketAuctionAttributesMessage"))
|
||||
{
|
||||
if (currentLocationCount != lastLocationCount)
|
||||
{
|
||||
DEBUG_REPORT_LOG(true, (" -- %d AuctionLocations record received\n", currentLocationCount));
|
||||
LOG("CommoditiesServer", ("%d AuctionLocations record received\n", currentLocationCount));
|
||||
lastLocationCount = currentLocationCount;
|
||||
}
|
||||
if (currentAuctionCount != lastAuctionCount)
|
||||
{
|
||||
DEBUG_REPORT_LOG(true, (" -- %d MarketAuctions record received\n", currentAuctionCount));
|
||||
LOG("CommoditiesServer", ("%d MarketAuctions record received\n", currentAuctionCount));
|
||||
lastAuctionCount = currentAuctionCount;
|
||||
}
|
||||
GetMarketAuctionAttributesMessage m(ri);
|
||||
const std::list<GetMarketAuctionAttributesMessage::MarketAuctionAttribute> & attributes = m.getAttributes();
|
||||
for (std::list<GetMarketAuctionAttributesMessage::MarketAuctionAttribute>::const_iterator iter = attributes.begin(); iter != attributes.end(); ++iter)
|
||||
{
|
||||
AuctionMarket::getInstance().onReceiveMarketAuctionAttributes(iter->itemId, iter->attributeName, iter->attributeValue);
|
||||
currentAuctionAttributeCount++;
|
||||
if (currentAuctionAttributeCount - lastAuctionAttributeCount >= 10000)
|
||||
{
|
||||
DEBUG_REPORT_LOG(true, (" -- %d MarketAuctionAttributes record received\n", currentAuctionAttributeCount));
|
||||
LOG("CommoditiesServer", ("%d MarketAuctionAttributes record received", currentAuctionAttributeCount));
|
||||
lastAuctionAttributeCount = currentAuctionAttributeCount;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (msg.isType("GetMarketAuctionBidsMessage"))
|
||||
{
|
||||
if (currentLocationCount != lastLocationCount)
|
||||
{
|
||||
DEBUG_REPORT_LOG(true, (" -- %d AuctionLocations record received\n", currentLocationCount));
|
||||
LOG("CommoditiesServer", ("%d AuctionLocations record received\n", currentLocationCount));
|
||||
lastLocationCount = currentLocationCount;
|
||||
}
|
||||
if (currentAuctionCount != lastAuctionCount)
|
||||
{
|
||||
DEBUG_REPORT_LOG(true, (" -- %d MarketAuctions record received\n", currentAuctionCount));
|
||||
LOG("CommoditiesServer", ("%d MarketAuctions record received\n", currentAuctionCount));
|
||||
lastAuctionCount = currentAuctionCount;
|
||||
}
|
||||
if (currentAuctionAttributeCount != lastAuctionAttributeCount)
|
||||
{
|
||||
DEBUG_REPORT_LOG(true, (" -- %d MarketAuctionAttributes record received\n", currentAuctionAttributeCount));
|
||||
LOG("CommoditiesServer", ("%d MarketAuctionAttributes record received\n", currentAuctionAttributeCount));
|
||||
lastAuctionAttributeCount = currentAuctionAttributeCount;
|
||||
}
|
||||
GetMarketAuctionBidsMessage m(ri);
|
||||
const std::list<GetMarketAuctionBidsMessage::MarketAuctionBid> & bids = m.getMarketAuctionBids();
|
||||
for (std::list<GetMarketAuctionBidsMessage::MarketAuctionBid>::const_iterator iter = bids.begin(); iter != bids.end(); ++iter)
|
||||
{
|
||||
AuctionMarket::getInstance().onReceiveMarketAuctionBids(iter->itemId, iter->bidderId, iter->bid, iter->maxProxyBid);
|
||||
currentBidCount++;
|
||||
if (currentBidCount - lastBidCount >= 1000)
|
||||
{
|
||||
DEBUG_REPORT_LOG(true, (" -- %d MarketAuctionBids record received\n", currentBidCount));
|
||||
LOG("CommoditiesServer", ("%d MarketAuctionBids record received\n", currentBidCount));
|
||||
lastBidCount = currentBidCount;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(msg.isType("DeleteCharacterMessage"))
|
||||
{
|
||||
DeleteCharacterMessage message(ri);
|
||||
AuctionMarket::getInstance().DeleteCharacter(message);
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
|
||||
Reference in New Issue
Block a user