mirror of
https://bitbucket.org/theswgsource/src-1.2.git
synced 2026-10-13 03:13:11 -04:00
Added TransferServer project and CTServiceGameAPI library
This commit is contained in:
@@ -0,0 +1,336 @@
|
||||
// CTSAPIClient.h
|
||||
// Copyright 2000-01, Sony Online Entertainment Inc., all rights reserved.
|
||||
// Author: Justin Randall
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
#include "FirstTransferServer.h"
|
||||
#include "CentralServerConnection.h"
|
||||
#include "ConfigTransferServer.h"
|
||||
#include "CTSAPIClient.h"
|
||||
#include "CTCommon/CTServiceServer.h"
|
||||
#include <map>
|
||||
#include "sharedLog/Log.h"
|
||||
#include "TransferServer.h"
|
||||
#include "UnicodeUtils.h"
|
||||
#include <set>
|
||||
#include <vector>
|
||||
|
||||
class CentralServerConnection;
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
namespace CTSAPIClientNamespace
|
||||
{
|
||||
struct TransactionTrackData
|
||||
{
|
||||
const CentralServerConnection * m_sourceCentralServerConnection;
|
||||
const CentralServerConnection * m_destinationCentralServerConnection;
|
||||
unsigned int m_track;
|
||||
};
|
||||
|
||||
std::map<unsigned int, TransactionTrackData> s_activeTransfers;
|
||||
std::map<unsigned int, int> s_completedTransfers;
|
||||
}
|
||||
using namespace CTSAPIClientNamespace;
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
CTSAPIClient::CTSAPIClient(const std::string & hostName, const std::string & game) :
|
||||
CTServiceAPI(hostName.c_str(), game.c_str())
|
||||
{
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
CTSAPIClient::~CTSAPIClient()
|
||||
{
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
void CTSAPIClient::onTest(const unsigned track, const int resultCode, const unsigned value, void *user)
|
||||
{
|
||||
LOG("CTSAPI", ("CTSAPIClient::onTest(%d, %d, %d, %p)", track, resultCode, value, user));
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
void CTSAPIClient::onReplyTest(const unsigned track, const int resultCode, void *user)
|
||||
{
|
||||
LOG("CTSAPI", ("CTSAPIClient::onReplyTest(%d, %d, %p)", track, resultCode, user));
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
void CTSAPIClient::onReplyMoveStatus(const unsigned track, const int resultCode, void *user)
|
||||
{
|
||||
LOG("CTSAPI", ("CTSAPIClient::onReplyMoveStatus(%d, %d, %p)", track, resultCode, user));
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
void CTSAPIClient::onReplyValidateMove(const unsigned track, const int resultCode, void *user)
|
||||
{
|
||||
LOG("CTSAPI", ("CTSAPIClient::onReplyValidateMove(%d, %d, %p)", track, resultCode, user));
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
void CTSAPIClient::onReplyMove(const unsigned track, const int resultCode, void *user)
|
||||
{
|
||||
LOG("CTSAPI", ("CTSAPIClient::onReplyMove(%d, %d, %p)", track, resultCode, user));
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
void CTSAPIClient::onReplyTransferAccount(const unsigned track, const int resultCode, void *user)
|
||||
{
|
||||
LOG("CTSAPI", ("CTSAPIClient::onReplyTransferAccount(%d, %d, %p)", track, resultCode, user));
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
void CTSAPIClient::onReplyCharacterList(const unsigned track, const int resultCode, void *user)
|
||||
{
|
||||
LOG("CTSAPI", ("CTSAPIClient::onReplyCharacterList(%d, %d, %p)", track, resultCode, user));
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
void CTSAPIClient::onReplyServerList(const unsigned track, const int resultCode, void *user)
|
||||
{
|
||||
LOG("CTSAPI", ("CTSAPIClient::onReplyServerList(%d, %d, %p)",track, resultCode, user));
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
void CTSAPIClient::onReplyDestinationServerList(const unsigned track, const int resultCode, void *user)
|
||||
{
|
||||
LOG("CTSAPI", ("CTSAPIClient::onReplyDestinationServerList(%d, %d, %p)", track, resultCode, user));
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
void CTSAPIClient::onServerTest(const unsigned server_track, const char *game, const char *param)
|
||||
{
|
||||
LOG("CTSAPI", ("CTSAPIClient::onServerTest(%d, %s, %s)", server_track, game, param));
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
void CTSAPIClient::onRequestMoveStatus(const unsigned server_track, const char *language, const unsigned transactionID)
|
||||
{
|
||||
LOG("CTSAPI", ("CTSAPIClient::onRequestMoveStatus(%d, %s, %d)", server_track, language, transactionID));
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
void CTSAPIClient::onRequestValidateMove(const unsigned server_track, const char *language, const CTService::CTUnicodeChar *sourceServer, const CTService::CTUnicodeChar *destServer, const CTService::CTUnicodeChar *sourceCharacter, const CTService::CTUnicodeChar *destCharacter, const unsigned uid, const unsigned destuid, bool /*withItems*/, bool /*allowOverride*/)
|
||||
{
|
||||
LOG("CTSAPI", ("CTSAPIClient::onRequestValidateMove(%d, %s, %s, %s, %s, %s, %d, %d", server_track, language, Unicode::wideToNarrow(sourceServer).c_str(), Unicode::wideToNarrow(destServer).c_str(), Unicode::wideToNarrow(sourceCharacter).c_str(), Unicode::wideToNarrow(destCharacter).c_str(), uid, destuid));
|
||||
TransferServer::requestMoveValidation(server_track, uid, destuid, Unicode::wideToNarrow(Unicode::String(sourceServer)), Unicode::wideToNarrow(Unicode::String(destServer)), Unicode::wideToNarrow(Unicode::String(sourceCharacter)), Unicode::wideToNarrow(Unicode::String(destCharacter)), std::string(language));
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
void CTSAPIClient::onRequestMove(const unsigned server_track, const char *language, const CTService::CTUnicodeChar *sourceServer, const CTService::CTUnicodeChar *destServer, const CTService::CTUnicodeChar *sourceCharacter, const CTService::CTUnicodeChar *destCharacter, const unsigned uid, const unsigned destuid, const unsigned transactionID, bool withItems, bool allowOverride)
|
||||
{
|
||||
std::map<unsigned int, TransactionTrackData>::const_iterator f = s_activeTransfers.find(uid);
|
||||
if(f == s_activeTransfers.end())
|
||||
{
|
||||
std::string isWithItems = "false";
|
||||
if(withItems)
|
||||
isWithItems = "true";
|
||||
LOG("CTSAPI", ("CTSAPIClient::onRequestMove(%d, %s, %s, %s, %s, %s, %d, %d, %d, %s)", server_track, language, Unicode::wideToNarrow(sourceServer).c_str(), Unicode::wideToNarrow(destServer).c_str(), Unicode::wideToNarrow(sourceCharacter).c_str(), Unicode::wideToNarrow(destCharacter).c_str(), uid, destuid, transactionID, isWithItems.c_str()));
|
||||
TransferServer::requestMove(server_track, std::string(language), Unicode::wideToNarrow(Unicode::String(sourceServer)), Unicode::wideToNarrow(Unicode::String(destServer)), Unicode::wideToNarrow(Unicode::String(sourceCharacter)), Unicode::wideToNarrow(Unicode::String(destCharacter)), uid, destuid, transactionID, withItems, allowOverride);
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG("CTSAPI", ("Received a transfer request for station ID %d, but a transfer for that id is already in progress", uid));
|
||||
const unsigned int result = static_cast<unsigned int>(CTService::CT_GAMERESULT_SOFTERROR);
|
||||
IGNORE_RETURN(replyMove(server_track, result, NULL, NULL));
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
void CTSAPIClient::onRequestTransferAccount(const unsigned server_track, const unsigned uid, const unsigned destuid, const unsigned transactionID)
|
||||
{
|
||||
std::map<unsigned int, TransactionTrackData>::const_iterator f = s_activeTransfers.find(uid);
|
||||
if(f == s_activeTransfers.end())
|
||||
{
|
||||
LOG("CTSAPI", ("CTSAPIClient::onRequestTransferAccount(%d, d, %d, %d)", server_track, uid, destuid, transactionID));
|
||||
TransferServer::requestTransferAccount(server_track, uid, destuid, transactionID);
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG("CTSAPI", ("Received a transfer request for station ID %d, but a transfer for that id is already in progress", uid));
|
||||
const unsigned int result = static_cast<unsigned int>(CTService::CT_GAMERESULT_SOFTERROR);
|
||||
IGNORE_RETURN(replyTransferAccount(server_track, result, NULL, NULL));
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
void CTSAPIClient::onRequestCharacterList(const unsigned server_track, const char *language, const CTService::CTUnicodeChar *server, const unsigned uid)
|
||||
{
|
||||
LOG("CTSAPI", ("CTSAPIClient::onRequestCharacterList(%d, %s, %s, %d)", server_track, language, Unicode::wideToNarrow(server).c_str(), uid));
|
||||
TransferServer::requestCharacterList(server_track, uid, Unicode::wideToNarrow(Unicode::String(server)), std::string(language));
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
void CTSAPIClient::onRequestServerList(const unsigned server_track, const char *language)
|
||||
{
|
||||
LOG("CTSAPI", ("CTSAPIClient::onRequestServerList(%d, %s)", server_track, language));
|
||||
std::map<std::string, CentralServerConnection *> galaxies = CentralServerConnection::getGalaxies();
|
||||
std::vector<CTService::CTServiceServer> servers;
|
||||
std::vector<std::string>::const_iterator i;
|
||||
|
||||
for (i = ConfigTransferServer::getServersAllowedToUploadCharacterData().begin(); i != ConfigTransferServer::getServersAllowedToUploadCharacterData().end(); ++i)
|
||||
{
|
||||
std::map<std::string, CentralServerConnection *>::iterator f = galaxies.find(*i);
|
||||
if(f != galaxies.end())
|
||||
{
|
||||
servers.push_back(CTService::CTServiceServer(Unicode::narrowToWide(i->c_str()).c_str()));
|
||||
}
|
||||
}
|
||||
if(! servers.empty())
|
||||
{
|
||||
const unsigned int result = static_cast<unsigned int>(CTService::CT_RESULT_SUCCESS);
|
||||
IGNORE_RETURN(replyServerList(server_track, result, servers.size(), &servers[0], NULL));
|
||||
}
|
||||
else
|
||||
{
|
||||
const unsigned int result = static_cast<unsigned int>(CTService::CT_RESULT_FAILURE);
|
||||
IGNORE_RETURN(replyServerList(server_track, result, servers.size(), NULL, NULL));
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
void CTSAPIClient::onRequestDestinationServerList(const unsigned server_track, const char *language, const CTService::CTUnicodeChar *character, const CTService::CTUnicodeChar *server)
|
||||
{
|
||||
LOG("CTSAPI", ("CTSAPIClient::onRequestDestinationServerList(%d, %s, %s, %s)", server_track, language, Unicode::wideToNarrow(character).c_str(), Unicode::wideToNarrow(server).c_str()));
|
||||
std::map<std::string, CentralServerConnection *> galaxies = CentralServerConnection::getGalaxies();
|
||||
std::vector<CTService::CTServiceServer> servers;
|
||||
std::vector<std::string>::const_iterator i;
|
||||
|
||||
for (i = ConfigTransferServer::getServersAllowedToDownloadCharacterData().begin(); i != ConfigTransferServer::getServersAllowedToDownloadCharacterData().end(); ++i)
|
||||
{
|
||||
std::map<std::string, CentralServerConnection *>::iterator f = galaxies.find(*i);
|
||||
if(f != galaxies.end())
|
||||
{
|
||||
servers.push_back(CTService::CTServiceServer(Unicode::narrowToWide(i->c_str()).c_str()));
|
||||
}
|
||||
}
|
||||
if(! servers.empty())
|
||||
{
|
||||
const unsigned int result = static_cast<unsigned int>(CTService::CT_RESULT_SUCCESS);
|
||||
IGNORE_RETURN(replyDestinationServerList(server_track, result, servers.size(), &servers[0], NULL));
|
||||
}
|
||||
else
|
||||
{
|
||||
const unsigned int result = static_cast<unsigned int>(CTService::CT_RESULT_FAILURE);
|
||||
IGNORE_RETURN(replyDestinationServerList(server_track, result, servers.size(), NULL, NULL));
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
void CTSAPIClient::onConnect(const char *host, const short port, const short current, const short max)
|
||||
{
|
||||
LOG("CTSAPI", ("CTSAPIClient::onConnect(%s, %d, %d, %d)", host, port, current, max));
|
||||
REPORT_LOG(true, ("CTSAPIClient::onConnect(%s, %d, %d, %d)\n", host, port, current, max));
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
|
||||
void CTSAPIClient::onDisconnect(const char *host, const short port, const short current, const short max)
|
||||
{
|
||||
LOG("CTSAPI", ("CTSAPIClient::onDisconnect(%s, %d, %d, %d)", host, port, current, max));
|
||||
REPORT_LOG(true, ("CTSAPIClient::onDisconnect(%s, %d, %d, %d)\n", host, port, current, max));
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
void CTSAPIClient::moveStart(unsigned int stationId, unsigned int track, const CentralServerConnection * sourceCentralServerConnection, const CentralServerConnection * destinationCentralServerConnection)
|
||||
{
|
||||
// first check to see if this track has been completed
|
||||
std::map<unsigned int, int>::iterator f = s_completedTransfers.find(track);
|
||||
if(f != s_completedTransfers.end())
|
||||
{
|
||||
IGNORE_RETURN(replyMove(track, f->second, NULL, NULL));
|
||||
}
|
||||
else
|
||||
{
|
||||
TransactionTrackData trackData;
|
||||
trackData.m_destinationCentralServerConnection = destinationCentralServerConnection;
|
||||
trackData.m_sourceCentralServerConnection = sourceCentralServerConnection;
|
||||
trackData.m_track = track;
|
||||
IGNORE_RETURN(s_activeTransfers.insert(std::make_pair(stationId, trackData)));
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
void CTSAPIClient::lostCentralServerConnection(const CentralServerConnection * centralServerConnection)
|
||||
{
|
||||
// send a failure response to the CTS backend for all id's with
|
||||
// a transaction in progress on the dead server
|
||||
std::map<unsigned int, TransactionTrackData>::iterator i;
|
||||
const unsigned int result = static_cast<unsigned int>(CTService::CT_GAMERESULT_SERVER_IS_DOWN);
|
||||
for(i = s_activeTransfers.begin(); i != s_activeTransfers.end();)
|
||||
{
|
||||
if(i->second.m_sourceCentralServerConnection == centralServerConnection || i->second.m_destinationCentralServerConnection == centralServerConnection)
|
||||
{
|
||||
IGNORE_RETURN(replyMove(i->second.m_track, result, NULL, NULL));
|
||||
s_activeTransfers.erase(i++);
|
||||
}
|
||||
else
|
||||
{
|
||||
++i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
// NOT IMPLEMENTED IN SWG TRANSFER SERVICE
|
||||
void CTSAPIClient::moveComplete(unsigned int id, unsigned int track, int result) const
|
||||
{
|
||||
std::map<unsigned int, TransactionTrackData>::iterator f = s_activeTransfers.find(id);
|
||||
if(f != s_activeTransfers.end())
|
||||
{
|
||||
s_activeTransfers.erase(f);
|
||||
}
|
||||
if(track != 0)
|
||||
{
|
||||
s_completedTransfers.insert(std::make_pair(track, result));
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
// NOT IMPLEMENTED IN SWG TRANSFER SERVICE
|
||||
void CTSAPIClient::onReplyDelete(const unsigned int, const int, void *)
|
||||
{
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
// NOT IMPLEMENTED IN SWG TRANSFER SERVICE
|
||||
void CTSAPIClient::onReplyRestore(const unsigned int, const int, void *)
|
||||
{
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
// NOT IMPLEMENTED IN SWG TRANSFER SERVICE
|
||||
void CTSAPIClient::onRequestDelete(const unsigned int, const char *, const CTService::CTUnicodeChar *, const CTService::CTUnicodeChar *, const CTService::CTUnicodeChar *, const CTService::CTUnicodeChar *, const unsigned int, const unsigned int, const unsigned int, bool, bool)
|
||||
{
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
// NOT IMPLEMENTED IN SWG TRANSFER SERVICE
|
||||
void CTSAPIClient::onRequestRestore(const unsigned int, const char *, const CTService::CTUnicodeChar *, const CTService::CTUnicodeChar *, const CTService::CTUnicodeChar *, const CTService::CTUnicodeChar *, const unsigned int, const unsigned int, const unsigned int, bool, bool)
|
||||
{
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
Reference in New Issue
Block a user