mirror of
https://bitbucket.org/theswgsource/src-1.2.git
synced 2026-07-28 23:16:15 -04:00
293 lines
8.5 KiB
C++
293 lines
8.5 KiB
C++
#include <conio.h>
|
|
#include <time.h>
|
|
#include <stdio.h>
|
|
#include <map>
|
|
#include "CTServiceGameAPI/CTServiceAPI.h"
|
|
|
|
namespace CTService
|
|
{
|
|
class Client : public CTServiceAPI
|
|
{
|
|
public:
|
|
Client(const char *hostList, const char *game);
|
|
virtual ~Client();
|
|
|
|
virtual void onConnect(const char *host, const short port, const short current, const short max);
|
|
virtual void onDisconnect(const char *host, const short port, const short current, const short max);
|
|
|
|
virtual void onTest(const unsigned track, const int resultCode, const unsigned value, void *user);
|
|
virtual void onReplyTest(const unsigned track, const int resultCode, void *user);
|
|
virtual void onReplyMoveStatus(const unsigned track, const int resultCode, void *user);
|
|
virtual void onReplyValidateMove(const unsigned track, const int resultCode, void *user);
|
|
virtual void onReplyMove(const unsigned track, const int resultCode, void *user);
|
|
virtual void onReplyCharacterList(const unsigned track, const int resultCode, void *user);
|
|
virtual void onReplyServerList(const unsigned track, const int resultCode, void *user);
|
|
virtual void onReplyDestinationServerList(const unsigned track, const int resultCode, void *user);
|
|
|
|
virtual void onServerTest(const unsigned server_track, const char *game, const char *param);
|
|
virtual void onRequestMoveStatus(const unsigned server_track, const char *language,
|
|
const unsigned transactionID);
|
|
virtual void onRequestValidateMove(const unsigned server_track, const char *language,
|
|
const CTUnicodeChar *sourceServer,
|
|
const CTUnicodeChar *destServer,
|
|
const CTUnicodeChar *sourceCharacter,
|
|
const CTUnicodeChar *destCharacter, const unsigned uid,
|
|
const unsigned destuid, bool withItems);
|
|
virtual void onRequestMove(const unsigned server_track, const char *language,
|
|
const CTUnicodeChar *sourceServer,
|
|
const CTUnicodeChar *destServer,
|
|
const CTUnicodeChar *sourceCharacter,
|
|
const CTUnicodeChar *destCharacter, const unsigned uid,
|
|
const unsigned destuid, const unsigned transactionID, bool withItems);
|
|
virtual void onRequestCharacterList(const unsigned server_track, const char *language,
|
|
const CTUnicodeChar *server, const unsigned uid);
|
|
virtual void onRequestServerList(const unsigned server_track, const char *language);
|
|
virtual void onRequestDestinationServerList(const unsigned server_track, const char *language,
|
|
const CTUnicodeChar *character, const CTUnicodeChar *server);
|
|
|
|
std::map<unsigned, unsigned> mTransactionMap;
|
|
};
|
|
|
|
Client::Client(const char *hostList, const char *game) :
|
|
CTServiceAPI(hostList, game),
|
|
mTransactionMap()
|
|
{
|
|
}
|
|
|
|
Client::~Client()
|
|
{
|
|
}
|
|
|
|
void Client::onConnect(const char *host,
|
|
const short port,
|
|
const short current,
|
|
const short max)
|
|
{
|
|
printf("onConnect(%s, %u, %d, %d)\n",host,port,current,max);
|
|
}
|
|
|
|
void Client::onDisconnect(const char *host,
|
|
const short port,
|
|
const short current,
|
|
const short max)
|
|
{
|
|
printf("onDisconnect(%s, %u, %d, %d)\n",host,port,current,max);
|
|
}
|
|
|
|
void Client::onTest(const unsigned track,
|
|
const int resultCode,
|
|
const unsigned value,
|
|
void *user)
|
|
{
|
|
printf("onTest(%u, %d, %u, 0x%x)\n", track, resultCode, value, user);
|
|
}
|
|
|
|
void Client::onReplyTest(const unsigned track,
|
|
const int resultCode,
|
|
void *user)
|
|
{
|
|
printf("onReplyTest(%u, %d, 0x%x)\n", track, resultCode, user);
|
|
}
|
|
|
|
void Client::onReplyMoveStatus(const unsigned track,
|
|
const int resultCode,
|
|
void *user)
|
|
{
|
|
printf("onReplyMoveStatus(%u, %d, 0x%x)\n", track, resultCode, user);
|
|
}
|
|
|
|
void Client::onReplyValidateMove(const unsigned track,
|
|
const int resultCode,
|
|
void *user)
|
|
{
|
|
printf("onReplyValidateMove(%u, %d, 0x%x)\n", track, resultCode, user);
|
|
}
|
|
|
|
void Client::onReplyMove(const unsigned track,
|
|
const int resultCode,
|
|
void *user)
|
|
{
|
|
printf("onReplyMove(%u, %d, 0x%x)\n", track, resultCode, user);
|
|
}
|
|
|
|
void Client::onReplyCharacterList(const unsigned track,
|
|
const int resultCode,
|
|
void *user)
|
|
{
|
|
printf("onReplyCharacterList(%u, %d, 0x%x)\n", track, resultCode, user);
|
|
}
|
|
|
|
void Client::onReplyServerList(const unsigned track,
|
|
const int resultCode,
|
|
void *user)
|
|
{
|
|
printf("onReplyServerList(%u, %d, 0x%x)\n", track, resultCode, user);
|
|
}
|
|
|
|
void Client::onReplyDestinationServerList(const unsigned track,
|
|
const int resultCode,
|
|
void *user)
|
|
{
|
|
printf("onReplyDestinationServerList(%u, %d, 0x%x)\n", track, resultCode, user);
|
|
}
|
|
|
|
void Client::onServerTest(const unsigned server_track,
|
|
const char *game,
|
|
const char *param)
|
|
{
|
|
printf("onServerTest(%u, %s, %s)\n", server_track, game ? game : "(null)", param ? param : "(null)");
|
|
replyTest(server_track, 999, 0);
|
|
}
|
|
|
|
void Client::onRequestMoveStatus(const unsigned server_track,
|
|
const char *language,
|
|
const unsigned transactionID)
|
|
{
|
|
unsigned status;
|
|
unsigned result;
|
|
unsigned short * reason = L"makes me horny it does";
|
|
|
|
printf("#%x onRequestMoveStatus(%s, #%u)\n",
|
|
server_track,
|
|
language,
|
|
transactionID);
|
|
|
|
if (mTransactionMap.find(transactionID) != mTransactionMap.end())
|
|
{
|
|
status = CT_STATUS_COMPLETE;
|
|
result = mTransactionMap[transactionID];
|
|
}
|
|
else
|
|
{
|
|
status = CT_STATUS_UNKNOWN;
|
|
result = CT_GAMERESULT_SUCCESS;
|
|
}
|
|
|
|
replyMoveStatus(server_track, status, result, reason, 0);
|
|
}
|
|
|
|
void Client::onRequestValidateMove(const unsigned server_track,
|
|
const char *language,
|
|
const CTUnicodeChar *sourceServer,
|
|
const CTUnicodeChar *destServer,
|
|
const CTUnicodeChar *sourceCharacter,
|
|
const CTUnicodeChar *destCharacter,
|
|
const unsigned uid,
|
|
const unsigned destuid, bool withItems)
|
|
{
|
|
static resultArray[4] = {CT_GAMERESULT_SUCCESS, CT_GAMERESULT_SOFTERROR, CT_GAMERESULT_HARDERROR, CT_GAMERESULT_INVALID_NAME};
|
|
static resultIndex = 0;
|
|
|
|
printf("#%x onRequestValidateMove(%s): server(%S > %S) character (%S > %S) user(%u > %u) %s\n",
|
|
server_track,
|
|
language,
|
|
sourceServer,
|
|
destServer,
|
|
sourceCharacter,
|
|
destCharacter,
|
|
uid,
|
|
destuid,
|
|
withItems ? "/w items" : "/wo items");
|
|
|
|
int result = resultArray[(resultIndex++)%4];
|
|
unsigned short * reason = L"makes me horny it does";
|
|
unsigned short * suggested = L"yoda";
|
|
|
|
replyValidateMove(server_track, result, reason, suggested, 0);
|
|
}
|
|
|
|
void Client::onRequestMove(const unsigned server_track,
|
|
const char *language,
|
|
const CTUnicodeChar *sourceServer,
|
|
const CTUnicodeChar *destServer,
|
|
const CTUnicodeChar *sourceCharacter,
|
|
const CTUnicodeChar *destCharacter,
|
|
const unsigned uid,
|
|
const unsigned destuid,
|
|
const unsigned transactionID, bool withItems)
|
|
{
|
|
static resultArray[4] = {CT_GAMERESULT_SUCCESS, CT_GAMERESULT_SOFTERROR, CT_GAMERESULT_HARDERROR, CT_GAMERESULT_INVALID_NAME};
|
|
static resultIndex = 0;
|
|
|
|
printf("#%x onRequestMove(%s, #%u): server(%S > %S) character (%S > %S) user(%u > %u) %s\n",
|
|
server_track,
|
|
language,
|
|
transactionID,
|
|
sourceServer,
|
|
destServer,
|
|
sourceCharacter,
|
|
destCharacter,
|
|
uid,
|
|
destuid,
|
|
withItems ? "/w items" : "/wo items");
|
|
|
|
int result = resultArray[(resultIndex++)%4];
|
|
unsigned short * reason = L"makes me horny it does";
|
|
unsigned short * suggested = L"yoda";
|
|
mTransactionMap[transactionID] = result;
|
|
replyMove(server_track, result, reason, 0);
|
|
}
|
|
|
|
void Client::onRequestCharacterList(const unsigned server_track,
|
|
const char *language,
|
|
const CTUnicodeChar *server,
|
|
const unsigned uid)
|
|
{
|
|
CTServiceCharacter characters[4] =
|
|
{
|
|
L"wussup1",
|
|
L"wussup2",
|
|
L"wussup3",
|
|
L"wussup4"
|
|
};
|
|
|
|
printf("#%x onRequestCharacterList(%s, %S, %u)\n", server_track, language, server,uid);
|
|
replyCharacterList(server_track, CT_GAMERESULT_SUCCESS, 4, characters, 0);
|
|
}
|
|
|
|
void Client::onRequestServerList(const unsigned server_track,
|
|
const char *language)
|
|
{
|
|
CTServiceServer servers[4] =
|
|
{
|
|
L"crib1",
|
|
L"crib2",
|
|
L"crib3",
|
|
L"crib4"
|
|
};
|
|
|
|
printf("#%x onRequestServerList(%s)\n", server_track, language);
|
|
replyServerList(server_track, CT_GAMERESULT_SUCCESS, 4, servers, 0);
|
|
}
|
|
|
|
void Client::onRequestDestinationServerList(const unsigned server_track,
|
|
const char *language,
|
|
const CTUnicodeChar *character,
|
|
const CTUnicodeChar *server)
|
|
{
|
|
CTServiceServer servers[2] =
|
|
{
|
|
L"crib5",
|
|
L"crib6"
|
|
};
|
|
|
|
printf("#%x onRequestDestinationServerList(%s)\n", server_track, language);
|
|
replyDestinationServerList(server_track, CT_GAMERESULT_SUCCESS, 2, servers, 0);
|
|
}
|
|
|
|
}
|
|
|
|
int main()
|
|
{
|
|
char * hostList = "sdplatdev2:2000";
|
|
char * game = "SWG";
|
|
CTService::Client client(hostList, game);
|
|
while (!kbhit())
|
|
{
|
|
client.process();
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|