You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
6133 lines
152 KiB
6133 lines
152 KiB
4 years ago
|
/*==LICENSE==*
|
||
|
|
||
|
CyanWorlds.com Engine - MMOG client, server and tools
|
||
|
Copyright (C) 2011 Cyan Worlds, Inc.
|
||
|
|
||
|
This program is free software: you can redistribute it and/or modify
|
||
|
it under the terms of the GNU General Public License as published by
|
||
|
the Free Software Foundation, either version 3 of the License, or
|
||
|
(at your option) any later version.
|
||
|
|
||
|
This program is distributed in the hope that it will be useful,
|
||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
GNU General Public License for more details.
|
||
|
|
||
|
You should have received a copy of the GNU General Public License
|
||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||
|
|
||
|
Additional permissions under GNU GPL version 3 section 7
|
||
|
|
||
|
If you modify this Program, or any covered work, by linking or
|
||
|
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||
|
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||
|
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||
|
(or a modified version of those libraries),
|
||
|
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||
|
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||
|
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||
|
licensors of this Program grant you additional
|
||
|
permission to convey the resulting work. Corresponding Source for a
|
||
|
non-source form of such a combination shall include the source code for
|
||
|
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||
|
work.
|
||
|
|
||
|
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||
|
or by snail mail at:
|
||
|
Cyan Worlds, Inc.
|
||
|
14617 N Newport Hwy
|
||
|
Mead, WA 99021
|
||
|
|
||
|
*==LICENSE==*/
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* $/Plasma20/Sources/Plasma/PubUtilLib/plNetGameLib/Private/plNglAuth.cpp
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
#include "../Pch.h"
|
||
|
#pragma hdrstop
|
||
|
|
||
|
// This file excluded from pre-compiled header because it is auto-generated by the build server.
|
||
|
#include "pnNetBase/pnNbAuthKey.hpp"
|
||
|
|
||
|
namespace Ngl { namespace Auth {
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* Private
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
struct CliAuConn : AtomicRef {
|
||
|
CliAuConn ();
|
||
|
~CliAuConn ();
|
||
|
|
||
|
// Reconnection
|
||
|
AsyncTimer * reconnectTimer;
|
||
|
unsigned reconnectStartMs;
|
||
|
|
||
|
// Ping
|
||
|
AsyncTimer * pingTimer;
|
||
|
unsigned pingSendTimeMs;
|
||
|
unsigned lastHeardTimeMs;
|
||
|
|
||
|
// This function should be called during object construction
|
||
|
// to initiate connection attempts to the remote host whenever
|
||
|
// the socket is disconnected.
|
||
|
void AutoReconnect ();
|
||
|
bool AutoReconnectEnabled ();
|
||
|
void StopAutoReconnect (); // call before destruction
|
||
|
void StartAutoReconnect ();
|
||
|
void TimerReconnect ();
|
||
|
|
||
|
// ping
|
||
|
void AutoPing ();
|
||
|
void StopAutoPing ();
|
||
|
void TimerPing ();
|
||
|
|
||
|
void Send (const unsigned_ptr fields[], unsigned count);
|
||
|
|
||
|
CCritSect critsect;
|
||
|
LINK(CliAuConn) link;
|
||
|
AsyncSocket sock;
|
||
|
NetCli * cli;
|
||
|
wchar name[MAX_PATH];
|
||
|
NetAddress addr;
|
||
|
Uuid token;
|
||
|
unsigned seq;
|
||
|
unsigned serverChallenge;
|
||
|
AsyncCancelId cancelId;
|
||
|
bool abandoned;
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// PingRequestTrans
|
||
|
//============================================================================
|
||
|
struct PingRequestTrans : NetAuthTrans {
|
||
|
FNetCliAuthPingRequestCallback m_callback;
|
||
|
void * m_param;
|
||
|
unsigned m_pingAtMs;
|
||
|
unsigned m_replyAtMs;
|
||
|
ARRAY(byte) m_payload;
|
||
|
|
||
|
PingRequestTrans (
|
||
|
FNetCliAuthPingRequestCallback callback,
|
||
|
void * param,
|
||
|
unsigned pingAtMs,
|
||
|
unsigned payloadBytes,
|
||
|
const void * payload
|
||
|
);
|
||
|
|
||
|
bool Send ();
|
||
|
void Post ();
|
||
|
bool Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
);
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// AccountExistsRequestTrans
|
||
|
//============================================================================
|
||
|
struct AccountExistsRequestTrans : NetAuthTrans {
|
||
|
FNetCliAuthAccountExistsRequestCallback m_callback;
|
||
|
void * m_param;
|
||
|
|
||
|
// send
|
||
|
wchar m_accountName[kMaxAccountNameLength];
|
||
|
|
||
|
// recv
|
||
|
byte m_exists;
|
||
|
|
||
|
|
||
|
|
||
|
AccountExistsRequestTrans (
|
||
|
FNetCliAuthAccountExistsRequestCallback callback,
|
||
|
void * param,
|
||
|
const wchar accountName[]
|
||
|
);
|
||
|
|
||
|
bool Send ();
|
||
|
void Post ();
|
||
|
bool Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
);
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// LoginRequestTrans
|
||
|
//============================================================================
|
||
|
struct LoginRequestTrans : NetAuthTrans {
|
||
|
FNetCliAuthLoginRequestCallback m_callback;
|
||
|
void * m_param;
|
||
|
|
||
|
Uuid m_accountId;
|
||
|
unsigned m_accountFlags;
|
||
|
unsigned m_billingType;
|
||
|
unsigned m_playerCount;
|
||
|
NetCliAuthPlayerInfo m_players[kMaxPlayersPerAccount];
|
||
|
|
||
|
LoginRequestTrans (
|
||
|
FNetCliAuthLoginRequestCallback callback,
|
||
|
void * param
|
||
|
);
|
||
|
|
||
|
void AddPlayer (
|
||
|
unsigned playerInt,
|
||
|
const wchar playerName[],
|
||
|
const wchar avatarShape[],
|
||
|
unsigned explorer
|
||
|
);
|
||
|
|
||
|
bool Send ();
|
||
|
void Post ();
|
||
|
bool Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
);
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// AgeRequestTrans
|
||
|
//============================================================================
|
||
|
struct AgeRequestTrans : NetAuthTrans {
|
||
|
FNetCliAuthAgeRequestCallback m_callback;
|
||
|
void * m_param;
|
||
|
wchar m_ageName[kMaxAgeNameLength];
|
||
|
unsigned m_ageMcpId;
|
||
|
Uuid m_ageInstId;
|
||
|
unsigned m_ageVaultId;
|
||
|
NetAddressNode m_gameSrvNode;
|
||
|
|
||
|
AgeRequestTrans (
|
||
|
const wchar ageName[],
|
||
|
const Uuid & ageInstId,
|
||
|
FNetCliAuthAgeRequestCallback callback,
|
||
|
void * param
|
||
|
);
|
||
|
~AgeRequestTrans ();
|
||
|
|
||
|
bool Send ();
|
||
|
void Post ();
|
||
|
bool Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
);
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// AccountCreateRequestTrans
|
||
|
//============================================================================
|
||
|
struct AccountCreateRequestTrans : NetAuthTrans {
|
||
|
FNetCliAuthAccountCreateRequestCallback m_callback;
|
||
|
void * m_param;
|
||
|
|
||
|
// send
|
||
|
wchar m_accountName[kMaxAccountNameLength];
|
||
|
ShaDigest m_namePassHash;
|
||
|
unsigned m_accountFlags;
|
||
|
unsigned m_billingType;
|
||
|
|
||
|
// recv
|
||
|
Uuid m_accountId;
|
||
|
|
||
|
AccountCreateRequestTrans (
|
||
|
const wchar accountName[],
|
||
|
const wchar password[],
|
||
|
unsigned accountFlags,
|
||
|
unsigned billingType,
|
||
|
FNetCliAuthAccountCreateRequestCallback callback,
|
||
|
void * param
|
||
|
);
|
||
|
|
||
|
bool Send ();
|
||
|
void Post ();
|
||
|
bool Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
);
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// AccountCreateFromKeyRequestTrans
|
||
|
//============================================================================
|
||
|
struct AccountCreateFromKeyRequestTrans : NetAuthTrans {
|
||
|
FNetCliAuthAccountCreateFromKeyRequestCallback m_callback;
|
||
|
void * m_param;
|
||
|
|
||
|
// send
|
||
|
wchar m_accountName[kMaxAccountNameLength];
|
||
|
ShaDigest m_namePassHash;
|
||
|
Uuid m_key;
|
||
|
unsigned m_billingType;
|
||
|
|
||
|
// recv
|
||
|
Uuid m_accountId;
|
||
|
Uuid m_activationKey;
|
||
|
|
||
|
AccountCreateFromKeyRequestTrans (
|
||
|
const wchar accountName[],
|
||
|
const wchar password[],
|
||
|
const Uuid & key,
|
||
|
unsigned billingType,
|
||
|
FNetCliAuthAccountCreateFromKeyRequestCallback callback,
|
||
|
void * param
|
||
|
);
|
||
|
|
||
|
bool Send ();
|
||
|
void Post ();
|
||
|
bool Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
);
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// PlayerCreateRequestTrans
|
||
|
//============================================================================
|
||
|
struct PlayerCreateRequestTrans : NetAuthTrans {
|
||
|
FNetCliAuthPlayerCreateRequestCallback m_callback;
|
||
|
void * m_param;
|
||
|
|
||
|
// send
|
||
|
wchar m_playerName[kMaxPlayerNameLength];
|
||
|
wchar m_avatarShape[MAX_PATH];
|
||
|
wchar m_friendInvite[MAX_PATH];
|
||
|
|
||
|
// recv
|
||
|
NetCliAuthPlayerInfo m_playerInfo;
|
||
|
|
||
|
|
||
|
PlayerCreateRequestTrans (
|
||
|
const wchar playerName[],
|
||
|
const wchar avatarShape[],
|
||
|
const wchar friendInvite[],
|
||
|
FNetCliAuthPlayerCreateRequestCallback callback,
|
||
|
void * param
|
||
|
);
|
||
|
|
||
|
bool Send ();
|
||
|
void Post ();
|
||
|
bool Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
);
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// PlayerDeleteRequestTrans
|
||
|
//============================================================================
|
||
|
struct PlayerDeleteRequestTrans : NetAuthTrans {
|
||
|
FNetCliAuthPlayerDeleteRequestCallback m_callback;
|
||
|
void * m_param;
|
||
|
|
||
|
// send
|
||
|
unsigned m_playerId;
|
||
|
|
||
|
// recv
|
||
|
NetCliAuthPlayerInfo m_playerInfo;
|
||
|
|
||
|
|
||
|
PlayerDeleteRequestTrans (
|
||
|
unsigned playerId,
|
||
|
FNetCliAuthPlayerDeleteRequestCallback callback,
|
||
|
void * param
|
||
|
);
|
||
|
|
||
|
bool Send ();
|
||
|
void Post ();
|
||
|
bool Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
);
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// UpgradeVisitorRequestTrans
|
||
|
//============================================================================
|
||
|
struct UpgradeVisitorRequestTrans : NetAuthTrans {
|
||
|
FNetCliAuthUpgradeVisitorRequestCallback m_callback;
|
||
|
void * m_param;
|
||
|
|
||
|
// send
|
||
|
unsigned m_playerId;
|
||
|
|
||
|
UpgradeVisitorRequestTrans (
|
||
|
unsigned playerId,
|
||
|
FNetCliAuthUpgradeVisitorRequestCallback callback,
|
||
|
void * param
|
||
|
);
|
||
|
|
||
|
bool Send ();
|
||
|
void Post ();
|
||
|
bool Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
);
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// SetPlayerRequestTrans
|
||
|
//============================================================================
|
||
|
struct SetPlayerRequestTrans : NetAuthTrans {
|
||
|
FNetCliAuthSetPlayerRequestCallback m_callback;
|
||
|
void * m_param;
|
||
|
unsigned m_playerInt;
|
||
|
|
||
|
SetPlayerRequestTrans (
|
||
|
unsigned playerInt,
|
||
|
FNetCliAuthSetPlayerRequestCallback callback,
|
||
|
void * param
|
||
|
);
|
||
|
|
||
|
// This transaction doesn't timeout since a client starting from a clean
|
||
|
// directory can take a long time between issuing this transaction and
|
||
|
// receiving a reply.
|
||
|
bool TimedOut () { return false; }
|
||
|
bool Send ();
|
||
|
void Post ();
|
||
|
bool Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
);
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// AccountChangePasswordRequestTrans
|
||
|
//============================================================================
|
||
|
struct AccountChangePasswordRequestTrans : NetAuthTrans {
|
||
|
FNetCliAuthAccountChangePasswordRequestCallback m_callback;
|
||
|
void * m_param;
|
||
|
|
||
|
// send
|
||
|
wchar m_accountName[kMaxAccountNameLength];
|
||
|
ShaDigest m_namePassHash;
|
||
|
|
||
|
AccountChangePasswordRequestTrans (
|
||
|
const wchar accountName[],
|
||
|
const wchar password[],
|
||
|
FNetCliAuthAccountChangePasswordRequestCallback callback,
|
||
|
void * param
|
||
|
);
|
||
|
|
||
|
bool Send ();
|
||
|
void Post ();
|
||
|
bool Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
);
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// GetPublicAgeListTrans
|
||
|
//============================================================================
|
||
|
struct GetPublicAgeListTrans : NetAuthTrans {
|
||
|
FNetCliAuthGetPublicAgeListCallback m_callback;
|
||
|
void * m_param;
|
||
|
|
||
|
// send
|
||
|
wchar m_ageName[MAX_PATH];
|
||
|
|
||
|
// recv
|
||
|
ARRAY(NetAgeInfo) m_ages;
|
||
|
|
||
|
GetPublicAgeListTrans (
|
||
|
const wchar ageName[],
|
||
|
FNetCliAuthGetPublicAgeListCallback callback,
|
||
|
void * param
|
||
|
);
|
||
|
|
||
|
bool Send ();
|
||
|
void Post ();
|
||
|
bool Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
);
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// AccountSetRolesRequestTrans
|
||
|
//============================================================================
|
||
|
struct AccountSetRolesRequestTrans : NetAuthTrans {
|
||
|
FNetCliAuthAccountSetRolesRequestCallback m_callback;
|
||
|
void * m_param;
|
||
|
|
||
|
// send
|
||
|
wchar m_accountName[kMaxAccountNameLength];
|
||
|
unsigned m_accountFlags;
|
||
|
|
||
|
AccountSetRolesRequestTrans (
|
||
|
const wchar accountName[],
|
||
|
unsigned accountFlags,
|
||
|
FNetCliAuthAccountSetRolesRequestCallback callback,
|
||
|
void * param
|
||
|
);
|
||
|
|
||
|
bool Send ();
|
||
|
void Post ();
|
||
|
bool Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
);
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// AccountSetBillingTypeRequestTrans
|
||
|
//============================================================================
|
||
|
struct AccountSetBillingTypeRequestTrans : NetAuthTrans {
|
||
|
FNetCliAuthAccountSetBillingTypeRequestCallback m_callback;
|
||
|
void * m_param;
|
||
|
|
||
|
// send
|
||
|
wchar m_accountName[kMaxAccountNameLength];
|
||
|
unsigned m_billingType;
|
||
|
|
||
|
AccountSetBillingTypeRequestTrans (
|
||
|
const wchar accountName[],
|
||
|
unsigned billingType,
|
||
|
FNetCliAuthAccountSetBillingTypeRequestCallback callback,
|
||
|
void * param
|
||
|
);
|
||
|
|
||
|
bool Send ();
|
||
|
void Post ();
|
||
|
bool Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
);
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// AccountActivateRequestTrans
|
||
|
//============================================================================
|
||
|
struct AccountActivateRequestTrans : NetAuthTrans {
|
||
|
FNetCliAuthAccountActivateRequestCallback m_callback;
|
||
|
void * m_param;
|
||
|
|
||
|
// send
|
||
|
Uuid m_activationKey;
|
||
|
|
||
|
AccountActivateRequestTrans (
|
||
|
const Uuid & activationKey,
|
||
|
FNetCliAuthAccountActivateRequestCallback callback,
|
||
|
void * param
|
||
|
);
|
||
|
|
||
|
bool Send ();
|
||
|
void Post ();
|
||
|
bool Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
);
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// FileListRequestTrans
|
||
|
//============================================================================
|
||
|
struct FileListRequestTrans : NetAuthTrans {
|
||
|
FNetCliAuthFileListRequestCallback m_callback;
|
||
|
void * m_param;
|
||
|
|
||
|
wchar m_directory[MAX_PATH];
|
||
|
wchar m_ext[MAX_EXT];
|
||
|
|
||
|
ARRAY(NetCliAuthFileInfo) m_fileInfoArray;
|
||
|
|
||
|
FileListRequestTrans (
|
||
|
FNetCliAuthFileListRequestCallback callback,
|
||
|
void * param,
|
||
|
const wchar directory[],
|
||
|
const wchar ext[]
|
||
|
);
|
||
|
|
||
|
bool Send ();
|
||
|
void Post ();
|
||
|
bool Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
);
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// FileDownloadRequestTrans
|
||
|
//============================================================================
|
||
|
struct FileDownloadRequestTrans : NetAuthTrans {
|
||
|
FNetCliAuthFileRequestCallback m_callback;
|
||
|
void * m_param;
|
||
|
|
||
|
wchar m_filename[MAX_PATH];
|
||
|
hsStream * m_writer;
|
||
|
|
||
|
FileDownloadRequestTrans (
|
||
|
FNetCliAuthFileRequestCallback callback,
|
||
|
void * param,
|
||
|
const wchar filename[],
|
||
|
hsStream * writer
|
||
|
);
|
||
|
|
||
|
bool Send ();
|
||
|
void Post ();
|
||
|
bool Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
);
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// RcvdFileDownloadChunkTrans
|
||
|
//============================================================================
|
||
|
struct RcvdFileDownloadChunkTrans : NetNotifyTrans {
|
||
|
|
||
|
unsigned bytes;
|
||
|
unsigned offset;
|
||
|
byte * data;
|
||
|
hsStream * writer;
|
||
|
|
||
|
RcvdFileDownloadChunkTrans () : NetNotifyTrans(kRcvdFileDownloadChunkTrans) {}
|
||
|
~RcvdFileDownloadChunkTrans ();
|
||
|
void Post ();
|
||
|
};
|
||
|
|
||
|
|
||
|
//============================================================================
|
||
|
// RcvdPropagatedBufferTrans
|
||
|
//============================================================================
|
||
|
struct RcvdPropagatedBufferTrans : NetNotifyTrans {
|
||
|
|
||
|
unsigned bufferType;
|
||
|
unsigned bufferBytes;
|
||
|
byte * bufferData;
|
||
|
|
||
|
RcvdPropagatedBufferTrans () : NetNotifyTrans(kRcvdPropagatedBufferTrans) {}
|
||
|
~RcvdPropagatedBufferTrans ();
|
||
|
void Post ();
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// VaultNodeChangedTrans
|
||
|
//============================================================================
|
||
|
struct VaultNodeChangedTrans : NetNotifyTrans {
|
||
|
|
||
|
unsigned m_nodeId;
|
||
|
Uuid m_revId;
|
||
|
|
||
|
VaultNodeChangedTrans () : NetNotifyTrans(kVaultNodeChangedTrans) {}
|
||
|
void Post ();
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// VaultNodeAddedTrans
|
||
|
//============================================================================
|
||
|
struct VaultNodeAddedTrans : NetNotifyTrans {
|
||
|
|
||
|
unsigned m_parentId;
|
||
|
unsigned m_childId;
|
||
|
unsigned m_ownerId;
|
||
|
|
||
|
VaultNodeAddedTrans () : NetNotifyTrans(kVaultNodeAddedTrans) {}
|
||
|
void Post ();
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// VaultNodeRemovedTrans
|
||
|
//============================================================================
|
||
|
struct VaultNodeRemovedTrans : NetNotifyTrans {
|
||
|
|
||
|
unsigned m_parentId;
|
||
|
unsigned m_childId;
|
||
|
|
||
|
VaultNodeRemovedTrans () : NetNotifyTrans(kVaultNodeRemovedTrans) {}
|
||
|
void Post ();
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// VaultNodeDeletedTrans
|
||
|
//============================================================================
|
||
|
struct VaultNodeDeletedTrans : NetNotifyTrans {
|
||
|
|
||
|
unsigned m_nodeId;
|
||
|
|
||
|
VaultNodeDeletedTrans () : NetNotifyTrans(kVaultNodeDeletedTrans) {}
|
||
|
void Post ();
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// VaultFetchNodeRefsTrans
|
||
|
//============================================================================
|
||
|
struct VaultFetchNodeRefsTrans : NetAuthTrans {
|
||
|
|
||
|
unsigned m_nodeId;
|
||
|
FNetCliAuthVaultNodeRefsFetched m_callback;
|
||
|
void * m_param;
|
||
|
|
||
|
ARRAY(NetVaultNodeRef) m_refs;
|
||
|
|
||
|
VaultFetchNodeRefsTrans (
|
||
|
unsigned nodeId,
|
||
|
FNetCliAuthVaultNodeRefsFetched callback,
|
||
|
void * param
|
||
|
);
|
||
|
|
||
|
bool Send ();
|
||
|
void Post ();
|
||
|
bool Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
);
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// VaultInitAgeTrans
|
||
|
//============================================================================
|
||
|
struct VaultInitAgeTrans : NetAuthTrans {
|
||
|
FNetCliAuthAgeInitCallback m_callback;
|
||
|
void * m_param;
|
||
|
|
||
|
Uuid m_ageInstId;
|
||
|
Uuid m_parentAgeInstId;
|
||
|
wchar * m_ageFilename;
|
||
|
wchar * m_ageInstName;
|
||
|
wchar * m_ageUserName;
|
||
|
wchar * m_ageDesc;
|
||
|
unsigned m_ageSequenceNumber;
|
||
|
unsigned m_ageLanguage;
|
||
|
|
||
|
unsigned m_ageId;
|
||
|
unsigned m_ageInfoId;
|
||
|
|
||
|
VaultInitAgeTrans (
|
||
|
FNetCliAuthAgeInitCallback callback, // optional
|
||
|
void * param, // optional
|
||
|
const Uuid & ageInstId, // optional. is used in match
|
||
|
const Uuid & parentAgeInstId, // optional. is used in match
|
||
|
const wchar ageFilename[], // optional. is used in match
|
||
|
const wchar ageInstName[], // optional. not used in match
|
||
|
const wchar ageUserName[], // optional. not used in match
|
||
|
const wchar ageDesc[], // optional. not used in match
|
||
|
unsigned ageSequenceNumber, // optional. not used in match
|
||
|
unsigned ageLanguage // optional. not used in match
|
||
|
);
|
||
|
~VaultInitAgeTrans ();
|
||
|
|
||
|
bool Send ();
|
||
|
void Post ();
|
||
|
bool Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
);
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// VaultFetchNodeTrans
|
||
|
//============================================================================
|
||
|
struct VaultFetchNodeTrans : NetAuthTrans {
|
||
|
|
||
|
unsigned m_nodeId;
|
||
|
FNetCliAuthVaultNodeFetched m_callback;
|
||
|
void * m_param;
|
||
|
|
||
|
NetVaultNode * m_node;
|
||
|
|
||
|
VaultFetchNodeTrans (
|
||
|
unsigned nodeId,
|
||
|
FNetCliAuthVaultNodeFetched callback,
|
||
|
void * param
|
||
|
);
|
||
|
|
||
|
bool Send ();
|
||
|
void Post ();
|
||
|
bool Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
);
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// VaultFindNodeTrans
|
||
|
//============================================================================
|
||
|
struct VaultFindNodeTrans : NetAuthTrans {
|
||
|
|
||
|
ARRAY(unsigned) m_nodeIds;
|
||
|
FNetCliAuthVaultNodeFind m_callback;
|
||
|
void * m_param;
|
||
|
|
||
|
NetVaultNode * m_node;
|
||
|
|
||
|
VaultFindNodeTrans (
|
||
|
NetVaultNode * templateNode,
|
||
|
FNetCliAuthVaultNodeFind callback,
|
||
|
void * param
|
||
|
);
|
||
|
~VaultFindNodeTrans ();
|
||
|
|
||
|
|
||
|
bool Send ();
|
||
|
void Post ();
|
||
|
bool Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
);
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// VaultCreateNodeTrans
|
||
|
//============================================================================
|
||
|
struct VaultCreateNodeTrans : NetAuthTrans {
|
||
|
|
||
|
NetVaultNode * m_templateNode;
|
||
|
FNetCliAuthVaultNodeCreated m_callback;
|
||
|
void * m_param;
|
||
|
|
||
|
unsigned m_nodeId;
|
||
|
|
||
|
VaultCreateNodeTrans (
|
||
|
NetVaultNode * templateNode,
|
||
|
FNetCliAuthVaultNodeCreated callback,
|
||
|
void * param
|
||
|
);
|
||
|
|
||
|
bool Send ();
|
||
|
void Post ();
|
||
|
bool Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
);
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// VaultSaveNodeTrans
|
||
|
//============================================================================
|
||
|
struct VaultSaveNodeTrans : NetAuthTrans {
|
||
|
|
||
|
unsigned m_nodeId;
|
||
|
Uuid m_revisionId;
|
||
|
ARRAY(byte) m_buffer;
|
||
|
FNetCliAuthVaultNodeSaveCallback m_callback;
|
||
|
void * m_param;
|
||
|
|
||
|
VaultSaveNodeTrans (
|
||
|
unsigned nodeId,
|
||
|
const Uuid & revisionId,
|
||
|
unsigned dataCount,
|
||
|
const void * data,
|
||
|
FNetCliAuthVaultNodeSaveCallback callback,
|
||
|
void * param
|
||
|
);
|
||
|
|
||
|
bool Send ();
|
||
|
void Post ();
|
||
|
bool Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
);
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// VaultAddNodeTrans
|
||
|
//============================================================================
|
||
|
struct VaultAddNodeTrans : NetAuthTrans {
|
||
|
|
||
|
unsigned m_parentId;
|
||
|
unsigned m_childId;
|
||
|
unsigned m_ownerId;
|
||
|
FNetCliAuthVaultNodeAddCallback m_callback;
|
||
|
void * m_param;
|
||
|
|
||
|
VaultAddNodeTrans (
|
||
|
unsigned parentId,
|
||
|
unsigned childId,
|
||
|
unsigned ownerId,
|
||
|
FNetCliAuthVaultNodeAddCallback callback,
|
||
|
void * param
|
||
|
);
|
||
|
|
||
|
bool Send ();
|
||
|
void Post ();
|
||
|
bool Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
);
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// VaultRemoveNodeTrans
|
||
|
//============================================================================
|
||
|
struct VaultRemoveNodeTrans : NetAuthTrans {
|
||
|
|
||
|
unsigned m_parentId;
|
||
|
unsigned m_childId;
|
||
|
FNetCliAuthVaultNodeRemoveCallback m_callback;
|
||
|
void * m_param;
|
||
|
|
||
|
VaultRemoveNodeTrans (
|
||
|
unsigned parentId,
|
||
|
unsigned childId,
|
||
|
FNetCliAuthVaultNodeRemoveCallback callback,
|
||
|
void * param
|
||
|
);
|
||
|
|
||
|
bool Send ();
|
||
|
void Post ();
|
||
|
bool Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
);
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// NotifyNewBuildTrans
|
||
|
//============================================================================
|
||
|
struct NotifyNewBuildTrans : NetNotifyTrans {
|
||
|
|
||
|
NotifyNewBuildTrans () : NetNotifyTrans(kNotifyNewBuildTrans) {}
|
||
|
void Post ();
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// SetPlayerBanStatusRequestTrans
|
||
|
//============================================================================
|
||
|
struct SetPlayerBanStatusRequestTrans : NetAuthTrans {
|
||
|
FNetCliAuthSetPlayerBanStatusRequestCallback m_callback;
|
||
|
void * m_param;
|
||
|
|
||
|
// send
|
||
|
unsigned m_playerId;
|
||
|
unsigned m_banned;
|
||
|
|
||
|
SetPlayerBanStatusRequestTrans (
|
||
|
unsigned playerId,
|
||
|
unsigned banned,
|
||
|
FNetCliAuthSetPlayerBanStatusRequestCallback callback,
|
||
|
void * param
|
||
|
);
|
||
|
|
||
|
bool Send ();
|
||
|
void Post ();
|
||
|
bool Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
);
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// ChangePlayerNameRequestTrans
|
||
|
//============================================================================
|
||
|
struct ChangePlayerNameRequestTrans : NetAuthTrans {
|
||
|
FNetCliAuthChangePlayerNameRequestCallback m_callback;
|
||
|
void * m_param;
|
||
|
|
||
|
// send
|
||
|
unsigned m_playerId;
|
||
|
wchar m_newName[kMaxPlayerNameLength];
|
||
|
|
||
|
ChangePlayerNameRequestTrans (
|
||
|
unsigned playerId,
|
||
|
const wchar newName[],
|
||
|
FNetCliAuthChangePlayerNameRequestCallback callback,
|
||
|
void * param
|
||
|
);
|
||
|
|
||
|
bool Send ();
|
||
|
void Post ();
|
||
|
bool Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
);
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// SendFriendInviteTrans
|
||
|
//============================================================================
|
||
|
struct SendFriendInviteTrans : NetAuthTrans {
|
||
|
FNetCliAuthSendFriendInviteCallback m_callback;
|
||
|
void * m_param;
|
||
|
|
||
|
// send
|
||
|
wchar m_emailAddress[kMaxEmailAddressLength];
|
||
|
wchar m_toName[kMaxPlayerNameLength];
|
||
|
Uuid m_inviteUuid;
|
||
|
|
||
|
SendFriendInviteTrans (
|
||
|
const wchar emailAddr[],
|
||
|
const wchar toName[],
|
||
|
const Uuid & inviteUuid,
|
||
|
FNetCliAuthSendFriendInviteCallback callback,
|
||
|
void * param
|
||
|
);
|
||
|
|
||
|
bool Send ();
|
||
|
void Post ();
|
||
|
bool Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
);
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// AuthConnectedNotifyTrans
|
||
|
//============================================================================
|
||
|
struct AuthConnectedNotifyTrans : NetNotifyTrans {
|
||
|
|
||
|
AuthConnectedNotifyTrans () : NetNotifyTrans(kAuthConnectedNotifyTrans) {}
|
||
|
void Post ();
|
||
|
};
|
||
|
|
||
|
|
||
|
//============================================================================
|
||
|
// ScoreCreateTrans
|
||
|
//============================================================================
|
||
|
struct ScoreCreateTrans : NetAuthTrans {
|
||
|
FNetCliAuthCreateScoreCallback m_callback;
|
||
|
void * m_param;
|
||
|
|
||
|
// send
|
||
|
unsigned m_ownerId;
|
||
|
char m_gameName[kMaxGameScoreNameLength];
|
||
|
unsigned m_gameType;
|
||
|
int m_value;
|
||
|
|
||
|
// recv
|
||
|
unsigned m_scoreId;
|
||
|
UInt32 m_createdTime;
|
||
|
|
||
|
ScoreCreateTrans (
|
||
|
unsigned ownerId,
|
||
|
const char* gameName,
|
||
|
unsigned gameType,
|
||
|
int value,
|
||
|
FNetCliAuthCreateScoreCallback callback,
|
||
|
void * param
|
||
|
);
|
||
|
|
||
|
bool Send ();
|
||
|
void Post ();
|
||
|
bool Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
);
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// ScoreDeleteTrans
|
||
|
//============================================================================
|
||
|
struct ScoreDeleteTrans : NetAuthTrans {
|
||
|
FNetCliAuthScoreUpdateCallback m_callback;
|
||
|
void * m_param;
|
||
|
|
||
|
// send
|
||
|
unsigned m_scoreId;
|
||
|
|
||
|
ScoreDeleteTrans (
|
||
|
unsigned scoreId,
|
||
|
FNetCliAuthScoreUpdateCallback callback,
|
||
|
void * param
|
||
|
);
|
||
|
|
||
|
bool Send ();
|
||
|
void Post ();
|
||
|
bool Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
);
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// ScoreGetScoresTrans
|
||
|
//============================================================================
|
||
|
struct ScoreGetScoresTrans : NetAuthTrans {
|
||
|
FNetCliAuthGetScoresCallback m_callback;
|
||
|
void * m_param;
|
||
|
|
||
|
// send
|
||
|
unsigned m_ownerId;
|
||
|
char m_gameName[kMaxGameScoreNameLength];
|
||
|
|
||
|
// recv
|
||
|
NetGameScore * m_scores;
|
||
|
unsigned m_scoreCount;
|
||
|
|
||
|
ScoreGetScoresTrans (
|
||
|
unsigned ownerId,
|
||
|
const char* gameName,
|
||
|
FNetCliAuthGetScoresCallback callback,
|
||
|
void * param
|
||
|
);
|
||
|
|
||
|
bool Send ();
|
||
|
void Post ();
|
||
|
bool Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
);
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// ScoreAddPointsTrans
|
||
|
//============================================================================
|
||
|
struct ScoreAddPointsTrans : NetAuthTrans {
|
||
|
FNetCliAuthScoreUpdateCallback m_callback;
|
||
|
void * m_param;
|
||
|
|
||
|
// send
|
||
|
unsigned m_scoreId;
|
||
|
int m_numPoints;
|
||
|
|
||
|
ScoreAddPointsTrans (
|
||
|
unsigned scoreId,
|
||
|
int numPoints,
|
||
|
FNetCliAuthScoreUpdateCallback callback,
|
||
|
void * param
|
||
|
);
|
||
|
|
||
|
bool Send ();
|
||
|
void Post ();
|
||
|
bool Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
);
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// ScoreTransferPointsTrans
|
||
|
//============================================================================
|
||
|
struct ScoreTransferPointsTrans : NetAuthTrans {
|
||
|
FNetCliAuthScoreUpdateCallback m_callback;
|
||
|
void * m_param;
|
||
|
|
||
|
// send
|
||
|
unsigned m_srcScoreId;
|
||
|
unsigned m_destScoreId;
|
||
|
int m_numPoints;
|
||
|
|
||
|
ScoreTransferPointsTrans (
|
||
|
unsigned srcScoreId,
|
||
|
unsigned destScoreId,
|
||
|
int numPoints,
|
||
|
FNetCliAuthScoreUpdateCallback callback,
|
||
|
void * param
|
||
|
);
|
||
|
|
||
|
bool Send ();
|
||
|
void Post ();
|
||
|
bool Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
);
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// ScoreSetPointsTrans
|
||
|
//============================================================================
|
||
|
struct ScoreSetPointsTrans : NetAuthTrans {
|
||
|
FNetCliAuthScoreUpdateCallback m_callback;
|
||
|
void * m_param;
|
||
|
|
||
|
// send
|
||
|
unsigned m_scoreId;
|
||
|
int m_numPoints;
|
||
|
|
||
|
ScoreSetPointsTrans (
|
||
|
unsigned scoreId,
|
||
|
int numPoints,
|
||
|
FNetCliAuthScoreUpdateCallback callback,
|
||
|
void * param
|
||
|
);
|
||
|
|
||
|
bool Send ();
|
||
|
void Post ();
|
||
|
bool Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
);
|
||
|
};
|
||
|
|
||
|
//============================================================================
|
||
|
// ScoreGetRanksTrans
|
||
|
//============================================================================
|
||
|
struct ScoreGetRanksTrans : NetAuthTrans {
|
||
|
FNetCliAuthGetRanksCallback m_callback;
|
||
|
void * m_param;
|
||
|
|
||
|
// send
|
||
|
unsigned m_ownerId;
|
||
|
unsigned m_scoreGroup;
|
||
|
unsigned m_parentFolderId;
|
||
|
wchar m_gameName[kMaxGameScoreNameLength];
|
||
|
unsigned m_timePeriod;
|
||
|
unsigned m_numResults;
|
||
|
unsigned m_pageNumber;
|
||
|
unsigned m_sortDesc;
|
||
|
|
||
|
// recv
|
||
|
NetGameRank * m_ranks;
|
||
|
unsigned m_rankCount;
|
||
|
|
||
|
ScoreGetRanksTrans (
|
||
|
unsigned ownerId,
|
||
|
unsigned scoreGroup,
|
||
|
unsigned parentFolderId,
|
||
|
const char * cGameName,
|
||
|
unsigned timePeriod,
|
||
|
unsigned numResults,
|
||
|
unsigned pageNumber,
|
||
|
bool sortDesc,
|
||
|
FNetCliAuthGetRanksCallback callback,
|
||
|
void * param
|
||
|
);
|
||
|
|
||
|
bool Send ();
|
||
|
void Post ();
|
||
|
bool Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
);
|
||
|
};
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* Private data
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
enum {
|
||
|
kPerfConnCount,
|
||
|
kPingDisabled,
|
||
|
kAutoReconnectDisabled,
|
||
|
kNumPerf
|
||
|
};
|
||
|
|
||
|
static bool s_running;
|
||
|
static CCritSect s_critsect;
|
||
|
static LISTDECL(CliAuConn, link) s_conns;
|
||
|
static CliAuConn * s_active;
|
||
|
static wchar s_accountName[kMaxAccountNameLength];
|
||
|
static ShaDigest s_accountNamePassHash;
|
||
|
static wchar s_authToken[kMaxPublisherAuthKeyLength];
|
||
|
static wchar s_os[kMaxGTOSIdLength];
|
||
|
|
||
|
static long s_perf[kNumPerf];
|
||
|
|
||
|
static UInt32 s_encryptionKey[4];
|
||
|
|
||
|
static FNetCliAuthRecvBufferHandler s_bufRcvdCb;
|
||
|
static FNetCliAuthConnectCallback s_connectedCb;
|
||
|
|
||
|
// Vault notification handlers
|
||
|
static FNetCliAuthVaultNodeChanged s_vaultNodeChangedHandler;
|
||
|
static FNetCliAuthVaultNodeAdded s_vaultNodeAddedHandler;
|
||
|
static FNetCliAuthVaultNodeRemoved s_vaultNodeRemovedHandler;
|
||
|
static FNetCliAuthVaultNodeDeleted s_vaultNodeDeletedHandler;
|
||
|
|
||
|
static FNotifyNewBuildHandler s_notifyNewBuildHandler;
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* Internal functions
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//===========================================================================
|
||
|
static inline bool ICharIsSpace (unsigned ch) {
|
||
|
return ch == ' ';
|
||
|
}
|
||
|
|
||
|
//===========================================================================
|
||
|
static ENetError FixupPlayerName (wchar * name) {
|
||
|
ASSERT(name);
|
||
|
|
||
|
// Trim leading and trailing whitespace and convert
|
||
|
// multiple internal spaces into only one space
|
||
|
unsigned nonSpaceChars = 0;
|
||
|
wchar *dst = name;
|
||
|
for (wchar *src = name; *src; ) {
|
||
|
// Skip whitespace
|
||
|
while (*src && ICharIsSpace(*src))
|
||
|
src++;
|
||
|
|
||
|
// If the block skipped was not at the beginning
|
||
|
// of the string then add one space character
|
||
|
if (*src && (dst != name))
|
||
|
*dst++ = ' ';
|
||
|
|
||
|
// Copy characters until end-of-string or next whitespace
|
||
|
while (*src && !ICharIsSpace(*src)) {
|
||
|
++nonSpaceChars;
|
||
|
*dst++ = *src++;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Ensure destination string is terminated
|
||
|
*dst = 0;
|
||
|
|
||
|
// Check for minimum name length
|
||
|
if (nonSpaceChars < 3)
|
||
|
return kNetErrPlayerNameInvalid;
|
||
|
|
||
|
return kNetSuccess;
|
||
|
}
|
||
|
|
||
|
//===========================================================================
|
||
|
static unsigned GetNonZeroTimeMs () {
|
||
|
if (unsigned ms = TimeGetMs())
|
||
|
return ms;
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static CliAuConn * GetConnIncRef_CS (const char tag[]) {
|
||
|
if (CliAuConn * conn = s_active) {
|
||
|
conn->IncRef(tag);
|
||
|
return conn;
|
||
|
}
|
||
|
return nil;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static CliAuConn * GetConnIncRef (const char tag[]) {
|
||
|
CliAuConn * conn;
|
||
|
s_critsect.Enter();
|
||
|
{
|
||
|
conn = GetConnIncRef_CS(tag);
|
||
|
}
|
||
|
s_critsect.Leave();
|
||
|
return conn;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static void UnlinkAndAbandonConn_CS (CliAuConn * conn) {
|
||
|
s_conns.Unlink(conn);
|
||
|
conn->abandoned = true;
|
||
|
|
||
|
conn->StopAutoReconnect();
|
||
|
|
||
|
if (conn->cancelId) {
|
||
|
AsyncSocketConnectCancel(nil, conn->cancelId);
|
||
|
conn->cancelId = 0;
|
||
|
}
|
||
|
else if (conn->sock) {
|
||
|
AsyncSocketDisconnect(conn->sock, true);
|
||
|
}
|
||
|
else {
|
||
|
conn->DecRef("Lifetime");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static void SendClientRegisterRequest (CliAuConn * conn) {
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_ClientRegisterRequest,
|
||
|
BuildId(),
|
||
|
};
|
||
|
|
||
|
conn->Send(msg, arrsize(msg));
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool ConnEncrypt (ENetError error, void * param) {
|
||
|
CliAuConn * conn = (CliAuConn *) param;
|
||
|
|
||
|
if (IS_NET_SUCCESS(error)) {
|
||
|
|
||
|
SendClientRegisterRequest(conn);
|
||
|
|
||
|
if (!s_perf[kPingDisabled])
|
||
|
conn->AutoPing();
|
||
|
|
||
|
AuthConnectedNotifyTrans * trans = NEW(AuthConnectedNotifyTrans);
|
||
|
NetTransSend(trans);
|
||
|
}
|
||
|
|
||
|
return IS_NET_SUCCESS(error);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static void NotifyConnSocketConnect (CliAuConn * conn) {
|
||
|
|
||
|
conn->TransferRef("Connecting", "Connected");
|
||
|
conn->cli = NetCliConnectAccept(
|
||
|
conn->sock,
|
||
|
kNetProtocolCli2Auth,
|
||
|
false,
|
||
|
ConnEncrypt,
|
||
|
0,
|
||
|
nil,
|
||
|
conn
|
||
|
);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static void CheckedReconnect (CliAuConn * conn, ENetError error) {
|
||
|
|
||
|
unsigned disconnectedMs = GetNonZeroTimeMs() - conn->lastHeardTimeMs;
|
||
|
|
||
|
// no auto-reconnect or haven't heard from the server in a while?
|
||
|
if (!conn->AutoReconnectEnabled() || (int)disconnectedMs >= (int)kDisconnectedTimeoutMs) {
|
||
|
// Cancel all transactions in progress on this connection.
|
||
|
NetTransCancelByConnId(conn->seq, kNetErrTimeout);
|
||
|
// conn is dead.
|
||
|
conn->DecRef("Lifetime");
|
||
|
ReportNetError(kNetProtocolCli2Auth, error);
|
||
|
}
|
||
|
else {
|
||
|
if (conn->token != kNilGuid)
|
||
|
// previously encrypted; reconnect quickly
|
||
|
conn->reconnectStartMs = GetNonZeroTimeMs() + 500;
|
||
|
else
|
||
|
// never encrypted; reconnect slowly
|
||
|
conn->reconnectStartMs = GetNonZeroTimeMs() + kMaxReconnectIntervalMs;
|
||
|
|
||
|
// clean up the socket and start reconnect
|
||
|
if (conn->cli)
|
||
|
NetCliDelete(conn->cli, true);
|
||
|
conn->cli = nil;
|
||
|
conn->sock = nil;
|
||
|
|
||
|
conn->StartAutoReconnect();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static void NotifyConnSocketConnectFailed (CliAuConn * conn) {
|
||
|
|
||
|
s_critsect.Enter();
|
||
|
{
|
||
|
conn->cancelId = 0;
|
||
|
s_conns.Unlink(conn);
|
||
|
|
||
|
if (conn == s_active)
|
||
|
s_active = nil;
|
||
|
}
|
||
|
s_critsect.Leave();
|
||
|
|
||
|
CheckedReconnect(conn, kNetErrConnectFailed);
|
||
|
|
||
|
conn->DecRef("Connecting");
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static void NotifyConnSocketDisconnect (CliAuConn * conn) {
|
||
|
|
||
|
conn->StopAutoPing();
|
||
|
|
||
|
s_critsect.Enter();
|
||
|
{
|
||
|
conn->cancelId = 0;
|
||
|
s_conns.Unlink(conn);
|
||
|
|
||
|
if (conn == s_active)
|
||
|
s_active = nil;
|
||
|
}
|
||
|
s_critsect.Leave();
|
||
|
|
||
|
|
||
|
CheckedReconnect(conn, kNetErrDisconnected);
|
||
|
|
||
|
conn->DecRef("Connected");
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool NotifyConnSocketRead (CliAuConn * conn, AsyncNotifySocketRead * read) {
|
||
|
// TODO: Only dispatch messages from the active auth server
|
||
|
conn->lastHeardTimeMs = GetNonZeroTimeMs();
|
||
|
bool result = NetCliDispatch(conn->cli, read->buffer, read->bytes, conn);
|
||
|
read->bytesProcessed += read->bytes;
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool SocketNotifyCallback (
|
||
|
AsyncSocket sock,
|
||
|
EAsyncNotifySocket code,
|
||
|
AsyncNotifySocket * notify,
|
||
|
void ** userState
|
||
|
) {
|
||
|
bool result = true;
|
||
|
CliAuConn * conn;
|
||
|
|
||
|
switch (code) {
|
||
|
case kNotifySocketConnectSuccess:
|
||
|
conn = (CliAuConn *) notify->param;
|
||
|
*userState = conn;
|
||
|
bool abandoned;
|
||
|
s_critsect.Enter();
|
||
|
{
|
||
|
conn->sock = sock;
|
||
|
conn->cancelId = 0;
|
||
|
abandoned = conn->abandoned;
|
||
|
}
|
||
|
s_critsect.Leave();
|
||
|
if (abandoned)
|
||
|
AsyncSocketDisconnect(sock, true);
|
||
|
else
|
||
|
NotifyConnSocketConnect(conn);
|
||
|
break;
|
||
|
|
||
|
case kNotifySocketConnectFailed:
|
||
|
conn = (CliAuConn *) notify->param;
|
||
|
NotifyConnSocketConnectFailed(conn);
|
||
|
break;
|
||
|
|
||
|
case kNotifySocketDisconnect:
|
||
|
conn = (CliAuConn *) *userState;
|
||
|
NotifyConnSocketDisconnect(conn);
|
||
|
break;
|
||
|
|
||
|
case kNotifySocketRead:
|
||
|
conn = (CliAuConn *) *userState;
|
||
|
result = NotifyConnSocketRead(conn, (AsyncNotifySocketRead *) notify);
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static void Connect (
|
||
|
CliAuConn * conn
|
||
|
) {
|
||
|
ASSERT(s_running);
|
||
|
|
||
|
conn->pingSendTimeMs = 0;
|
||
|
|
||
|
s_critsect.Enter();
|
||
|
{
|
||
|
while (CliAuConn * oldConn = s_conns.Head()) {
|
||
|
if (oldConn != conn)
|
||
|
UnlinkAndAbandonConn_CS(oldConn);
|
||
|
else
|
||
|
s_conns.Unlink(oldConn);
|
||
|
}
|
||
|
s_conns.Link(conn);
|
||
|
}
|
||
|
s_critsect.Leave();
|
||
|
|
||
|
Cli2Auth_Connect connect;
|
||
|
connect.hdr.connType = kConnTypeCliToAuth;
|
||
|
connect.hdr.hdrBytes = sizeof(connect.hdr);
|
||
|
connect.hdr.buildId = BuildId();
|
||
|
connect.hdr.buildType = BuildType();
|
||
|
connect.hdr.branchId = BranchId();
|
||
|
connect.hdr.productId = ProductId();
|
||
|
connect.data.token = conn->token;
|
||
|
connect.data.dataBytes = sizeof(connect.data);
|
||
|
|
||
|
AsyncSocketConnect(
|
||
|
&conn->cancelId,
|
||
|
conn->addr,
|
||
|
SocketNotifyCallback,
|
||
|
conn,
|
||
|
&connect,
|
||
|
sizeof(connect),
|
||
|
0,
|
||
|
0
|
||
|
);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static void Connect (
|
||
|
const wchar name[],
|
||
|
const NetAddress & addr
|
||
|
) {
|
||
|
ASSERT(s_running);
|
||
|
|
||
|
CliAuConn * conn = NEWZERO(CliAuConn);
|
||
|
conn->addr = addr;
|
||
|
conn->seq = ConnNextSequence();
|
||
|
conn->lastHeardTimeMs = GetNonZeroTimeMs(); // used in connect timeout, and ping timeout
|
||
|
StrCopy(conn->name, name, arrsize(conn->name));
|
||
|
|
||
|
conn->IncRef("Lifetime");
|
||
|
conn->AutoReconnect();
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static void AsyncLookupCallback (
|
||
|
void * param,
|
||
|
const wchar name[],
|
||
|
unsigned addrCount,
|
||
|
const NetAddress addrs[]
|
||
|
) {
|
||
|
REF(param);
|
||
|
|
||
|
if (!addrCount) {
|
||
|
ReportNetError(kNetProtocolCli2Auth, kNetErrNameLookupFailed);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
for (unsigned i = 0; i < addrCount; ++i) {
|
||
|
Connect(name, addrs[i]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* CliAuConn
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//===========================================================================
|
||
|
static unsigned CliAuConnTimerDestroyed (void * param) {
|
||
|
CliAuConn * conn = (CliAuConn *) param;
|
||
|
conn->DecRef("TimerDestroyed");
|
||
|
return kAsyncTimeInfinite;
|
||
|
}
|
||
|
|
||
|
//===========================================================================
|
||
|
static unsigned CliAuConnReconnectTimerProc (void * param) {
|
||
|
((CliAuConn *) param)->TimerReconnect();
|
||
|
return kAsyncTimeInfinite;
|
||
|
}
|
||
|
|
||
|
//===========================================================================
|
||
|
static unsigned CliAuConnPingTimerProc (void * param) {
|
||
|
((CliAuConn *) param)->TimerPing();
|
||
|
return kPingIntervalMs;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
CliAuConn::CliAuConn () {
|
||
|
AtomicAdd(&s_perf[kPerfConnCount], 1);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
CliAuConn::~CliAuConn () {
|
||
|
if (cli)
|
||
|
NetCliDelete(cli, true);
|
||
|
AtomicAdd(&s_perf[kPerfConnCount], -1);
|
||
|
}
|
||
|
|
||
|
//===========================================================================
|
||
|
void CliAuConn::TimerReconnect () {
|
||
|
ASSERT(!sock);
|
||
|
ASSERT(!cancelId);
|
||
|
|
||
|
if (!s_running) {
|
||
|
s_critsect.Enter();
|
||
|
UnlinkAndAbandonConn_CS(this);
|
||
|
s_critsect.Leave();
|
||
|
}
|
||
|
else {
|
||
|
IncRef("Connecting");
|
||
|
|
||
|
// Remember the time we started the reconnect attempt, guarding against
|
||
|
// TimeGetMs() returning zero (unlikely), as a value of zero indicates
|
||
|
// a first-time connect condition to StartAutoReconnect()
|
||
|
reconnectStartMs = GetNonZeroTimeMs();
|
||
|
|
||
|
Connect(this);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//===========================================================================
|
||
|
// This function is called when after a disconnect to start a new connection
|
||
|
void CliAuConn::StartAutoReconnect () {
|
||
|
critsect.Enter();
|
||
|
if (reconnectTimer && !s_perf[kAutoReconnectDisabled]) {
|
||
|
// Make reconnect attempts at regular intervals. If the last attempt
|
||
|
// took more than the specified max interval time then reconnect
|
||
|
// immediately; otherwise wait until the time interval is up again
|
||
|
// then reconnect.
|
||
|
unsigned remainingMs = 0;
|
||
|
if (reconnectStartMs) {
|
||
|
remainingMs = reconnectStartMs - GetNonZeroTimeMs();
|
||
|
if ((signed)remainingMs < 0)
|
||
|
remainingMs = 0;
|
||
|
LogMsg(kLogPerf, L"Auth auto-reconnecting in %u ms", remainingMs);
|
||
|
}
|
||
|
AsyncTimerUpdate(reconnectTimer, remainingMs);
|
||
|
}
|
||
|
critsect.Leave();
|
||
|
}
|
||
|
|
||
|
//===========================================================================
|
||
|
// This function should be called during object construction
|
||
|
// to initiate connection attempts to the remote host whenever
|
||
|
// the socket is disconnected.
|
||
|
void CliAuConn::AutoReconnect () {
|
||
|
|
||
|
ASSERT(!reconnectTimer);
|
||
|
IncRef("ReconnectTimer");
|
||
|
critsect.Enter();
|
||
|
{
|
||
|
AsyncTimerCreate(
|
||
|
&reconnectTimer,
|
||
|
CliAuConnReconnectTimerProc,
|
||
|
0, // immediate callback
|
||
|
this
|
||
|
);
|
||
|
}
|
||
|
critsect.Leave();
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void CliAuConn::StopAutoReconnect () {
|
||
|
critsect.Enter();
|
||
|
{
|
||
|
if (AsyncTimer * timer = reconnectTimer) {
|
||
|
reconnectTimer = nil;
|
||
|
AsyncTimerDeleteCallback(timer, CliAuConnTimerDestroyed);
|
||
|
}
|
||
|
}
|
||
|
critsect.Leave();
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool CliAuConn::AutoReconnectEnabled () {
|
||
|
|
||
|
return (reconnectTimer != nil) && !s_perf[kAutoReconnectDisabled];
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void CliAuConn::AutoPing () {
|
||
|
ASSERT(!pingTimer);
|
||
|
IncRef("PingTimer");
|
||
|
critsect.Enter();
|
||
|
{
|
||
|
AsyncTimerCreate(
|
||
|
&pingTimer,
|
||
|
CliAuConnPingTimerProc,
|
||
|
sock ? 0 : kAsyncTimeInfinite,
|
||
|
this
|
||
|
);
|
||
|
}
|
||
|
critsect.Leave();
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void CliAuConn::StopAutoPing () {
|
||
|
critsect.Enter();
|
||
|
{
|
||
|
if (AsyncTimer * timer = pingTimer) {
|
||
|
pingTimer = nil;
|
||
|
AsyncTimerDeleteCallback(timer, CliAuConnTimerDestroyed);
|
||
|
}
|
||
|
}
|
||
|
critsect.Leave();
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void CliAuConn::TimerPing () {
|
||
|
|
||
|
#if 0
|
||
|
// if the time difference between when we last sent a ping and when we last
|
||
|
// heard from the server is >= 3x the ping interval, the socket is stale.
|
||
|
if (pingSendTimeMs && abs(int(pingSendTimeMs - lastHeardTimeMs)) >= kPingTimeoutMs) {
|
||
|
// ping timed out, disconnect the socket
|
||
|
AsyncSocketDisconnect(sock, true);
|
||
|
}
|
||
|
else
|
||
|
#endif
|
||
|
{
|
||
|
// Send a ping request
|
||
|
pingSendTimeMs = GetNonZeroTimeMs();
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_PingRequest,
|
||
|
pingSendTimeMs,
|
||
|
0, // not a transaction
|
||
|
0, // no payload
|
||
|
nil
|
||
|
};
|
||
|
|
||
|
Send(msg, arrsize(msg));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void CliAuConn::Send (const unsigned_ptr fields[], unsigned count) {
|
||
|
critsect.Enter();
|
||
|
{
|
||
|
NetCliSend(cli, fields, count);
|
||
|
NetCliFlush(cli);
|
||
|
}
|
||
|
critsect.Leave();
|
||
|
}
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* Cli2Auth message handlers
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_PingReply (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_PingReply & reply = *(const Auth2Cli_PingReply *)msg;
|
||
|
|
||
|
if (reply.transId)
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_AccountExistsReply (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_AccountExistsReply & reply = *(const Auth2Cli_AccountExistsReply *)msg;
|
||
|
|
||
|
if (reply.transId)
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_ClientRegisterReply (
|
||
|
const byte msg[],
|
||
|
unsigned ,
|
||
|
void * param
|
||
|
) {
|
||
|
const Auth2Cli_ClientRegisterReply & reply = *(const Auth2Cli_ClientRegisterReply *)msg;
|
||
|
|
||
|
CliAuConn * conn = (CliAuConn *) param;
|
||
|
conn->serverChallenge = reply.serverChallenge;
|
||
|
|
||
|
// Make this the active server
|
||
|
s_critsect.Enter();
|
||
|
{
|
||
|
s_active = conn;
|
||
|
}
|
||
|
s_critsect.Leave();
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_AcctPlayerInfo (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_AcctPlayerInfo & reply = *(const Auth2Cli_AcctPlayerInfo *)msg;
|
||
|
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_AcctLoginReply (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_AcctLoginReply & reply = *(const Auth2Cli_AcctLoginReply *)msg;
|
||
|
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_AcctCreateReply (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_AcctCreateReply & reply = *(const Auth2Cli_AcctCreateReply *)msg;
|
||
|
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_AcctCreateFromKeyReply (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_AcctCreateFromKeyReply & reply = *(const Auth2Cli_AcctCreateFromKeyReply *)msg;
|
||
|
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_PlayerCreateReply (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_PlayerCreateReply & reply = *(const Auth2Cli_PlayerCreateReply *)msg;
|
||
|
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_PlayerDeleteReply (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_PlayerDeleteReply & reply = *(const Auth2Cli_PlayerDeleteReply *)msg;
|
||
|
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_UpgradeVisitorReply (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_UpgradeVisitorReply & reply = *(const Auth2Cli_UpgradeVisitorReply *)msg;
|
||
|
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_AcctSetPlayerReply (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_AcctSetPlayerReply & reply = *(const Auth2Cli_AcctSetPlayerReply *)msg;
|
||
|
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_AcctChangePasswordReply (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_AcctChangePasswordReply & reply = *(const Auth2Cli_AcctChangePasswordReply *)msg;
|
||
|
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_AcctSetRolesReply (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_AcctSetRolesReply & reply = *(const Auth2Cli_AcctSetRolesReply *)msg;
|
||
|
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_AcctSetBillingTypeReply (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_AcctSetBillingTypeReply & reply = *(const Auth2Cli_AcctSetBillingTypeReply *)msg;
|
||
|
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_AcctActivateReply (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_AcctActivateReply & reply = *(const Auth2Cli_AcctActivateReply *)msg;
|
||
|
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_AgeReply (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_AgeReply & reply = *(const Auth2Cli_AgeReply *)msg;
|
||
|
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_FileListReply (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_FileListReply & reply = *(const Auth2Cli_FileListReply *)msg;
|
||
|
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_FileDownloadChunk (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_FileDownloadChunk & reply = *(const Auth2Cli_FileDownloadChunk *)msg;
|
||
|
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_KickedOff (
|
||
|
const byte buffer[],
|
||
|
unsigned bytes,
|
||
|
void * param
|
||
|
) {
|
||
|
REF(bytes);
|
||
|
REF(param);
|
||
|
|
||
|
const Auth2Cli_KickedOff & msg = *(const Auth2Cli_KickedOff *)buffer;
|
||
|
|
||
|
ReportNetError(kNetProtocolCli2Auth, msg.reason);
|
||
|
NetCliAuthDisconnect();
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_VaultNodeRefsFetched (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_VaultNodeRefsFetched & reply = *(const Auth2Cli_VaultNodeRefsFetched *)msg;
|
||
|
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_VaultNodeFetched (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_VaultNodeFetched & reply = *(const Auth2Cli_VaultNodeFetched *)msg;
|
||
|
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_VaultNodeCreated (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_VaultNodeCreated & reply = *(const Auth2Cli_VaultNodeCreated *)msg;
|
||
|
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_VaultNodeChanged (
|
||
|
const byte msg[],
|
||
|
unsigned ,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_VaultNodeChanged & notify = *(const Auth2Cli_VaultNodeChanged *)msg;
|
||
|
|
||
|
VaultNodeChangedTrans * trans = NEW(VaultNodeChangedTrans);
|
||
|
trans->m_nodeId = notify.nodeId;
|
||
|
trans->m_revId = notify.revisionId;
|
||
|
NetTransSend(trans);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_VaultNodeAdded (
|
||
|
const byte msg[],
|
||
|
unsigned ,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_VaultNodeAdded & notify = *(const Auth2Cli_VaultNodeAdded *)msg;
|
||
|
|
||
|
VaultNodeAddedTrans * trans = NEW(VaultNodeAddedTrans);
|
||
|
trans->m_parentId = notify.parentId;
|
||
|
trans->m_childId = notify.childId;
|
||
|
trans->m_ownerId = notify.ownerId;
|
||
|
NetTransSend(trans);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_VaultNodeRemoved (
|
||
|
const byte msg[],
|
||
|
unsigned ,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_VaultNodeRemoved & notify = *(const Auth2Cli_VaultNodeRemoved *)msg;
|
||
|
|
||
|
VaultNodeRemovedTrans * trans = NEW(VaultNodeRemovedTrans);
|
||
|
trans->m_parentId = notify.parentId;
|
||
|
trans->m_childId = notify.childId;
|
||
|
NetTransSend(trans);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_VaultNodeDeleted (
|
||
|
const byte msg[],
|
||
|
unsigned ,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_VaultNodeDeleted & notify = *(const Auth2Cli_VaultNodeDeleted *)msg;
|
||
|
|
||
|
VaultNodeDeletedTrans * trans = NEW(VaultNodeDeletedTrans);
|
||
|
trans->m_nodeId = notify.nodeId;
|
||
|
NetTransSend(trans);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_VaultSaveNodeReply (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_VaultSaveNodeReply & reply = *(const Auth2Cli_VaultSaveNodeReply *)msg;
|
||
|
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_VaultAddNodeReply (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_VaultAddNodeReply & reply = *(const Auth2Cli_VaultAddNodeReply *)msg;
|
||
|
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_VaultRemoveNodeReply (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_VaultRemoveNodeReply & reply = *(const Auth2Cli_VaultRemoveNodeReply *)msg;
|
||
|
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_VaultInitAgeReply (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_VaultInitAgeReply & reply = *(const Auth2Cli_VaultInitAgeReply *)msg;
|
||
|
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_VaultNodeFindReply (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_VaultNodeFindReply & reply = *(const Auth2Cli_VaultNodeFindReply *)msg;
|
||
|
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_PublicAgeList (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_PublicAgeList & reply = *(const Auth2Cli_PublicAgeList *)msg;
|
||
|
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_ServerAddr (
|
||
|
const byte in[],
|
||
|
unsigned ,
|
||
|
void *
|
||
|
) {
|
||
|
// the auth server has given us its actual address (behind any load-balancer)
|
||
|
// so that when we attempt a reconnect, we'll reconnect with our state on
|
||
|
// the auth (but only if we reconnect in a short period of time!)
|
||
|
const Auth2Cli_ServerAddr & msg = *(const Auth2Cli_ServerAddr *)in;
|
||
|
|
||
|
s_critsect.Enter();
|
||
|
{
|
||
|
if (s_active) {
|
||
|
s_active->token = msg.token;
|
||
|
NetAddressFromNode(
|
||
|
msg.srvAddr,
|
||
|
NetAddressGetPort(s_active->addr),
|
||
|
&s_active->addr
|
||
|
);
|
||
|
wchar addrStr[64];
|
||
|
NetAddressNodeToString(
|
||
|
msg.srvAddr,
|
||
|
addrStr,
|
||
|
arrsize(addrStr)
|
||
|
);
|
||
|
LogMsg(kLogPerf, L"SrvAuth addr: %s", addrStr);
|
||
|
}
|
||
|
}
|
||
|
s_critsect.Leave();
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_NotifyNewBuild (
|
||
|
const byte[],
|
||
|
unsigned ,
|
||
|
void *
|
||
|
) {
|
||
|
NotifyNewBuildTrans * trans = NEW(NotifyNewBuildTrans);
|
||
|
NetTransSend(trans);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_SetPlayerBanStatusReply (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_SetPlayerBanStatusReply & reply = *(const Auth2Cli_SetPlayerBanStatusReply *)msg;
|
||
|
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_ChangePlayerNameReply (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_ChangePlayerNameReply & reply = *(const Auth2Cli_ChangePlayerNameReply *)msg;
|
||
|
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_SendFriendInviteReply (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_SendFriendInviteReply & reply = *(const Auth2Cli_SendFriendInviteReply *)msg;
|
||
|
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_ScoreCreateReply (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_ScoreCreateReply & reply = *(const Auth2Cli_ScoreCreateReply *)msg;
|
||
|
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_ScoreDeleteReply (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_ScoreDeleteReply & reply = *(const Auth2Cli_ScoreDeleteReply *)msg;
|
||
|
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_ScoreGetScoresReply (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_ScoreGetScoresReply & reply = *(const Auth2Cli_ScoreGetScoresReply *)msg;
|
||
|
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_ScoreAddPointsReply (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_ScoreAddPointsReply & reply = *(const Auth2Cli_ScoreAddPointsReply *)msg;
|
||
|
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_ScoreTransferPointsReply (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_ScoreTransferPointsReply & reply = *(const Auth2Cli_ScoreTransferPointsReply *)msg;
|
||
|
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_ScoreSetPointsReply (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_ScoreSetPointsReply & reply = *(const Auth2Cli_ScoreSetPointsReply *)msg;
|
||
|
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
static bool Recv_ScoreGetRanksReply (
|
||
|
const byte msg[],
|
||
|
unsigned bytes,
|
||
|
void *
|
||
|
) {
|
||
|
const Auth2Cli_ScoreGetRanksReply & reply = *(const Auth2Cli_ScoreGetRanksReply *)msg;
|
||
|
|
||
|
NetTransRecv(reply.transId, msg, bytes);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* Cli2Auth protocol
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
#define MSG(s) kNetMsg_Cli2Auth_##s
|
||
|
static NetMsgInitSend s_send[] = {
|
||
|
{ MSG(PingRequest) },
|
||
|
{ MSG(ClientRegisterRequest) },
|
||
|
{ MSG(AcctLoginRequest) },
|
||
|
{ MSG(AcctCreateRequest) },
|
||
|
{ MSG(AcctCreateFromKeyRequest) },
|
||
|
{ MSG(PlayerCreateRequest) },
|
||
|
{ MSG(PlayerDeleteRequest) },
|
||
|
{ MSG(UpgradeVisitorRequest) },
|
||
|
{ MSG(AcctSetPlayerRequest) },
|
||
|
{ MSG(AcctChangePasswordRequest)},
|
||
|
{ MSG(AcctSetRolesRequest) },
|
||
|
{ MSG(AcctSetBillingTypeRequest)},
|
||
|
{ MSG(AcctActivateRequest) },
|
||
|
{ MSG(AgeRequest) },
|
||
|
{ MSG(FileListRequest) },
|
||
|
{ MSG(FileDownloadRequest) },
|
||
|
{ MSG(FileDownloadChunkAck) },
|
||
|
{ MSG(VaultFetchNodeRefs) },
|
||
|
{ MSG(VaultNodeAdd) },
|
||
|
{ MSG(VaultNodeRemove) },
|
||
|
{ MSG(VaultNodeFetch) },
|
||
|
{ MSG(VaultNodeCreate) },
|
||
|
{ MSG(VaultNodeSave) },
|
||
|
{ MSG(VaultInitAgeRequest) },
|
||
|
{ MSG(VaultNodeFind) },
|
||
|
{ MSG(VaultSetSeen) },
|
||
|
{ MSG(VaultSendNode) },
|
||
|
{ MSG(GetPublicAgeList) },
|
||
|
{ MSG(SetAgePublic) },
|
||
|
{ MSG(PropagateBuffer) },
|
||
|
{ MSG(ClientSetCCRLevel) },
|
||
|
{ MSG(LogPythonTraceback) },
|
||
|
{ MSG(LogStackDump) },
|
||
|
{ MSG(LogClientDebuggerConnect) },
|
||
|
{ MSG(SetPlayerBanStatusRequest)},
|
||
|
{ MSG(KickPlayer) },
|
||
|
{ MSG(ChangePlayerNameRequest) },
|
||
|
{ MSG(SendFriendInviteRequest) },
|
||
|
{ MSG(ScoreCreate) },
|
||
|
{ MSG(ScoreDelete) },
|
||
|
{ MSG(ScoreGetScores) },
|
||
|
{ MSG(ScoreAddPoints) },
|
||
|
{ MSG(ScoreTransferPoints) },
|
||
|
{ MSG(ScoreSetPoints) },
|
||
|
{ MSG(ScoreGetRanks) },
|
||
|
{ MSG(AccountExistsRequest) },
|
||
|
};
|
||
|
#undef MSG
|
||
|
|
||
|
#define MSG(s) kNetMsg_Auth2Cli_##s, Recv_##s
|
||
|
static NetMsgInitRecv s_recv[] = {
|
||
|
{ MSG(PingReply) },
|
||
|
{ MSG(ClientRegisterReply) },
|
||
|
{ MSG(AcctPlayerInfo) },
|
||
|
{ MSG(AcctLoginReply) },
|
||
|
{ MSG(AcctCreateReply) },
|
||
|
{ MSG(AcctCreateFromKeyReply) },
|
||
|
{ MSG(PlayerCreateReply) },
|
||
|
{ MSG(PlayerDeleteReply) },
|
||
|
{ MSG(UpgradeVisitorReply) },
|
||
|
{ MSG(AcctSetPlayerReply) },
|
||
|
{ MSG(AcctChangePasswordReply) },
|
||
|
{ MSG(AcctSetRolesReply) },
|
||
|
{ MSG(AcctSetBillingTypeReply) },
|
||
|
{ MSG(AcctActivateReply) },
|
||
|
{ MSG(AgeReply) },
|
||
|
{ MSG(FileListReply) },
|
||
|
{ MSG(FileDownloadChunk) },
|
||
|
{ MSG(KickedOff) },
|
||
|
{ MSG(VaultNodeRefsFetched) },
|
||
|
{ MSG(VaultNodeFetched) },
|
||
|
{ MSG(VaultNodeCreated) },
|
||
|
{ MSG(VaultNodeChanged) },
|
||
|
{ MSG(VaultNodeAdded) },
|
||
|
{ MSG(VaultNodeRemoved) },
|
||
|
{ MSG(VaultNodeDeleted) },
|
||
|
{ MSG(VaultSaveNodeReply) },
|
||
|
{ MSG(VaultAddNodeReply) },
|
||
|
{ MSG(VaultRemoveNodeReply) },
|
||
|
{ MSG(VaultInitAgeReply) },
|
||
|
{ MSG(VaultNodeFindReply) },
|
||
|
{ MSG(PublicAgeList) },
|
||
|
{ MSG(ServerAddr) },
|
||
|
{ MSG(NotifyNewBuild) },
|
||
|
{ MSG(SetPlayerBanStatusReply) },
|
||
|
{ MSG(ChangePlayerNameReply) },
|
||
|
{ MSG(SendFriendInviteReply) },
|
||
|
{ MSG(ScoreCreateReply) },
|
||
|
{ MSG(ScoreDeleteReply) },
|
||
|
{ MSG(ScoreGetScoresReply) },
|
||
|
{ MSG(ScoreAddPointsReply) },
|
||
|
{ MSG(ScoreTransferPointsReply) },
|
||
|
{ MSG(ScoreSetPointsReply) },
|
||
|
{ MSG(ScoreGetRanksReply) },
|
||
|
{ MSG(AccountExistsReply) },
|
||
|
};
|
||
|
#undef MSG
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* PingRequestTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
PingRequestTrans::PingRequestTrans (
|
||
|
FNetCliAuthPingRequestCallback callback,
|
||
|
void * param,
|
||
|
unsigned pingAtMs,
|
||
|
unsigned payloadBytes,
|
||
|
const void * payload
|
||
|
) : NetAuthTrans(kPingRequestTrans)
|
||
|
, m_callback(callback)
|
||
|
, m_param(param)
|
||
|
, m_pingAtMs(pingAtMs)
|
||
|
{
|
||
|
m_payload.Set((const byte *)payload, payloadBytes);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool PingRequestTrans::Send () {
|
||
|
|
||
|
if (!AcquireConn())
|
||
|
return false;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_PingRequest,
|
||
|
m_pingAtMs,
|
||
|
m_transId,
|
||
|
m_payload.Count(),
|
||
|
(unsigned_ptr) m_payload.Ptr(),
|
||
|
};
|
||
|
|
||
|
m_conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void PingRequestTrans::Post () {
|
||
|
|
||
|
m_callback(
|
||
|
m_result,
|
||
|
m_param,
|
||
|
m_pingAtMs,
|
||
|
m_replyAtMs,
|
||
|
m_payload.Count(),
|
||
|
m_payload.Ptr()
|
||
|
);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool PingRequestTrans::Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
) {
|
||
|
REF(bytes);
|
||
|
|
||
|
const Auth2Cli_PingReply & reply = *(const Auth2Cli_PingReply *)msg;
|
||
|
|
||
|
m_payload.Set(reply.payload, reply.payloadBytes);
|
||
|
m_replyAtMs = TimeGetMs();
|
||
|
m_result = kNetSuccess;
|
||
|
m_state = kTransStateComplete;
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* AccountExistsRequestTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
AccountExistsRequestTrans::AccountExistsRequestTrans (
|
||
|
FNetCliAuthAccountExistsRequestCallback callback,
|
||
|
void * param,
|
||
|
const wchar accountName[]
|
||
|
) : NetAuthTrans(kPingRequestTrans)
|
||
|
, m_callback(callback)
|
||
|
, m_param(param)
|
||
|
{
|
||
|
StrCopy(m_accountName, accountName, kMaxAccountNameLength);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool AccountExistsRequestTrans::Send () {
|
||
|
|
||
|
if (!AcquireConn())
|
||
|
return false;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_AccountExistsRequest,
|
||
|
m_transId,
|
||
|
(unsigned_ptr)m_accountName
|
||
|
};
|
||
|
|
||
|
m_conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void AccountExistsRequestTrans::Post () {
|
||
|
|
||
|
m_callback(
|
||
|
m_result,
|
||
|
m_param,
|
||
|
m_exists
|
||
|
);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool AccountExistsRequestTrans::Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
) {
|
||
|
REF(bytes);
|
||
|
|
||
|
const Auth2Cli_AccountExistsReply & reply = *(const Auth2Cli_AccountExistsReply *)msg;
|
||
|
|
||
|
m_exists = reply.exists;
|
||
|
m_result = reply.result;
|
||
|
m_state = kTransStateComplete;
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* LoginRequestTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
LoginRequestTrans::LoginRequestTrans (
|
||
|
FNetCliAuthLoginRequestCallback callback,
|
||
|
void * param
|
||
|
) : NetAuthTrans(kLoginRequestTrans)
|
||
|
, m_callback(callback)
|
||
|
, m_param(param)
|
||
|
, m_accountId(kNilGuid)
|
||
|
, m_accountFlags(0)
|
||
|
, m_playerCount(0)
|
||
|
{
|
||
|
ZERO(m_players);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void LoginRequestTrans::AddPlayer (
|
||
|
unsigned playerInt,
|
||
|
const wchar playerName[],
|
||
|
const wchar avatarShape[],
|
||
|
unsigned explorer
|
||
|
) {
|
||
|
unsigned index = m_playerCount++;
|
||
|
ASSERT(index < kMaxPlayersPerAccount);
|
||
|
m_players[index].playerInt = playerInt;
|
||
|
m_players[index].explorer = explorer;
|
||
|
StrCopy(m_players[index].playerName, playerName, arrsize(m_players[index].playerName));
|
||
|
StrCopy(m_players[index].avatarShape, avatarShape, arrsize(m_players[index].avatarShape));
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool LoginRequestTrans::Send () {
|
||
|
|
||
|
if (!AcquireConn())
|
||
|
return false;
|
||
|
|
||
|
ShaDigest challengeHash;
|
||
|
dword clientChallenge = 0;
|
||
|
|
||
|
wchar domain[15];
|
||
|
PathSplitEmail(s_accountName, nil, 0, domain, arrsize(domain), nil, 0, nil, 0, 0);
|
||
|
|
||
|
if (StrLen(domain) == 0 || StrCmpI(domain, L"gametap") == 0) {
|
||
|
challengeHash = s_accountNamePassHash;
|
||
|
}
|
||
|
else {
|
||
|
CryptCreateRandomSeed(
|
||
|
sizeof(clientChallenge),
|
||
|
(byte *) &clientChallenge
|
||
|
);
|
||
|
|
||
|
CryptHashPasswordChallenge(
|
||
|
clientChallenge,
|
||
|
s_active->serverChallenge,
|
||
|
s_accountNamePassHash,
|
||
|
&challengeHash
|
||
|
);
|
||
|
}
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_AcctLoginRequest,
|
||
|
m_transId,
|
||
|
clientChallenge,
|
||
|
(unsigned_ptr) s_accountName,
|
||
|
(unsigned_ptr) &challengeHash,
|
||
|
(unsigned_ptr) s_authToken,
|
||
|
(unsigned_ptr) s_os,
|
||
|
};
|
||
|
|
||
|
m_conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void LoginRequestTrans::Post () {
|
||
|
m_callback(
|
||
|
m_result,
|
||
|
m_param,
|
||
|
m_accountId,
|
||
|
m_accountFlags,
|
||
|
m_billingType,
|
||
|
m_players,
|
||
|
m_playerCount
|
||
|
);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool LoginRequestTrans::Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
) {
|
||
|
REF(bytes);
|
||
|
|
||
|
dword msgId = (dword)*msg;
|
||
|
switch (msgId) {
|
||
|
case kAuth2Cli_AcctPlayerInfo: {
|
||
|
const Auth2Cli_AcctPlayerInfo & reply = *(const Auth2Cli_AcctPlayerInfo *) msg;
|
||
|
AddPlayer(reply.playerInt, reply.playerName, reply.avatarShape, reply.explorer);
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
case kAuth2Cli_AcctLoginReply: {
|
||
|
const Auth2Cli_AcctLoginReply & reply = *(const Auth2Cli_AcctLoginReply *) msg;
|
||
|
m_result = reply.result;
|
||
|
m_state = kTransStateComplete;
|
||
|
m_accountId = reply.accountId;
|
||
|
m_accountFlags = reply.accountFlags;
|
||
|
m_billingType = reply.billingType;
|
||
|
|
||
|
unsigned memSize = min(arrsize(s_encryptionKey), arrsize(reply.encryptionKey));
|
||
|
memSize *= sizeof(UInt32);
|
||
|
MemCopy(s_encryptionKey, reply.encryptionKey, memSize);
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
DEFAULT_FATAL(msgId);
|
||
|
};
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* AgeRequestTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
AgeRequestTrans::AgeRequestTrans (
|
||
|
const wchar ageName[],
|
||
|
const Uuid & ageInstId,
|
||
|
FNetCliAuthAgeRequestCallback callback,
|
||
|
void * param
|
||
|
) : NetAuthTrans(kAgeRequestTrans)
|
||
|
, m_ageInstId(ageInstId)
|
||
|
, m_callback(callback)
|
||
|
, m_param(param)
|
||
|
{
|
||
|
StrCopy(m_ageName, ageName, arrsize(m_ageName));
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
AgeRequestTrans::~AgeRequestTrans () {
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool AgeRequestTrans::Send () {
|
||
|
if (!AcquireConn())
|
||
|
return true;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_AgeRequest,
|
||
|
m_transId,
|
||
|
(unsigned_ptr) m_ageName,
|
||
|
(unsigned_ptr) &m_ageInstId,
|
||
|
};
|
||
|
|
||
|
m_conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void AgeRequestTrans::Post () {
|
||
|
m_callback(
|
||
|
m_result,
|
||
|
m_param,
|
||
|
m_ageMcpId,
|
||
|
m_ageVaultId,
|
||
|
m_ageInstId,
|
||
|
m_gameSrvNode
|
||
|
);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool AgeRequestTrans::Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
) {
|
||
|
REF(bytes);
|
||
|
const Auth2Cli_AgeReply & reply = *(const Auth2Cli_AgeReply *) msg;
|
||
|
m_gameSrvNode = reply.gameSrvNode;
|
||
|
m_ageMcpId = reply.ageMcpId;
|
||
|
m_ageVaultId = reply.ageVaultId;
|
||
|
m_ageInstId = reply.ageInstId;
|
||
|
m_result = reply.result;
|
||
|
m_state = kTransStateComplete;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* AccountCreateRequestTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
AccountCreateRequestTrans::AccountCreateRequestTrans (
|
||
|
const wchar accountName[],
|
||
|
const wchar password[],
|
||
|
unsigned accountFlags,
|
||
|
unsigned billingType,
|
||
|
FNetCliAuthAccountCreateRequestCallback callback,
|
||
|
void * param
|
||
|
) : NetAuthTrans(kAccountCreateRequestTrans)
|
||
|
, m_callback(callback)
|
||
|
, m_param(param)
|
||
|
, m_accountFlags(accountFlags)
|
||
|
, m_billingType(billingType)
|
||
|
{
|
||
|
StrCopy(m_accountName, accountName, arrsize(m_accountName));
|
||
|
|
||
|
CryptHashPassword(
|
||
|
m_accountName,
|
||
|
password,
|
||
|
&m_namePassHash
|
||
|
);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool AccountCreateRequestTrans::Send () {
|
||
|
if (!AcquireConn())
|
||
|
return false;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_AcctCreateRequest,
|
||
|
m_transId,
|
||
|
(unsigned_ptr) m_accountName,
|
||
|
(unsigned_ptr) &m_namePassHash,
|
||
|
m_accountFlags,
|
||
|
m_billingType,
|
||
|
};
|
||
|
|
||
|
m_conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void AccountCreateRequestTrans::Post () {
|
||
|
m_callback(
|
||
|
m_result,
|
||
|
m_param,
|
||
|
m_accountId
|
||
|
);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool AccountCreateRequestTrans::Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
) {
|
||
|
REF(bytes);
|
||
|
const Auth2Cli_AcctCreateReply & reply = *(const Auth2Cli_AcctCreateReply *) msg;
|
||
|
|
||
|
m_result = reply.result;
|
||
|
m_accountId = reply.accountId;
|
||
|
m_state = kTransStateComplete;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* AccountCreateFromKeyRequestTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
AccountCreateFromKeyRequestTrans::AccountCreateFromKeyRequestTrans (
|
||
|
const wchar accountName[],
|
||
|
const wchar password[],
|
||
|
const Uuid & key,
|
||
|
unsigned billingType,
|
||
|
FNetCliAuthAccountCreateFromKeyRequestCallback callback,
|
||
|
void * param
|
||
|
) : NetAuthTrans(kAccountCreateFromKeyRequestTrans)
|
||
|
, m_callback(callback)
|
||
|
, m_param(param)
|
||
|
, m_billingType(billingType)
|
||
|
, m_key(key)
|
||
|
{
|
||
|
StrCopy(m_accountName, accountName, arrsize(m_accountName));
|
||
|
|
||
|
CryptHashPassword(
|
||
|
m_accountName,
|
||
|
password,
|
||
|
&m_namePassHash
|
||
|
);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool AccountCreateFromKeyRequestTrans::Send () {
|
||
|
if (!AcquireConn())
|
||
|
return false;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_AcctCreateFromKeyRequest,
|
||
|
m_transId,
|
||
|
(unsigned_ptr) m_accountName,
|
||
|
(unsigned_ptr) &m_namePassHash,
|
||
|
(unsigned_ptr) &m_key,
|
||
|
m_billingType,
|
||
|
};
|
||
|
|
||
|
m_conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void AccountCreateFromKeyRequestTrans::Post () {
|
||
|
m_callback(
|
||
|
m_result,
|
||
|
m_param,
|
||
|
m_accountId,
|
||
|
m_activationKey
|
||
|
);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool AccountCreateFromKeyRequestTrans::Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
) {
|
||
|
REF(bytes);
|
||
|
const Auth2Cli_AcctCreateFromKeyReply & reply = *(const Auth2Cli_AcctCreateFromKeyReply *) msg;
|
||
|
|
||
|
m_result = reply.result;
|
||
|
m_accountId = reply.accountId;
|
||
|
m_activationKey = reply.activationKey;
|
||
|
m_state = kTransStateComplete;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* PlayerCreateRequestTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
PlayerCreateRequestTrans::PlayerCreateRequestTrans (
|
||
|
const wchar playerName[],
|
||
|
const wchar avatarShape[],
|
||
|
const wchar friendInvite[],
|
||
|
FNetCliAuthPlayerCreateRequestCallback callback,
|
||
|
void * param
|
||
|
) : NetAuthTrans(kPlayerCreateRequestTrans)
|
||
|
, m_callback(callback)
|
||
|
, m_param(param)
|
||
|
{
|
||
|
StrCopy(m_playerName, playerName, arrsize(m_playerName));
|
||
|
StrCopy(m_avatarShape, avatarShape, arrsize(m_avatarShape));
|
||
|
if (friendInvite)
|
||
|
StrCopy(m_friendInvite, friendInvite, arrsize(m_friendInvite));
|
||
|
else
|
||
|
m_friendInvite[0] = 0;
|
||
|
ZERO(m_playerInfo);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool PlayerCreateRequestTrans::Send () {
|
||
|
if (!AcquireConn())
|
||
|
return false;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_PlayerCreateRequest,
|
||
|
m_transId,
|
||
|
(unsigned_ptr) m_playerName,
|
||
|
(unsigned_ptr) m_avatarShape,
|
||
|
(unsigned_ptr) m_friendInvite,
|
||
|
};
|
||
|
|
||
|
m_conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void PlayerCreateRequestTrans::Post () {
|
||
|
m_callback(
|
||
|
m_result,
|
||
|
m_param,
|
||
|
m_playerInfo
|
||
|
);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool PlayerCreateRequestTrans::Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
) {
|
||
|
REF(bytes);
|
||
|
const Auth2Cli_PlayerCreateReply & reply = *(const Auth2Cli_PlayerCreateReply *) msg;
|
||
|
if (!IS_NET_ERROR(reply.result)) {
|
||
|
m_playerInfo.playerInt = reply.playerInt;
|
||
|
m_playerInfo.explorer = reply.explorer;
|
||
|
StrCopy(m_playerInfo.playerName, reply.playerName, arrsize(m_playerInfo.playerName));
|
||
|
StrCopy(m_playerInfo.avatarShape, reply.avatarShape, arrsize(m_playerInfo.avatarShape));
|
||
|
}
|
||
|
m_result = reply.result;
|
||
|
m_state = kTransStateComplete;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* PlayerDeleteRequestTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
PlayerDeleteRequestTrans::PlayerDeleteRequestTrans (
|
||
|
unsigned playerId,
|
||
|
FNetCliAuthPlayerDeleteRequestCallback callback,
|
||
|
void * param
|
||
|
) : NetAuthTrans(kPlayerDeleteRequestTrans)
|
||
|
, m_callback(callback)
|
||
|
, m_param(param)
|
||
|
, m_playerId(playerId)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool PlayerDeleteRequestTrans::Send () {
|
||
|
if (!AcquireConn())
|
||
|
return false;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_PlayerDeleteRequest,
|
||
|
m_transId,
|
||
|
m_playerId
|
||
|
};
|
||
|
|
||
|
m_conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void PlayerDeleteRequestTrans::Post () {
|
||
|
m_callback(
|
||
|
m_result,
|
||
|
m_param
|
||
|
);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool PlayerDeleteRequestTrans::Recv (
|
||
|
const byte msg[],
|
||
|
unsigned
|
||
|
) {
|
||
|
const Auth2Cli_PlayerDeleteReply & reply = *(const Auth2Cli_PlayerDeleteReply *) msg;
|
||
|
m_result = reply.result;
|
||
|
m_state = kTransStateComplete;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* UpgradeVisitorRequestTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
UpgradeVisitorRequestTrans::UpgradeVisitorRequestTrans (
|
||
|
unsigned playerId,
|
||
|
FNetCliAuthUpgradeVisitorRequestCallback callback,
|
||
|
void * param
|
||
|
) : NetAuthTrans(kUpgradeVisitorRequestTrans)
|
||
|
, m_callback(callback)
|
||
|
, m_param(param)
|
||
|
, m_playerId(playerId)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool UpgradeVisitorRequestTrans::Send () {
|
||
|
if (!AcquireConn())
|
||
|
return false;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_UpgradeVisitorRequest,
|
||
|
m_transId,
|
||
|
m_playerId
|
||
|
};
|
||
|
|
||
|
m_conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void UpgradeVisitorRequestTrans::Post () {
|
||
|
m_callback(
|
||
|
m_result,
|
||
|
m_param
|
||
|
);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool UpgradeVisitorRequestTrans::Recv (
|
||
|
const byte msg[],
|
||
|
unsigned
|
||
|
) {
|
||
|
const Auth2Cli_UpgradeVisitorReply & reply = *(const Auth2Cli_UpgradeVisitorReply *) msg;
|
||
|
m_result = reply.result;
|
||
|
m_state = kTransStateComplete;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* SetPlayerRequestTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
SetPlayerRequestTrans::SetPlayerRequestTrans (
|
||
|
unsigned playerInt,
|
||
|
FNetCliAuthSetPlayerRequestCallback callback,
|
||
|
void * param
|
||
|
|
||
|
) : NetAuthTrans(kSetPlayerRequestTrans)
|
||
|
, m_playerInt(playerInt)
|
||
|
, m_callback(callback)
|
||
|
, m_param(param)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool SetPlayerRequestTrans::Send () {
|
||
|
if (!AcquireConn())
|
||
|
return false;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_AcctSetPlayerRequest,
|
||
|
m_transId,
|
||
|
m_playerInt,
|
||
|
};
|
||
|
|
||
|
m_conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void SetPlayerRequestTrans::Post () {
|
||
|
m_callback(m_result, m_param);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool SetPlayerRequestTrans::Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
) {
|
||
|
REF(bytes);
|
||
|
const Auth2Cli_AcctSetPlayerReply & reply = *(const Auth2Cli_AcctSetPlayerReply *) msg;
|
||
|
m_result = reply.result;
|
||
|
m_state = kTransStateComplete;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* AccountChangePasswordRequestTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
AccountChangePasswordRequestTrans::AccountChangePasswordRequestTrans (
|
||
|
const wchar accountName[],
|
||
|
const wchar password[],
|
||
|
FNetCliAuthAccountChangePasswordRequestCallback callback,
|
||
|
void * param
|
||
|
) : NetAuthTrans(kAccountChangePasswordRequestTrans)
|
||
|
, m_callback(callback)
|
||
|
, m_param(param)
|
||
|
{
|
||
|
StrCopy(m_accountName, accountName, arrsize(m_accountName));
|
||
|
|
||
|
CryptHashPassword(
|
||
|
m_accountName,
|
||
|
password,
|
||
|
&m_namePassHash
|
||
|
);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool AccountChangePasswordRequestTrans::Send () {
|
||
|
if (!AcquireConn())
|
||
|
return false;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_AcctChangePasswordRequest,
|
||
|
m_transId,
|
||
|
(unsigned_ptr) m_accountName,
|
||
|
(unsigned_ptr) &m_namePassHash,
|
||
|
};
|
||
|
|
||
|
m_conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void AccountChangePasswordRequestTrans::Post () {
|
||
|
m_callback(
|
||
|
m_result,
|
||
|
m_param
|
||
|
);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool AccountChangePasswordRequestTrans::Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
) {
|
||
|
REF(bytes);
|
||
|
const Auth2Cli_AcctChangePasswordReply & reply = *(const Auth2Cli_AcctChangePasswordReply *) msg;
|
||
|
|
||
|
m_result = reply.result;
|
||
|
m_state = kTransStateComplete;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* GetPublicAgeListTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
GetPublicAgeListTrans::GetPublicAgeListTrans (
|
||
|
const wchar ageName[],
|
||
|
FNetCliAuthGetPublicAgeListCallback callback,
|
||
|
void * param
|
||
|
) : NetAuthTrans(kGetPublicAgeListTrans)
|
||
|
, m_callback(callback)
|
||
|
, m_param(param)
|
||
|
{
|
||
|
StrCopy(m_ageName, ageName, arrsize(m_ageName));
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool GetPublicAgeListTrans::Send () {
|
||
|
if (!AcquireConn())
|
||
|
return false;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_GetPublicAgeList,
|
||
|
m_transId,
|
||
|
(unsigned_ptr) &m_ageName,
|
||
|
};
|
||
|
|
||
|
m_conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void GetPublicAgeListTrans::Post () {
|
||
|
m_callback(
|
||
|
m_result,
|
||
|
m_param,
|
||
|
m_ages
|
||
|
);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool GetPublicAgeListTrans::Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
) {
|
||
|
REF(bytes);
|
||
|
const Auth2Cli_PublicAgeList & reply = *(const Auth2Cli_PublicAgeList *) msg;
|
||
|
|
||
|
if (IS_NET_SUCCESS(reply.result))
|
||
|
m_ages.Set(reply.ages, reply.ageCount);
|
||
|
|
||
|
m_result = reply.result;
|
||
|
m_state = kTransStateComplete;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* AccountSetRolesRequestTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
AccountSetRolesRequestTrans::AccountSetRolesRequestTrans (
|
||
|
const wchar accountName[],
|
||
|
unsigned accountFlags,
|
||
|
FNetCliAuthAccountSetRolesRequestCallback callback,
|
||
|
void * param
|
||
|
) : NetAuthTrans(kAccountSetRolesRequestTrans)
|
||
|
, m_callback(callback)
|
||
|
, m_param(param)
|
||
|
, m_accountFlags(accountFlags)
|
||
|
{
|
||
|
StrCopy(m_accountName, accountName, arrsize(m_accountName));
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool AccountSetRolesRequestTrans::Send () {
|
||
|
if (!AcquireConn())
|
||
|
return false;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_AcctSetRolesRequest,
|
||
|
m_transId,
|
||
|
(unsigned_ptr) m_accountName,
|
||
|
m_accountFlags,
|
||
|
};
|
||
|
|
||
|
m_conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void AccountSetRolesRequestTrans::Post () {
|
||
|
m_callback(
|
||
|
m_result,
|
||
|
m_param
|
||
|
);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool AccountSetRolesRequestTrans::Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
) {
|
||
|
REF(bytes);
|
||
|
const Auth2Cli_AcctSetRolesReply & reply = *(const Auth2Cli_AcctSetRolesReply *) msg;
|
||
|
|
||
|
m_result = reply.result;
|
||
|
m_state = kTransStateComplete;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* AccountSetBillingTypeRequestTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
AccountSetBillingTypeRequestTrans::AccountSetBillingTypeRequestTrans (
|
||
|
const wchar accountName[],
|
||
|
unsigned billingType,
|
||
|
FNetCliAuthAccountSetBillingTypeRequestCallback callback,
|
||
|
void * param
|
||
|
) : NetAuthTrans(kAccountSetBillingTypeRequestTrans)
|
||
|
, m_callback(callback)
|
||
|
, m_param(param)
|
||
|
, m_billingType(billingType)
|
||
|
{
|
||
|
StrCopy(m_accountName, accountName, arrsize(m_accountName));
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool AccountSetBillingTypeRequestTrans::Send () {
|
||
|
if (!AcquireConn())
|
||
|
return false;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_AcctSetBillingTypeRequest,
|
||
|
m_transId,
|
||
|
(unsigned_ptr) m_accountName,
|
||
|
m_billingType,
|
||
|
};
|
||
|
|
||
|
m_conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void AccountSetBillingTypeRequestTrans::Post () {
|
||
|
m_callback(
|
||
|
m_result,
|
||
|
m_param
|
||
|
);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool AccountSetBillingTypeRequestTrans::Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
) {
|
||
|
REF(bytes);
|
||
|
const Auth2Cli_AcctSetBillingTypeReply & reply = *(const Auth2Cli_AcctSetBillingTypeReply *) msg;
|
||
|
|
||
|
m_result = reply.result;
|
||
|
m_state = kTransStateComplete;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* AccountActivateRequestTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
AccountActivateRequestTrans::AccountActivateRequestTrans (
|
||
|
const Uuid & activationKey,
|
||
|
FNetCliAuthAccountActivateRequestCallback callback,
|
||
|
void * param
|
||
|
) : NetAuthTrans(kAccountActivateRequestTrans)
|
||
|
, m_callback(callback)
|
||
|
, m_param(param)
|
||
|
{
|
||
|
m_activationKey = activationKey;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool AccountActivateRequestTrans::Send () {
|
||
|
if (!AcquireConn())
|
||
|
return false;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_AcctActivateRequest,
|
||
|
m_transId,
|
||
|
(unsigned_ptr) &m_activationKey,
|
||
|
};
|
||
|
|
||
|
m_conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void AccountActivateRequestTrans::Post () {
|
||
|
m_callback(
|
||
|
m_result,
|
||
|
m_param
|
||
|
);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool AccountActivateRequestTrans::Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
) {
|
||
|
REF(bytes);
|
||
|
const Auth2Cli_AcctActivateReply & reply = *(const Auth2Cli_AcctActivateReply *) msg;
|
||
|
|
||
|
m_result = reply.result;
|
||
|
m_state = kTransStateComplete;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* FileListRequestTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
FileListRequestTrans::FileListRequestTrans (
|
||
|
FNetCliAuthFileListRequestCallback callback,
|
||
|
void * param,
|
||
|
const wchar directory[],
|
||
|
const wchar ext[]
|
||
|
) : NetAuthTrans(kFileListRequestTrans)
|
||
|
, m_callback(callback)
|
||
|
, m_param(param)
|
||
|
{
|
||
|
StrCopy(m_directory, directory, arrsize(m_directory));
|
||
|
StrCopy(m_ext, ext, arrsize(m_ext));
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool FileListRequestTrans::Send () {
|
||
|
if (!AcquireConn())
|
||
|
return false;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_FileListRequest,
|
||
|
m_transId,
|
||
|
(unsigned_ptr) m_directory,
|
||
|
(unsigned_ptr) m_ext,
|
||
|
};
|
||
|
|
||
|
m_conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void FileListRequestTrans::Post () {
|
||
|
m_callback(m_result, m_param, m_fileInfoArray.Ptr(), m_fileInfoArray.Count());
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool FileListRequestTrans::Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
) {
|
||
|
REF(bytes);
|
||
|
const Auth2Cli_FileListReply & reply = *(const Auth2Cli_FileListReply *) msg;
|
||
|
|
||
|
dword wcharCount = reply.wcharCount;
|
||
|
const wchar* curChar = reply.fileData;
|
||
|
// if wcharCount is 2, the data only contains the terminator "\0\0" and we
|
||
|
// don't need to convert anything
|
||
|
if (wcharCount == 2)
|
||
|
m_fileInfoArray.Clear();
|
||
|
else
|
||
|
{
|
||
|
// fileData format: "filename\0size\0filename\0size\0...\0\0"
|
||
|
bool done = false;
|
||
|
while (!done) {
|
||
|
if (wcharCount == 0)
|
||
|
{
|
||
|
done = true;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
// read in the filename
|
||
|
wchar filename[MAX_PATH];
|
||
|
StrCopy(filename, curChar, arrsize(filename));
|
||
|
filename[arrsize(filename) - 1] = L'\0'; // make sure it's terminated
|
||
|
|
||
|
unsigned filenameLen = StrLen(filename);
|
||
|
curChar += filenameLen; // advance the pointer
|
||
|
wcharCount -= filenameLen; // keep track of the amount remaining
|
||
|
if ((*curChar != L'\0') || (wcharCount <= 0))
|
||
|
return false; // something is screwy, abort and disconnect
|
||
|
|
||
|
curChar++; // point it at the first part of the size value (format: 0xHHHHLLLL)
|
||
|
wcharCount--;
|
||
|
if (wcharCount < 4) // we have to have 2 chars for the size, and 2 for terminator at least
|
||
|
return false; // screwy data
|
||
|
unsigned size = ((*curChar) << 16) + (*(curChar + 1));
|
||
|
curChar += 2;
|
||
|
wcharCount -= 2;
|
||
|
if ((*curChar != L'\0') || (wcharCount <= 0))
|
||
|
return false; // screwy data
|
||
|
|
||
|
// save the data in our array
|
||
|
NetCliAuthFileInfo* info = m_fileInfoArray.New();
|
||
|
StrCopy(info->filename, filename, arrsize(info->filename));
|
||
|
info->filesize = size;
|
||
|
|
||
|
// point it at either the second part of the terminator, or the next filename
|
||
|
curChar++;
|
||
|
wcharCount--;
|
||
|
if (*curChar == L'\0')
|
||
|
{
|
||
|
// we hit the terminator
|
||
|
if (wcharCount != 1)
|
||
|
return false; // invalid data, we shouldn't have any more
|
||
|
done = true; // we're done
|
||
|
}
|
||
|
else if (wcharCount < 6) // we must have at least a 1 char string, '\0', size, and "\0\0" terminator left
|
||
|
return false; // screwy data
|
||
|
}
|
||
|
}
|
||
|
|
||
|
m_result = reply.result;
|
||
|
m_state = kTransStateComplete;
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* FileDownloadRequestTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
FileDownloadRequestTrans::FileDownloadRequestTrans (
|
||
|
FNetCliAuthFileRequestCallback callback,
|
||
|
void * param,
|
||
|
const wchar filename[],
|
||
|
hsStream * writer
|
||
|
) : NetAuthTrans(kFileDownloadRequestTrans)
|
||
|
, m_callback(callback)
|
||
|
, m_param(param)
|
||
|
, m_writer(writer)
|
||
|
{
|
||
|
StrCopy(m_filename, filename, arrsize(m_filename));
|
||
|
// This transaction issues "sub transactions" which must complete
|
||
|
// before this one even though they were issued after us.
|
||
|
m_hasSubTrans = true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool FileDownloadRequestTrans::Send () {
|
||
|
if (!AcquireConn())
|
||
|
return false;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_FileDownloadRequest,
|
||
|
m_transId,
|
||
|
(unsigned_ptr) m_filename,
|
||
|
};
|
||
|
|
||
|
m_conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void FileDownloadRequestTrans::Post () {
|
||
|
m_callback(m_result, m_param, m_filename, m_writer);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool FileDownloadRequestTrans::Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
) {
|
||
|
REF(bytes);
|
||
|
const Auth2Cli_FileDownloadChunk & reply = *(const Auth2Cli_FileDownloadChunk *) msg;
|
||
|
|
||
|
if (IS_NET_ERROR(reply.result)) {
|
||
|
// we have a problem... indicate we are done and abort
|
||
|
m_result = reply.result;
|
||
|
m_state = kTransStateComplete;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
// we have data to write, so queue it for write in the main thread (we're
|
||
|
// currently in a net recv thread)
|
||
|
if (reply.chunkSize) {
|
||
|
RcvdFileDownloadChunkTrans * writeTrans = NEW(RcvdFileDownloadChunkTrans);
|
||
|
writeTrans->writer = m_writer;
|
||
|
writeTrans->bytes = reply.chunkSize;
|
||
|
writeTrans->offset = reply.chunkOffset;
|
||
|
writeTrans->data = (byte *)ALLOC(reply.chunkSize);
|
||
|
MemCopy(writeTrans->data, reply.chunkData, reply.chunkSize);
|
||
|
NetTransSend(writeTrans);
|
||
|
}
|
||
|
|
||
|
if (reply.chunkOffset + reply.chunkSize >= reply.fileSize) {
|
||
|
// all bytes received, mark as complete
|
||
|
m_result = reply.result;
|
||
|
m_state = kTransStateComplete;
|
||
|
}
|
||
|
|
||
|
// Ack the data
|
||
|
const unsigned_ptr ack[] = {
|
||
|
kCli2Auth_FileDownloadChunkAck,
|
||
|
m_transId
|
||
|
};
|
||
|
m_conn->Send(ack, arrsize(ack));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* RcvdFileDownloadChunkTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
RcvdFileDownloadChunkTrans::~RcvdFileDownloadChunkTrans () {
|
||
|
FREE(data);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void RcvdFileDownloadChunkTrans::Post () {
|
||
|
|
||
|
if (writer->GetPosition() != offset)
|
||
|
writer->SetPosition(offset);
|
||
|
|
||
|
writer->Write(bytes, data);
|
||
|
m_result = kNetSuccess;
|
||
|
m_state = kTransStateComplete;
|
||
|
}
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* RcvdPropagatedBufferTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
RcvdPropagatedBufferTrans::~RcvdPropagatedBufferTrans () {
|
||
|
FREE(bufferData);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void RcvdPropagatedBufferTrans::Post () {
|
||
|
if (s_bufRcvdCb)
|
||
|
s_bufRcvdCb(bufferType, bufferBytes, bufferData);
|
||
|
}
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* VaultNodeChangedTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
void VaultNodeChangedTrans::Post () {
|
||
|
if (s_vaultNodeChangedHandler)
|
||
|
s_vaultNodeChangedHandler(m_nodeId, m_revId);
|
||
|
}
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* VaultNodeAddedTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
void VaultNodeAddedTrans::Post () {
|
||
|
if (s_vaultNodeAddedHandler)
|
||
|
s_vaultNodeAddedHandler(m_parentId, m_childId, m_ownerId);
|
||
|
}
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* VaultNodeRemovedTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
void VaultNodeRemovedTrans::Post () {
|
||
|
if (s_vaultNodeRemovedHandler)
|
||
|
s_vaultNodeRemovedHandler(m_parentId, m_childId);
|
||
|
}
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* VaultNodeDeletedTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
void VaultNodeDeletedTrans::Post () {
|
||
|
if (s_vaultNodeDeletedHandler)
|
||
|
s_vaultNodeDeletedHandler(m_nodeId);
|
||
|
}
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* VaultFetchNodeRefsTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
VaultFetchNodeRefsTrans::VaultFetchNodeRefsTrans (
|
||
|
unsigned nodeId,
|
||
|
FNetCliAuthVaultNodeRefsFetched callback,
|
||
|
void * param
|
||
|
) : NetAuthTrans(kVaultFetchNodeRefsTrans)
|
||
|
, m_nodeId(nodeId)
|
||
|
, m_callback(callback)
|
||
|
, m_param(param)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool VaultFetchNodeRefsTrans::Send () {
|
||
|
if (!AcquireConn())
|
||
|
return false;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_VaultFetchNodeRefs,
|
||
|
m_transId,
|
||
|
m_nodeId,
|
||
|
};
|
||
|
|
||
|
m_conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void VaultFetchNodeRefsTrans::Post () {
|
||
|
if (m_callback)
|
||
|
m_callback(
|
||
|
m_result,
|
||
|
m_param,
|
||
|
m_refs.Ptr(),
|
||
|
m_refs.Count()
|
||
|
);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool VaultFetchNodeRefsTrans::Recv (
|
||
|
const byte msg[],
|
||
|
unsigned
|
||
|
) {
|
||
|
const Auth2Cli_VaultNodeRefsFetched & reply = *(const Auth2Cli_VaultNodeRefsFetched *) msg;
|
||
|
|
||
|
if (IS_NET_SUCCESS(reply.result))
|
||
|
m_refs.Set(reply.refs, reply.refCount);
|
||
|
|
||
|
m_result = reply.result;
|
||
|
m_state = kTransStateComplete;
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* VaultInitAgeTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
VaultInitAgeTrans::VaultInitAgeTrans (
|
||
|
FNetCliAuthAgeInitCallback callback, // optional
|
||
|
void * param, // optional
|
||
|
const Uuid & ageInstId, // optional. is used in match
|
||
|
const Uuid & parentAgeInstId, // optional. is used in match
|
||
|
const wchar ageFilename[], // optional. is used in match
|
||
|
const wchar ageInstName[], // optional. not used in match
|
||
|
const wchar ageUserName[], // optional. not used in match
|
||
|
const wchar ageDesc[], // optional. not used in match
|
||
|
unsigned ageSequenceNumber, // optional. not used in match
|
||
|
unsigned ageLanguage // optional. not used in match
|
||
|
) : NetAuthTrans(kVaultInitAgeTrans)
|
||
|
, m_callback(callback)
|
||
|
, m_param(param)
|
||
|
, m_ageInstId(ageInstId)
|
||
|
, m_parentAgeInstId(parentAgeInstId)
|
||
|
, m_ageFilename(StrDup(ageFilename ? ageFilename : L""))
|
||
|
, m_ageInstName(StrDup(ageInstName ? ageInstName : L""))
|
||
|
, m_ageUserName(StrDup(ageUserName ? ageUserName : L""))
|
||
|
, m_ageDesc(StrDup(ageDesc ? ageDesc : L""))
|
||
|
, m_ageSequenceNumber(ageSequenceNumber)
|
||
|
, m_ageLanguage(ageLanguage)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
VaultInitAgeTrans::~VaultInitAgeTrans () {
|
||
|
FREE(m_ageFilename);
|
||
|
FREE(m_ageInstName);
|
||
|
FREE(m_ageUserName);
|
||
|
FREE(m_ageDesc);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool VaultInitAgeTrans::Send () {
|
||
|
if (!AcquireConn())
|
||
|
return false;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_VaultInitAgeRequest,
|
||
|
m_transId,
|
||
|
(unsigned_ptr) &m_ageInstId,
|
||
|
(unsigned_ptr) &m_parentAgeInstId,
|
||
|
(unsigned_ptr) m_ageFilename,
|
||
|
(unsigned_ptr) m_ageInstName,
|
||
|
(unsigned_ptr) m_ageUserName,
|
||
|
(unsigned_ptr) m_ageDesc,
|
||
|
m_ageSequenceNumber,
|
||
|
m_ageLanguage,
|
||
|
};
|
||
|
|
||
|
m_conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void VaultInitAgeTrans::Post () {
|
||
|
if (m_callback)
|
||
|
m_callback(
|
||
|
m_result,
|
||
|
m_param,
|
||
|
m_ageId,
|
||
|
m_ageInfoId
|
||
|
);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool VaultInitAgeTrans::Recv (
|
||
|
const byte msg[],
|
||
|
unsigned
|
||
|
) {
|
||
|
const Auth2Cli_VaultInitAgeReply & reply = *(const Auth2Cli_VaultInitAgeReply *) msg;
|
||
|
|
||
|
m_ageId = reply.ageVaultId;
|
||
|
m_ageInfoId = reply.ageInfoVaultId;
|
||
|
|
||
|
m_result = reply.result;
|
||
|
m_state = kTransStateComplete;
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* VaultFetchNodeTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
VaultFetchNodeTrans::VaultFetchNodeTrans (
|
||
|
unsigned nodeId,
|
||
|
FNetCliAuthVaultNodeFetched callback,
|
||
|
void * param
|
||
|
) : NetAuthTrans(kVaultFetchNodeTrans)
|
||
|
, m_nodeId(nodeId)
|
||
|
, m_callback(callback)
|
||
|
, m_param(param)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool VaultFetchNodeTrans::Send () {
|
||
|
if (!AcquireConn())
|
||
|
return false;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_VaultNodeFetch,
|
||
|
m_transId,
|
||
|
m_nodeId,
|
||
|
};
|
||
|
|
||
|
m_conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void VaultFetchNodeTrans::Post () {
|
||
|
m_callback(
|
||
|
m_result,
|
||
|
m_param,
|
||
|
m_node
|
||
|
);
|
||
|
if (m_node)
|
||
|
m_node->DecRef("Recv");
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool VaultFetchNodeTrans::Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
) {
|
||
|
REF(bytes);
|
||
|
|
||
|
const Auth2Cli_VaultNodeFetched & reply = *(const Auth2Cli_VaultNodeFetched *) msg;
|
||
|
|
||
|
if (IS_NET_SUCCESS(reply.result)) {
|
||
|
m_node = NEWZERO(NetVaultNode);
|
||
|
m_node->Read_LCS(reply.nodeBuffer, reply.nodeBytes, 0);
|
||
|
m_node->IncRef("Recv");
|
||
|
}
|
||
|
|
||
|
m_result = reply.result;
|
||
|
m_state = kTransStateComplete;
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* VaultFindNodeTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
VaultFindNodeTrans::VaultFindNodeTrans (
|
||
|
NetVaultNode * templateNode,
|
||
|
FNetCliAuthVaultNodeFind callback,
|
||
|
void * param
|
||
|
) : NetAuthTrans(kVaultFindNodeTrans)
|
||
|
, m_node(templateNode)
|
||
|
, m_callback(callback)
|
||
|
, m_param(param)
|
||
|
{
|
||
|
m_node->IncRef();
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
VaultFindNodeTrans::~VaultFindNodeTrans () {
|
||
|
m_node->DecRef();
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool VaultFindNodeTrans::Send () {
|
||
|
if (!AcquireConn())
|
||
|
return false;
|
||
|
|
||
|
ARRAY(byte) buffer;
|
||
|
m_node->critsect.Enter();
|
||
|
m_node->Write_LCS(&buffer, 0);
|
||
|
m_node->critsect.Leave();
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_VaultNodeFind,
|
||
|
m_transId,
|
||
|
buffer.Count(),
|
||
|
(unsigned_ptr) buffer.Ptr(),
|
||
|
};
|
||
|
|
||
|
m_conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void VaultFindNodeTrans::Post () {
|
||
|
m_callback(
|
||
|
m_result,
|
||
|
m_param,
|
||
|
m_nodeIds.Count(),
|
||
|
m_nodeIds.Ptr()
|
||
|
);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool VaultFindNodeTrans::Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
) {
|
||
|
REF(bytes);
|
||
|
|
||
|
const Auth2Cli_VaultNodeFindReply & reply = *(const Auth2Cli_VaultNodeFindReply *) msg;
|
||
|
|
||
|
if (IS_NET_SUCCESS(reply.result)) {
|
||
|
COMPILER_ASSERT(sizeof(unsigned) == sizeof(dword));
|
||
|
m_nodeIds.Set((unsigned *)reply.nodeIds, reply.nodeIdCount);
|
||
|
}
|
||
|
|
||
|
m_result = reply.result;
|
||
|
m_state = kTransStateComplete;
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* VaultCreateNodeTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
VaultCreateNodeTrans::VaultCreateNodeTrans (
|
||
|
NetVaultNode * templateNode,
|
||
|
FNetCliAuthVaultNodeCreated callback,
|
||
|
void * param
|
||
|
) : NetAuthTrans(kVaultCreateNodeTrans)
|
||
|
, m_templateNode(templateNode)
|
||
|
, m_callback(callback)
|
||
|
, m_param(param)
|
||
|
{
|
||
|
m_templateNode->IncRef();
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool VaultCreateNodeTrans::Send () {
|
||
|
if (!AcquireConn())
|
||
|
return false;
|
||
|
|
||
|
ARRAY(byte) buffer;
|
||
|
m_templateNode->Write_LCS(&buffer, 0);
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_VaultNodeCreate,
|
||
|
m_transId,
|
||
|
buffer.Count(),
|
||
|
(unsigned_ptr) buffer.Ptr()
|
||
|
};
|
||
|
|
||
|
m_conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void VaultCreateNodeTrans::Post () {
|
||
|
m_callback(
|
||
|
m_result,
|
||
|
m_param,
|
||
|
m_nodeId
|
||
|
);
|
||
|
m_templateNode->DecRef();
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool VaultCreateNodeTrans::Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
) {
|
||
|
REF(bytes);
|
||
|
|
||
|
const Auth2Cli_VaultNodeCreated & reply = *(const Auth2Cli_VaultNodeCreated *) msg;
|
||
|
|
||
|
if (IS_NET_SUCCESS(reply.result))
|
||
|
m_nodeId = reply.nodeId;
|
||
|
|
||
|
m_result = reply.result;
|
||
|
m_state = kTransStateComplete;
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* VaultSaveNodeTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
VaultSaveNodeTrans::VaultSaveNodeTrans (
|
||
|
unsigned nodeId,
|
||
|
const Uuid & revisionId,
|
||
|
unsigned dataCount,
|
||
|
const void * data,
|
||
|
FNetCliAuthVaultNodeSaveCallback callback,
|
||
|
void * param
|
||
|
) : NetAuthTrans(kVaultSaveNodeTrans)
|
||
|
, m_nodeId(nodeId)
|
||
|
, m_revisionId(revisionId)
|
||
|
, m_callback(callback)
|
||
|
, m_param(param)
|
||
|
{
|
||
|
m_buffer.Set((const byte *)data, dataCount);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool VaultSaveNodeTrans::Send () {
|
||
|
if (!AcquireConn())
|
||
|
return false;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_VaultNodeSave,
|
||
|
m_transId,
|
||
|
m_nodeId,
|
||
|
(unsigned_ptr) &m_revisionId,
|
||
|
m_buffer.Count(),
|
||
|
(unsigned_ptr) m_buffer.Ptr(),
|
||
|
};
|
||
|
|
||
|
m_conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void VaultSaveNodeTrans::Post () {
|
||
|
if (m_callback) {
|
||
|
m_callback(
|
||
|
m_result,
|
||
|
m_param
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool VaultSaveNodeTrans::Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
) {
|
||
|
REF(bytes);
|
||
|
|
||
|
const Auth2Cli_VaultSaveNodeReply & reply = *(const Auth2Cli_VaultSaveNodeReply *) msg;
|
||
|
|
||
|
m_result = reply.result;
|
||
|
m_state = kTransStateComplete;
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* VaultAddNodeTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
VaultAddNodeTrans::VaultAddNodeTrans (
|
||
|
unsigned parentId,
|
||
|
unsigned childId,
|
||
|
unsigned ownerId,
|
||
|
FNetCliAuthVaultNodeAddCallback callback,
|
||
|
void * param
|
||
|
) : NetAuthTrans(kVaultAddNodeTrans)
|
||
|
, m_parentId(parentId)
|
||
|
, m_childId(childId)
|
||
|
, m_ownerId(ownerId)
|
||
|
, m_callback(callback)
|
||
|
, m_param(param)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool VaultAddNodeTrans::Send () {
|
||
|
if (!AcquireConn())
|
||
|
return false;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_VaultNodeAdd,
|
||
|
m_transId,
|
||
|
m_parentId,
|
||
|
m_childId,
|
||
|
m_ownerId,
|
||
|
};
|
||
|
|
||
|
m_conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void VaultAddNodeTrans::Post () {
|
||
|
if (m_callback) {
|
||
|
m_callback(
|
||
|
m_result,
|
||
|
m_param
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool VaultAddNodeTrans::Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
) {
|
||
|
REF(bytes);
|
||
|
|
||
|
const Auth2Cli_VaultAddNodeReply & reply = *(const Auth2Cli_VaultAddNodeReply *) msg;
|
||
|
|
||
|
m_result = reply.result;
|
||
|
m_state = kTransStateComplete;
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* VaultRemoveNodeTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
VaultRemoveNodeTrans::VaultRemoveNodeTrans (
|
||
|
unsigned parentId,
|
||
|
unsigned childId,
|
||
|
FNetCliAuthVaultNodeRemoveCallback callback,
|
||
|
void * param
|
||
|
) : NetAuthTrans(kVaultRemoveNodeTrans)
|
||
|
, m_parentId(parentId)
|
||
|
, m_childId(childId)
|
||
|
, m_callback(callback)
|
||
|
, m_param(param)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool VaultRemoveNodeTrans::Send () {
|
||
|
if (!AcquireConn())
|
||
|
return false;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_VaultNodeRemove,
|
||
|
m_transId,
|
||
|
m_parentId,
|
||
|
m_childId,
|
||
|
};
|
||
|
|
||
|
m_conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void VaultRemoveNodeTrans::Post () {
|
||
|
if (m_callback) {
|
||
|
m_callback(
|
||
|
m_result,
|
||
|
m_param
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool VaultRemoveNodeTrans::Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
) {
|
||
|
REF(bytes);
|
||
|
|
||
|
const Auth2Cli_VaultRemoveNodeReply & reply = *(const Auth2Cli_VaultRemoveNodeReply *) msg;
|
||
|
|
||
|
m_result = reply.result;
|
||
|
m_state = kTransStateComplete;
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* NotifyNewBuildTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
void NotifyNewBuildTrans::Post () {
|
||
|
|
||
|
if (s_notifyNewBuildHandler)
|
||
|
s_notifyNewBuildHandler();
|
||
|
}
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* SetPlayerBanStatusRequestTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
SetPlayerBanStatusRequestTrans::SetPlayerBanStatusRequestTrans (
|
||
|
unsigned playerId,
|
||
|
unsigned banned,
|
||
|
FNetCliAuthSetPlayerBanStatusRequestCallback callback,
|
||
|
void * param
|
||
|
) : NetAuthTrans(kSetPlayerBanStatusRequestTrans)
|
||
|
, m_callback(callback)
|
||
|
, m_param(param)
|
||
|
, m_playerId(playerId)
|
||
|
, m_banned(banned)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool SetPlayerBanStatusRequestTrans::Send () {
|
||
|
if (!AcquireConn())
|
||
|
return false;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_SetPlayerBanStatusRequest,
|
||
|
m_transId,
|
||
|
m_playerId,
|
||
|
m_banned,
|
||
|
};
|
||
|
|
||
|
m_conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void SetPlayerBanStatusRequestTrans::Post () {
|
||
|
m_callback(
|
||
|
m_result,
|
||
|
m_param
|
||
|
);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool SetPlayerBanStatusRequestTrans::Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
) {
|
||
|
REF(bytes);
|
||
|
const Auth2Cli_SetPlayerBanStatusReply & reply = *(const Auth2Cli_SetPlayerBanStatusReply *) msg;
|
||
|
|
||
|
m_result = reply.result;
|
||
|
m_state = kTransStateComplete;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* ChangePlayerNameRequestTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
ChangePlayerNameRequestTrans::ChangePlayerNameRequestTrans (
|
||
|
unsigned playerId,
|
||
|
const wchar newName[],
|
||
|
FNetCliAuthChangePlayerNameRequestCallback callback,
|
||
|
void * param
|
||
|
) : NetAuthTrans(kChangePlayerNameRequestTrans)
|
||
|
, m_callback(callback)
|
||
|
, m_param(param)
|
||
|
, m_playerId(playerId)
|
||
|
{
|
||
|
StrCopy(m_newName, newName, arrsize(m_newName));
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool ChangePlayerNameRequestTrans::Send () {
|
||
|
if (!AcquireConn())
|
||
|
return false;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_ChangePlayerNameRequest,
|
||
|
m_transId,
|
||
|
m_playerId,
|
||
|
(unsigned_ptr) m_newName,
|
||
|
};
|
||
|
|
||
|
m_conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void ChangePlayerNameRequestTrans::Post () {
|
||
|
m_callback(
|
||
|
m_result,
|
||
|
m_param
|
||
|
);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool ChangePlayerNameRequestTrans::Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
) {
|
||
|
REF(bytes);
|
||
|
const Auth2Cli_ChangePlayerNameReply & reply = *(const Auth2Cli_ChangePlayerNameReply *) msg;
|
||
|
|
||
|
m_result = reply.result;
|
||
|
m_state = kTransStateComplete;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* SendFriendInviteTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
SendFriendInviteTrans::SendFriendInviteTrans (
|
||
|
const wchar emailAddr[],
|
||
|
const wchar toName[],
|
||
|
const Uuid & inviteUuid,
|
||
|
FNetCliAuthSendFriendInviteCallback callback,
|
||
|
void * param
|
||
|
) : NetAuthTrans(kSendFriendInviteTrans)
|
||
|
, m_callback(callback)
|
||
|
, m_param(param)
|
||
|
, m_inviteUuid(inviteUuid)
|
||
|
{
|
||
|
StrCopy(m_emailAddress, emailAddr, arrsize(m_emailAddress));
|
||
|
StrCopy(m_toName, toName, arrsize(m_toName));
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool SendFriendInviteTrans::Send () {
|
||
|
if (!AcquireConn())
|
||
|
return false;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_SendFriendInviteRequest,
|
||
|
m_transId,
|
||
|
(unsigned_ptr) &m_inviteUuid,
|
||
|
(unsigned_ptr) m_emailAddress,
|
||
|
(unsigned_ptr) m_toName,
|
||
|
};
|
||
|
|
||
|
m_conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void SendFriendInviteTrans::Post () {
|
||
|
m_callback(
|
||
|
m_result,
|
||
|
m_param
|
||
|
);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool SendFriendInviteTrans::Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
) {
|
||
|
REF(bytes);
|
||
|
const Auth2Cli_SendFriendInviteReply & reply = *(const Auth2Cli_SendFriendInviteReply *) msg;
|
||
|
|
||
|
m_result = reply.result;
|
||
|
m_state = kTransStateComplete;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* AuthConnectedNotifyTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
void AuthConnectedNotifyTrans::Post() {
|
||
|
if (s_connectedCb != nil)
|
||
|
s_connectedCb();
|
||
|
}
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* ScoreCreateTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
ScoreCreateTrans::ScoreCreateTrans (
|
||
|
unsigned ownerId,
|
||
|
const char* gameName,
|
||
|
unsigned gameType,
|
||
|
int value,
|
||
|
FNetCliAuthCreateScoreCallback callback,
|
||
|
void * param
|
||
|
) : NetAuthTrans(kScoreCreateTrans)
|
||
|
, m_callback(callback)
|
||
|
, m_param(param)
|
||
|
, m_ownerId(ownerId)
|
||
|
, m_gameType(gameType)
|
||
|
, m_value(value)
|
||
|
, m_scoreId(0)
|
||
|
, m_createdTime(0)
|
||
|
{
|
||
|
StrCopy(m_gameName, gameName, arrsize(m_gameName));
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool ScoreCreateTrans::Send () {
|
||
|
if (!AcquireConn())
|
||
|
return false;
|
||
|
|
||
|
wchar wgameName[kMaxGameScoreNameLength];
|
||
|
StrToUnicode(wgameName, m_gameName, arrsize(wgameName));
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_ScoreCreate,
|
||
|
m_transId,
|
||
|
m_ownerId,
|
||
|
(unsigned_ptr) wgameName,
|
||
|
m_gameType,
|
||
|
m_value
|
||
|
};
|
||
|
|
||
|
m_conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void ScoreCreateTrans::Post () {
|
||
|
if (m_callback) {
|
||
|
m_callback(
|
||
|
m_result,
|
||
|
m_param,
|
||
|
m_scoreId,
|
||
|
m_createdTime,
|
||
|
m_ownerId,
|
||
|
m_gameName,
|
||
|
m_gameType,
|
||
|
m_value
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool ScoreCreateTrans::Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
) {
|
||
|
REF(bytes);
|
||
|
const Auth2Cli_ScoreCreateReply & reply = *(const Auth2Cli_ScoreCreateReply *) msg;
|
||
|
|
||
|
m_scoreId = reply.scoreId;
|
||
|
m_createdTime = reply.createdTime;
|
||
|
|
||
|
m_result = reply.result;
|
||
|
m_state = kTransStateComplete;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* ScoreDeleteTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
ScoreDeleteTrans::ScoreDeleteTrans (
|
||
|
unsigned scoreId,
|
||
|
FNetCliAuthScoreUpdateCallback callback,
|
||
|
void * param
|
||
|
) : NetAuthTrans(kScoreDeleteTrans)
|
||
|
, m_callback(callback)
|
||
|
, m_param(param)
|
||
|
, m_scoreId(scoreId)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool ScoreDeleteTrans::Send () {
|
||
|
if (!AcquireConn())
|
||
|
return false;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_ScoreDelete,
|
||
|
m_transId,
|
||
|
m_scoreId,
|
||
|
};
|
||
|
|
||
|
m_conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void ScoreDeleteTrans::Post () {
|
||
|
if (m_callback) {
|
||
|
m_callback(
|
||
|
m_result,
|
||
|
m_param
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool ScoreDeleteTrans::Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
) {
|
||
|
REF(bytes);
|
||
|
const Auth2Cli_ScoreDeleteReply & reply = *(const Auth2Cli_ScoreDeleteReply *) msg;
|
||
|
|
||
|
m_result = reply.result;
|
||
|
m_state = kTransStateComplete;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* ScoreGetScoresTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
ScoreGetScoresTrans::ScoreGetScoresTrans (
|
||
|
unsigned ownerId,
|
||
|
const char* gameName,
|
||
|
FNetCliAuthGetScoresCallback callback,
|
||
|
void * param
|
||
|
) : NetAuthTrans(kScoreGetScoresTrans)
|
||
|
, m_callback(callback)
|
||
|
, m_param(param)
|
||
|
, m_ownerId(ownerId)
|
||
|
, m_scores(nil)
|
||
|
, m_scoreCount(0)
|
||
|
{
|
||
|
StrCopy(m_gameName, gameName, arrsize(m_gameName));
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool ScoreGetScoresTrans::Send () {
|
||
|
if (!AcquireConn())
|
||
|
return false;
|
||
|
|
||
|
wchar wgameName[kMaxGameScoreNameLength];
|
||
|
StrToUnicode(wgameName, m_gameName, arrsize(wgameName));
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_ScoreGetScores,
|
||
|
m_transId,
|
||
|
m_ownerId,
|
||
|
(unsigned_ptr) wgameName
|
||
|
};
|
||
|
|
||
|
m_conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void ScoreGetScoresTrans::Post () {
|
||
|
if (m_callback) {
|
||
|
m_callback(
|
||
|
m_result,
|
||
|
m_param,
|
||
|
m_scores,
|
||
|
m_scoreCount
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool ScoreGetScoresTrans::Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
) {
|
||
|
REF(bytes);
|
||
|
const Auth2Cli_ScoreGetScoresReply & reply = *(const Auth2Cli_ScoreGetScoresReply *) msg;
|
||
|
|
||
|
if (reply.scoreCount > 0) {
|
||
|
m_scoreCount = reply.scoreCount;
|
||
|
m_scores = TRACKED_NEW NetGameScore[m_scoreCount];
|
||
|
|
||
|
byte* bufferPos = const_cast<byte*>(reply.buffer);
|
||
|
unsigned bufferLength = reply.byteCount;
|
||
|
|
||
|
for (unsigned i = 0; i < m_scoreCount; ++i) {
|
||
|
bufferLength -= m_scores[i].Read(bufferPos, bufferLength, &bufferPos);
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
m_scoreCount = 0;
|
||
|
m_scores = nil;
|
||
|
}
|
||
|
|
||
|
m_result = reply.result;
|
||
|
m_state = kTransStateComplete;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* ScoreAddPointsTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
ScoreAddPointsTrans::ScoreAddPointsTrans (
|
||
|
unsigned scoreId,
|
||
|
int numPoints,
|
||
|
FNetCliAuthScoreUpdateCallback callback,
|
||
|
void * param
|
||
|
) : NetAuthTrans(kScoreAddPointsTrans)
|
||
|
, m_callback(callback)
|
||
|
, m_param(param)
|
||
|
, m_scoreId(scoreId)
|
||
|
, m_numPoints(numPoints)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool ScoreAddPointsTrans::Send () {
|
||
|
if (!AcquireConn())
|
||
|
return false;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_ScoreAddPoints,
|
||
|
m_transId,
|
||
|
m_scoreId,
|
||
|
m_numPoints,
|
||
|
};
|
||
|
|
||
|
m_conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void ScoreAddPointsTrans::Post () {
|
||
|
if (m_callback) {
|
||
|
m_callback(
|
||
|
m_result,
|
||
|
m_param
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool ScoreAddPointsTrans::Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
) {
|
||
|
REF(bytes);
|
||
|
const Auth2Cli_ScoreAddPointsReply & reply = *(const Auth2Cli_ScoreAddPointsReply *) msg;
|
||
|
|
||
|
m_result = reply.result;
|
||
|
m_state = kTransStateComplete;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* ScoreTransferPointsTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
ScoreTransferPointsTrans::ScoreTransferPointsTrans (
|
||
|
unsigned srcScoreId,
|
||
|
unsigned destScoreId,
|
||
|
int numPoints,
|
||
|
FNetCliAuthScoreUpdateCallback callback,
|
||
|
void * param
|
||
|
) : NetAuthTrans(kScoreTransferPointsTrans)
|
||
|
, m_callback(callback)
|
||
|
, m_param(param)
|
||
|
, m_srcScoreId(srcScoreId)
|
||
|
, m_destScoreId(destScoreId)
|
||
|
, m_numPoints(numPoints)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool ScoreTransferPointsTrans::Send () {
|
||
|
if (!AcquireConn())
|
||
|
return false;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_ScoreTransferPoints,
|
||
|
m_transId,
|
||
|
m_srcScoreId,
|
||
|
m_destScoreId,
|
||
|
m_numPoints,
|
||
|
};
|
||
|
|
||
|
m_conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void ScoreTransferPointsTrans::Post () {
|
||
|
if (m_callback) {
|
||
|
m_callback(
|
||
|
m_result,
|
||
|
m_param
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool ScoreTransferPointsTrans::Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
) {
|
||
|
REF(bytes);
|
||
|
const Auth2Cli_ScoreTransferPointsReply & reply = *(const Auth2Cli_ScoreTransferPointsReply *) msg;
|
||
|
|
||
|
m_result = reply.result;
|
||
|
m_state = kTransStateComplete;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* ScoreSetPointsTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
ScoreSetPointsTrans::ScoreSetPointsTrans (
|
||
|
unsigned scoreId,
|
||
|
int numPoints,
|
||
|
FNetCliAuthScoreUpdateCallback callback,
|
||
|
void * param
|
||
|
) : NetAuthTrans(kScoreSetPointsTrans)
|
||
|
, m_callback(callback)
|
||
|
, m_param(param)
|
||
|
, m_scoreId(scoreId)
|
||
|
, m_numPoints(numPoints)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool ScoreSetPointsTrans::Send () {
|
||
|
if (!AcquireConn())
|
||
|
return false;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_ScoreSetPoints,
|
||
|
m_transId,
|
||
|
m_scoreId,
|
||
|
m_numPoints,
|
||
|
};
|
||
|
|
||
|
m_conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void ScoreSetPointsTrans::Post () {
|
||
|
if (m_callback) {
|
||
|
m_callback(
|
||
|
m_result,
|
||
|
m_param
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool ScoreSetPointsTrans::Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
) {
|
||
|
REF(bytes);
|
||
|
const Auth2Cli_ScoreSetPointsReply & reply = *(const Auth2Cli_ScoreSetPointsReply *) msg;
|
||
|
|
||
|
m_result = reply.result;
|
||
|
m_state = kTransStateComplete;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* ScoreGetRanksTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
ScoreGetRanksTrans::ScoreGetRanksTrans (
|
||
|
unsigned ownerId,
|
||
|
unsigned scoreGroup,
|
||
|
unsigned parentFolderId,
|
||
|
const char * cGameName,
|
||
|
unsigned timePeriod,
|
||
|
unsigned numResults,
|
||
|
unsigned pageNumber,
|
||
|
bool sortDesc,
|
||
|
FNetCliAuthGetRanksCallback callback,
|
||
|
void * param
|
||
|
) : NetAuthTrans(kScoreGetRanksTrans)
|
||
|
, m_callback(callback)
|
||
|
, m_param(param)
|
||
|
, m_ownerId(ownerId)
|
||
|
, m_scoreGroup(scoreGroup)
|
||
|
, m_parentFolderId(parentFolderId)
|
||
|
, m_timePeriod(timePeriod)
|
||
|
, m_numResults(numResults)
|
||
|
, m_pageNumber(pageNumber)
|
||
|
, m_sortDesc(sortDesc)
|
||
|
{
|
||
|
StrToUnicode(m_gameName, cGameName, arrsize(m_gameName));
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool ScoreGetRanksTrans::Send () {
|
||
|
if (!AcquireConn())
|
||
|
return false;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_ScoreGetRanks,
|
||
|
m_transId,
|
||
|
m_ownerId,
|
||
|
m_scoreGroup,
|
||
|
m_parentFolderId,
|
||
|
(unsigned_ptr) m_gameName,
|
||
|
m_timePeriod,
|
||
|
m_numResults,
|
||
|
m_pageNumber,
|
||
|
m_sortDesc,
|
||
|
};
|
||
|
|
||
|
m_conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void ScoreGetRanksTrans::Post () {
|
||
|
if (m_callback) {
|
||
|
m_callback(
|
||
|
m_result,
|
||
|
m_param,
|
||
|
m_ranks,
|
||
|
m_rankCount
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool ScoreGetRanksTrans::Recv (
|
||
|
const byte msg[],
|
||
|
unsigned bytes
|
||
|
) {
|
||
|
REF(bytes);
|
||
|
const Auth2Cli_ScoreGetRanksReply & reply = *(const Auth2Cli_ScoreGetRanksReply *) msg;
|
||
|
|
||
|
if (reply.rankCount > 0) {
|
||
|
m_rankCount = reply.rankCount;
|
||
|
m_ranks = TRACKED_NEW NetGameRank[m_rankCount];
|
||
|
|
||
|
byte* bufferPos = const_cast<byte*>(reply.buffer);
|
||
|
unsigned bufferLength = reply.byteCount;
|
||
|
|
||
|
for (unsigned i = 0; i < m_rankCount; ++i) {
|
||
|
bufferLength -= m_ranks[i].Read(bufferPos, bufferLength, &bufferPos);
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
m_rankCount = 0;
|
||
|
m_ranks = nil;
|
||
|
}
|
||
|
|
||
|
m_result = reply.result;
|
||
|
m_state = kTransStateComplete;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
} using namespace Auth;
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* NetAuthTrans
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
NetAuthTrans::NetAuthTrans (ETransType transType)
|
||
|
: NetTrans(kNetProtocolCli2Auth, transType)
|
||
|
, m_conn(nil)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
NetAuthTrans::~NetAuthTrans () {
|
||
|
ReleaseConn();
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool NetAuthTrans::AcquireConn () {
|
||
|
if (!m_conn)
|
||
|
m_conn = GetConnIncRef("AcquireConn");
|
||
|
return m_conn != nil;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetAuthTrans::ReleaseConn () {
|
||
|
if (m_conn) {
|
||
|
m_conn->DecRef("AcquireConn");
|
||
|
m_conn = nil;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* Protected functions
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
void AuthInitialize () {
|
||
|
s_running = true;
|
||
|
NetMsgProtocolRegister(
|
||
|
kNetProtocolCli2Auth,
|
||
|
false,
|
||
|
s_send, arrsize(s_send),
|
||
|
s_recv, arrsize(s_recv),
|
||
|
kDhGValue,
|
||
|
BigNum(sizeof(kDhXData), kDhXData),
|
||
|
BigNum(sizeof(kDhNData), kDhNData)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void AuthDestroy (bool wait) {
|
||
|
s_running = false;
|
||
|
|
||
|
s_bufRcvdCb = nil;
|
||
|
s_connectedCb = nil;
|
||
|
s_vaultNodeChangedHandler = nil;
|
||
|
s_vaultNodeAddedHandler = nil;
|
||
|
s_vaultNodeRemovedHandler = nil;
|
||
|
s_vaultNodeDeletedHandler = nil;
|
||
|
s_notifyNewBuildHandler = nil;
|
||
|
|
||
|
|
||
|
NetTransCancelByProtocol(
|
||
|
kNetProtocolCli2Auth,
|
||
|
kNetErrRemoteShutdown
|
||
|
);
|
||
|
NetMsgProtocolDestroy(
|
||
|
kNetProtocolCli2Auth,
|
||
|
false
|
||
|
);
|
||
|
|
||
|
s_critsect.Enter();
|
||
|
{
|
||
|
while (CliAuConn * conn = s_conns.Head())
|
||
|
UnlinkAndAbandonConn_CS(conn);
|
||
|
s_active = nil;
|
||
|
}
|
||
|
s_critsect.Leave();
|
||
|
|
||
|
if (!wait)
|
||
|
return;
|
||
|
|
||
|
while (s_perf[kPerfConnCount]) {
|
||
|
NetTransUpdate();
|
||
|
AsyncSleep(10);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool AuthQueryConnected () {
|
||
|
bool result;
|
||
|
s_critsect.Enter();
|
||
|
{
|
||
|
if (nil != (result = s_active))
|
||
|
result &= (nil != s_active->cli);
|
||
|
}
|
||
|
s_critsect.Leave();
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
unsigned AuthGetConnId () {
|
||
|
unsigned connId;
|
||
|
s_critsect.Enter();
|
||
|
connId = (s_active) ? s_active->seq : 0;
|
||
|
s_critsect.Leave();
|
||
|
return connId;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void AuthPingEnable (bool enable) {
|
||
|
s_perf[kPingDisabled] = !enable;
|
||
|
s_critsect.Enter();
|
||
|
for (;;) {
|
||
|
if (!s_active)
|
||
|
break;
|
||
|
if (enable)
|
||
|
s_active->AutoPing();
|
||
|
else
|
||
|
s_active->StopAutoPing();
|
||
|
break;
|
||
|
}
|
||
|
s_critsect.Leave();
|
||
|
}
|
||
|
|
||
|
|
||
|
} using namespace Ngl;
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* Exported functions
|
||
|
*
|
||
|
***/
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthStartConnect (
|
||
|
const wchar * authAddrList[],
|
||
|
unsigned authAddrCount
|
||
|
) {
|
||
|
// TEMP: Only connect to one auth server until we fill out this module
|
||
|
// to choose the "best" auth connection.
|
||
|
authAddrCount = min(authAddrCount, 1);
|
||
|
|
||
|
for (unsigned i = 0; i < authAddrCount; ++i) {
|
||
|
// Do we need to lookup the address?
|
||
|
const wchar * name = authAddrList[i];
|
||
|
while (unsigned ch = *name) {
|
||
|
++name;
|
||
|
if (!(isdigit(ch) || ch == L'.' || ch == L':')) {
|
||
|
AsyncCancelId cancelId;
|
||
|
AsyncAddressLookupName(
|
||
|
&cancelId,
|
||
|
AsyncLookupCallback,
|
||
|
authAddrList[i],
|
||
|
kNetDefaultClientPort,
|
||
|
nil
|
||
|
);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
if (!name[0]) {
|
||
|
NetAddress addr;
|
||
|
NetAddressFromString(&addr, authAddrList[i], kNetDefaultClientPort);
|
||
|
Connect(authAddrList[i], addr);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
unsigned NetCliAuthGetCurrentConnPort() {
|
||
|
unsigned port;
|
||
|
s_critsect.Enter();
|
||
|
port = NetAddressGetPort(s_active->addr);
|
||
|
s_critsect.Leave();
|
||
|
return port;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
bool NetCliAuthQueryConnected () {
|
||
|
|
||
|
return AuthQueryConnected();
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthAutoReconnectEnable (bool enable) {
|
||
|
|
||
|
s_perf[kAutoReconnectDisabled] = !enable;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthDisconnect () {
|
||
|
|
||
|
s_critsect.Enter();
|
||
|
{
|
||
|
while (CliAuConn * conn = s_conns.Head())
|
||
|
UnlinkAndAbandonConn_CS(conn);
|
||
|
s_active = nil;
|
||
|
}
|
||
|
s_critsect.Leave();
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthUnexpectedDisconnect () {
|
||
|
s_critsect.Enter();
|
||
|
{
|
||
|
if (s_active && s_active->sock)
|
||
|
AsyncSocketDisconnect(s_active->sock, true);
|
||
|
}
|
||
|
s_critsect.Leave();
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthSetConnectCallback (
|
||
|
FNetCliAuthConnectCallback callback
|
||
|
) {
|
||
|
s_connectedCb = callback;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthPingRequest (
|
||
|
unsigned pingTimeMs,
|
||
|
unsigned payloadBytes,
|
||
|
const void * payload,
|
||
|
FNetCliAuthPingRequestCallback callback,
|
||
|
void * param
|
||
|
) {
|
||
|
PingRequestTrans * trans = NEW(PingRequestTrans)(
|
||
|
callback,
|
||
|
param,
|
||
|
pingTimeMs,
|
||
|
payloadBytes,
|
||
|
payload
|
||
|
);
|
||
|
NetTransSend(trans);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthAccountExistsRequest (
|
||
|
const wchar accountName[],
|
||
|
FNetCliAuthAccountExistsRequestCallback callback,
|
||
|
void * param
|
||
|
) {
|
||
|
AccountExistsRequestTrans * trans = NEW(AccountExistsRequestTrans)(
|
||
|
callback,
|
||
|
param,
|
||
|
accountName
|
||
|
);
|
||
|
NetTransSend(trans);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthLoginRequest (
|
||
|
const wchar accountName[],
|
||
|
const ShaDigest * accountNamePassHash,
|
||
|
const wchar authToken[],
|
||
|
const wchar os[],
|
||
|
FNetCliAuthLoginRequestCallback callback,
|
||
|
void * param
|
||
|
) {
|
||
|
// Cache updated login info if provided.
|
||
|
if (accountName)
|
||
|
StrCopy(s_accountName, accountName, arrsize(s_accountName));
|
||
|
if (accountNamePassHash)
|
||
|
s_accountNamePassHash = *accountNamePassHash;
|
||
|
if (authToken)
|
||
|
StrCopy(s_authToken, authToken, arrsize(s_authToken));
|
||
|
if (os)
|
||
|
StrCopy(s_os, os, arrsize(s_os));
|
||
|
|
||
|
LoginRequestTrans * trans = NEW(LoginRequestTrans)(callback, param);
|
||
|
NetTransSend(trans);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthAgeRequest (
|
||
|
const wchar ageName[],
|
||
|
const Uuid & ageInstId,
|
||
|
FNetCliAuthAgeRequestCallback callback,
|
||
|
void * param
|
||
|
) {
|
||
|
AgeRequestTrans * trans = NEW(AgeRequestTrans)(
|
||
|
ageName,
|
||
|
ageInstId,
|
||
|
callback,
|
||
|
param
|
||
|
);
|
||
|
NetTransSend(trans);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthGetEncryptionKey (
|
||
|
UInt32 key[],
|
||
|
unsigned size
|
||
|
) {
|
||
|
unsigned memSize = min(arrsize(s_encryptionKey), size);
|
||
|
memSize *= sizeof(UInt32);
|
||
|
MemCopy(key, s_encryptionKey, memSize);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthAccountCreateRequest (
|
||
|
const wchar accountName[],
|
||
|
const wchar password[],
|
||
|
unsigned accountFlags,
|
||
|
unsigned billingType,
|
||
|
FNetCliAuthAccountCreateRequestCallback callback,
|
||
|
void * param
|
||
|
) {
|
||
|
AccountCreateRequestTrans * trans = NEW(AccountCreateRequestTrans)(
|
||
|
accountName,
|
||
|
password,
|
||
|
accountFlags,
|
||
|
billingType,
|
||
|
callback,
|
||
|
param
|
||
|
);
|
||
|
NetTransSend(trans);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthAccountCreateFromKeyRequest (
|
||
|
const wchar accountName[],
|
||
|
const wchar password[],
|
||
|
Uuid key,
|
||
|
unsigned billingType,
|
||
|
FNetCliAuthAccountCreateFromKeyRequestCallback callback,
|
||
|
void * param
|
||
|
) {
|
||
|
AccountCreateFromKeyRequestTrans * trans = NEW(AccountCreateFromKeyRequestTrans)(
|
||
|
accountName,
|
||
|
password,
|
||
|
key,
|
||
|
billingType,
|
||
|
callback,
|
||
|
param
|
||
|
);
|
||
|
NetTransSend(trans);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthPlayerCreateRequest (
|
||
|
const wchar playerName[],
|
||
|
const wchar avatarShape[],
|
||
|
const wchar friendInvite[],
|
||
|
FNetCliAuthPlayerCreateRequestCallback callback,
|
||
|
void * param
|
||
|
) {
|
||
|
wchar name[kMaxPlayerNameLength];
|
||
|
StrCopy(name, playerName, arrsize(name));
|
||
|
ENetError error = FixupPlayerName(name);
|
||
|
if (IS_NET_ERROR(error)) {
|
||
|
NetCliAuthPlayerInfo playerInfo;
|
||
|
callback(error, param, playerInfo);
|
||
|
}
|
||
|
else {
|
||
|
PlayerCreateRequestTrans * trans = NEW(PlayerCreateRequestTrans)(
|
||
|
name,
|
||
|
avatarShape,
|
||
|
friendInvite,
|
||
|
callback,
|
||
|
param
|
||
|
);
|
||
|
NetTransSend(trans);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthPlayerDeleteRequest (
|
||
|
unsigned playerId,
|
||
|
FNetCliAuthPlayerDeleteRequestCallback callback,
|
||
|
void * param
|
||
|
) {
|
||
|
PlayerDeleteRequestTrans * trans = NEW(PlayerDeleteRequestTrans)(
|
||
|
playerId,
|
||
|
callback,
|
||
|
param
|
||
|
);
|
||
|
NetTransSend(trans);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthUpgradeVisitorRequest (
|
||
|
unsigned playerId,
|
||
|
FNetCliAuthUpgradeVisitorRequestCallback callback,
|
||
|
void * param
|
||
|
) {
|
||
|
UpgradeVisitorRequestTrans * trans = NEW(UpgradeVisitorRequestTrans)(
|
||
|
playerId,
|
||
|
callback,
|
||
|
param
|
||
|
);
|
||
|
NetTransSend(trans);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthSetCCRLevel (
|
||
|
unsigned ccrLevel
|
||
|
) {
|
||
|
CliAuConn * conn = GetConnIncRef("SetCCRLevel");
|
||
|
if (!conn)
|
||
|
return;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_ClientSetCCRLevel,
|
||
|
ccrLevel,
|
||
|
};
|
||
|
|
||
|
conn->Send(msg, arrsize(msg));
|
||
|
conn->DecRef("SetCCRLevel");
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthSetPlayerRequest (
|
||
|
unsigned playerInt,
|
||
|
FNetCliAuthSetPlayerRequestCallback callback,
|
||
|
void * param
|
||
|
) {
|
||
|
SetPlayerRequestTrans * trans = NEW(SetPlayerRequestTrans)(
|
||
|
playerInt,
|
||
|
callback,
|
||
|
param
|
||
|
);
|
||
|
NetTransSend(trans);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthSetAgePublic (
|
||
|
unsigned ageInfoId,
|
||
|
bool publicOrNot
|
||
|
) {
|
||
|
CliAuConn * conn = GetConnIncRef("SetAgePublic");
|
||
|
if (!conn)
|
||
|
return;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_SetAgePublic,
|
||
|
ageInfoId,
|
||
|
publicOrNot,
|
||
|
};
|
||
|
|
||
|
conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
conn->DecRef("SetAgePublic");
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthGetPublicAgeList (
|
||
|
const wchar ageName[],
|
||
|
FNetCliAuthGetPublicAgeListCallback callback,
|
||
|
void * param
|
||
|
) {
|
||
|
GetPublicAgeListTrans * trans = NEW(GetPublicAgeListTrans)(
|
||
|
ageName,
|
||
|
callback,
|
||
|
param
|
||
|
);
|
||
|
NetTransSend(trans);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthAccountChangePasswordRequest (
|
||
|
const wchar accountName[],
|
||
|
const wchar password[],
|
||
|
FNetCliAuthAccountChangePasswordRequestCallback callback,
|
||
|
void * param
|
||
|
) {
|
||
|
AccountChangePasswordRequestTrans * trans = NEW(AccountChangePasswordRequestTrans)(
|
||
|
accountName,
|
||
|
password,
|
||
|
callback,
|
||
|
param
|
||
|
);
|
||
|
NetTransSend(trans);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthAccountSetRolesRequest (
|
||
|
const wchar accountName[],
|
||
|
unsigned accountFlags,
|
||
|
FNetCliAuthAccountSetRolesRequestCallback callback,
|
||
|
void * param
|
||
|
) {
|
||
|
AccountSetRolesRequestTrans * trans = NEW(AccountSetRolesRequestTrans)(
|
||
|
accountName,
|
||
|
accountFlags,
|
||
|
callback,
|
||
|
param
|
||
|
);
|
||
|
NetTransSend(trans);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthAccountSetBillingTypeRequest (
|
||
|
const wchar accountName[],
|
||
|
unsigned billingType,
|
||
|
FNetCliAuthAccountSetBillingTypeRequestCallback callback,
|
||
|
void * param
|
||
|
) {
|
||
|
AccountSetBillingTypeRequestTrans * trans = NEW(AccountSetBillingTypeRequestTrans)(
|
||
|
accountName,
|
||
|
billingType,
|
||
|
callback,
|
||
|
param
|
||
|
);
|
||
|
NetTransSend(trans);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthAccountActivateRequest (
|
||
|
const Uuid & activationKey,
|
||
|
FNetCliAuthAccountActivateRequestCallback callback,
|
||
|
void * param
|
||
|
) {
|
||
|
AccountActivateRequestTrans * trans = NEW(AccountActivateRequestTrans)(
|
||
|
activationKey,
|
||
|
callback,
|
||
|
param
|
||
|
);
|
||
|
NetTransSend(trans);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthFileListRequest (
|
||
|
const wchar dir[],
|
||
|
const wchar ext[],
|
||
|
FNetCliAuthFileListRequestCallback callback,
|
||
|
void * param
|
||
|
) {
|
||
|
FileListRequestTrans * trans = NEW(FileListRequestTrans)(
|
||
|
callback,
|
||
|
param,
|
||
|
dir,
|
||
|
ext
|
||
|
);
|
||
|
NetTransSend(trans);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthFileRequest (
|
||
|
const wchar filename[],
|
||
|
hsStream * writer,
|
||
|
FNetCliAuthFileRequestCallback callback,
|
||
|
void * param
|
||
|
) {
|
||
|
FileDownloadRequestTrans * trans = NEW(FileDownloadRequestTrans)(
|
||
|
callback,
|
||
|
param,
|
||
|
filename,
|
||
|
writer
|
||
|
);
|
||
|
NetTransSend(trans);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthVaultSetRecvNodeChangedHandler (
|
||
|
FNetCliAuthVaultNodeChanged handler
|
||
|
) {
|
||
|
s_vaultNodeChangedHandler = handler;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthVaultSetRecvNodeAddedHandler (
|
||
|
FNetCliAuthVaultNodeAdded handler
|
||
|
) {
|
||
|
s_vaultNodeAddedHandler = handler;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthVaultSetRecvNodeRemovedHandler (
|
||
|
FNetCliAuthVaultNodeRemoved handler
|
||
|
) {
|
||
|
s_vaultNodeRemovedHandler = handler;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthVaultSetRecvNodeDeletedHandler (
|
||
|
FNetCliAuthVaultNodeDeleted handler
|
||
|
) {
|
||
|
s_vaultNodeDeletedHandler = handler;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthVaultNodeCreate (
|
||
|
NetVaultNode * templateNode,
|
||
|
FNetCliAuthVaultNodeCreated callback,
|
||
|
void * param
|
||
|
) {
|
||
|
VaultCreateNodeTrans * trans = NEWZERO(VaultCreateNodeTrans)(
|
||
|
templateNode,
|
||
|
callback,
|
||
|
param
|
||
|
);
|
||
|
NetTransSend(trans);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthVaultNodeFetch (
|
||
|
unsigned nodeId,
|
||
|
FNetCliAuthVaultNodeFetched callback,
|
||
|
void * param
|
||
|
) {
|
||
|
VaultFetchNodeTrans * trans = NEWZERO(VaultFetchNodeTrans)(
|
||
|
nodeId,
|
||
|
callback,
|
||
|
param
|
||
|
);
|
||
|
NetTransSend(trans);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthVaultNodeFind (
|
||
|
NetVaultNode * templateNode,
|
||
|
FNetCliAuthVaultNodeFind callback,
|
||
|
void * param
|
||
|
) {
|
||
|
VaultFindNodeTrans * trans = NEWZERO(VaultFindNodeTrans)(
|
||
|
templateNode,
|
||
|
callback,
|
||
|
param
|
||
|
);
|
||
|
NetTransSend(trans);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
unsigned NetCliAuthVaultNodeSave (
|
||
|
NetVaultNode * node,
|
||
|
FNetCliAuthVaultNodeSaveCallback callback,
|
||
|
void * param
|
||
|
) {
|
||
|
ASSERTMSG(!(node->dirtyFlags & NetVaultNode::kNodeType), "Node type may not be changed");
|
||
|
|
||
|
// Clear dirty bits of read-only fields before we write the node to the msg buffer
|
||
|
node->dirtyFlags &= ~(
|
||
|
NetVaultNode::kNodeId |
|
||
|
NetVaultNode::kNodeType |
|
||
|
NetVaultNode::kCreatorAcct |
|
||
|
NetVaultNode::kCreatorId |
|
||
|
NetVaultNode::kCreateTime
|
||
|
);
|
||
|
|
||
|
if (!node->dirtyFlags)
|
||
|
return 0;
|
||
|
|
||
|
if (!node->nodeId)
|
||
|
return 0;
|
||
|
|
||
|
// force sending of the nodeType value, since the auth needs it.
|
||
|
// auth will clear the field before sending it on to the vault.
|
||
|
node->dirtyFlags |= NetVaultNode::kNodeType;
|
||
|
|
||
|
// We're definitely saving this node, so assign a revisionId
|
||
|
node->revisionId = GuidGenerate();
|
||
|
|
||
|
ARRAY(byte) buffer;
|
||
|
unsigned bytes = node->Write_LCS(&buffer, NetVaultNode::kRwDirtyOnly | NetVaultNode::kRwUpdateDirty);
|
||
|
|
||
|
VaultSaveNodeTrans * trans = NEWZERO(VaultSaveNodeTrans)(
|
||
|
node->nodeId,
|
||
|
node->revisionId,
|
||
|
buffer.Count(),
|
||
|
buffer.Ptr(),
|
||
|
callback,
|
||
|
param
|
||
|
);
|
||
|
NetTransSend(trans);
|
||
|
return bytes;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthVaultNodeDelete (
|
||
|
unsigned nodeId
|
||
|
) {
|
||
|
REF(nodeId);
|
||
|
hsAssert(false, "eric, implement me");
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthVaultNodeAdd (
|
||
|
unsigned parentId,
|
||
|
unsigned childId,
|
||
|
unsigned ownerId,
|
||
|
FNetCliAuthVaultNodeAddCallback callback,
|
||
|
void * param
|
||
|
) {
|
||
|
VaultAddNodeTrans * trans = NEWZERO(VaultAddNodeTrans)(
|
||
|
parentId,
|
||
|
childId,
|
||
|
ownerId,
|
||
|
callback,
|
||
|
param
|
||
|
);
|
||
|
NetTransSend(trans);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthVaultNodeRemove (
|
||
|
unsigned parentId,
|
||
|
unsigned childId,
|
||
|
FNetCliAuthVaultNodeRemoveCallback callback,
|
||
|
void * param
|
||
|
) {
|
||
|
VaultRemoveNodeTrans * trans = NEWZERO(VaultRemoveNodeTrans)(
|
||
|
parentId,
|
||
|
childId,
|
||
|
callback,
|
||
|
param
|
||
|
);
|
||
|
NetTransSend(trans);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthVaultFetchNodeRefs (
|
||
|
unsigned nodeId,
|
||
|
FNetCliAuthVaultNodeRefsFetched callback,
|
||
|
void * param
|
||
|
) {
|
||
|
VaultFetchNodeRefsTrans * trans = NEWZERO(VaultFetchNodeRefsTrans)(
|
||
|
nodeId,
|
||
|
callback,
|
||
|
param
|
||
|
);
|
||
|
NetTransSend(trans);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthVaultSetSeen (
|
||
|
unsigned parentId,
|
||
|
unsigned childId,
|
||
|
bool seen
|
||
|
) {
|
||
|
CliAuConn * conn = GetConnIncRef("SetSeen");
|
||
|
if (!conn)
|
||
|
return;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_VaultSetSeen,
|
||
|
parentId,
|
||
|
childId,
|
||
|
seen,
|
||
|
};
|
||
|
|
||
|
conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
conn->DecRef("SetSeen");
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthVaultSendNode (
|
||
|
unsigned srcNodeId,
|
||
|
unsigned dstPlayerId
|
||
|
) {
|
||
|
CliAuConn * conn = GetConnIncRef("SendNode");
|
||
|
if (!conn)
|
||
|
return;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_VaultSendNode,
|
||
|
srcNodeId,
|
||
|
dstPlayerId,
|
||
|
};
|
||
|
|
||
|
conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
conn->DecRef("SendNode");
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthVaultInitAge (
|
||
|
const Uuid & ageInstId, // optional. is used in match
|
||
|
const Uuid & parentAgeInstId, // optional. is used in match
|
||
|
const wchar ageFilename[], // optional. is used in match
|
||
|
const wchar ageInstName[], // optional. not used in match
|
||
|
const wchar ageUserName[], // optional. not used in match
|
||
|
const wchar ageDesc[], // optional. not used in match
|
||
|
unsigned ageSequenceNumber, // optional. not used in match
|
||
|
unsigned ageLanguage, // optional. not used in match
|
||
|
FNetCliAuthAgeInitCallback callback, // optional
|
||
|
void * param // optional
|
||
|
) {
|
||
|
VaultInitAgeTrans * trans = NEWZERO(VaultInitAgeTrans)(
|
||
|
callback,
|
||
|
param,
|
||
|
ageInstId,
|
||
|
parentAgeInstId,
|
||
|
ageFilename,
|
||
|
ageInstName,
|
||
|
ageUserName,
|
||
|
ageDesc,
|
||
|
ageSequenceNumber,
|
||
|
ageLanguage
|
||
|
);
|
||
|
NetTransSend(trans);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthSetRecvBufferHandler (
|
||
|
FNetCliAuthRecvBufferHandler handler
|
||
|
) {
|
||
|
s_bufRcvdCb = handler;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthSendCCRPetition (
|
||
|
const wchar * petitionText
|
||
|
) {
|
||
|
REF(petitionText);
|
||
|
hsAssert(false, "eric, implement me.");
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthPropagateBuffer (
|
||
|
unsigned type,
|
||
|
unsigned bytes,
|
||
|
const byte buffer[]
|
||
|
) {
|
||
|
CliAuConn * conn = GetConnIncRef("PropBuffer");
|
||
|
if (!conn)
|
||
|
return;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_PropagateBuffer,
|
||
|
type,
|
||
|
bytes,
|
||
|
(unsigned_ptr) buffer,
|
||
|
};
|
||
|
|
||
|
conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
conn->DecRef("PropBuffer");
|
||
|
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthLogPythonTraceback (const wchar traceback[]) {
|
||
|
CliAuConn * conn = GetConnIncRef("LogTraceback");
|
||
|
if (!conn)
|
||
|
return;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_LogPythonTraceback,
|
||
|
(unsigned_ptr) traceback
|
||
|
};
|
||
|
|
||
|
conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
conn->DecRef("LogTraceback");
|
||
|
}
|
||
|
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthLogStackDump (const wchar stackdump[]) {
|
||
|
CliAuConn * conn = GetConnIncRef("LogStackDump");
|
||
|
if (!conn)
|
||
|
return;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_LogStackDump,
|
||
|
(unsigned_ptr) stackdump
|
||
|
};
|
||
|
|
||
|
conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
conn->DecRef("LogStackDump");
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthLogClientDebuggerConnect () {
|
||
|
CliAuConn * conn = GetConnIncRef("");
|
||
|
if (!conn)
|
||
|
return;
|
||
|
|
||
|
unsigned nothing = 0;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_LogClientDebuggerConnect,
|
||
|
nothing
|
||
|
};
|
||
|
|
||
|
conn->Send(msg, arrsize(msg));
|
||
|
|
||
|
conn->DecRef();
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthSetNotifyNewBuildHandler (FNotifyNewBuildHandler handler) {
|
||
|
|
||
|
s_notifyNewBuildHandler = handler;
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthSetPlayerBanStatusRequest (
|
||
|
unsigned playerId,
|
||
|
unsigned banned,
|
||
|
FNetCliAuthSetPlayerBanStatusRequestCallback callback,
|
||
|
void * param
|
||
|
) {
|
||
|
SetPlayerBanStatusRequestTrans * trans = NEW(SetPlayerBanStatusRequestTrans)(
|
||
|
playerId,
|
||
|
banned,
|
||
|
callback,
|
||
|
param
|
||
|
);
|
||
|
NetTransSend(trans);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthKickPlayer (
|
||
|
unsigned playerId
|
||
|
) {
|
||
|
CliAuConn * conn = GetConnIncRef("KickPlayer");
|
||
|
if (!conn)
|
||
|
return;
|
||
|
|
||
|
const unsigned_ptr msg[] = {
|
||
|
kCli2Auth_KickPlayer,
|
||
|
playerId
|
||
|
};
|
||
|
|
||
|
conn->Send(msg, arrsize(msg));
|
||
|
conn->DecRef("KickPlayer");
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthChangePlayerNameRequest (
|
||
|
unsigned playerId,
|
||
|
const wchar newName[],
|
||
|
FNetCliAuthChangePlayerNameRequestCallback callback,
|
||
|
void * param
|
||
|
) {
|
||
|
ChangePlayerNameRequestTrans * trans = NEW(ChangePlayerNameRequestTrans)(
|
||
|
playerId,
|
||
|
newName,
|
||
|
callback,
|
||
|
param
|
||
|
);
|
||
|
NetTransSend(trans);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthSendFriendInvite (
|
||
|
const wchar emailAddress[],
|
||
|
const wchar toName[],
|
||
|
const Uuid& inviteUuid,
|
||
|
FNetCliAuthSendFriendInviteCallback callback,
|
||
|
void * param
|
||
|
) {
|
||
|
SendFriendInviteTrans * trans = NEW(SendFriendInviteTrans)(
|
||
|
emailAddress,
|
||
|
toName,
|
||
|
inviteUuid,
|
||
|
callback,
|
||
|
param
|
||
|
);
|
||
|
NetTransSend(trans);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthScoreCreate (
|
||
|
unsigned ownerId,
|
||
|
const char* gameName,
|
||
|
unsigned gameType,
|
||
|
int value,
|
||
|
FNetCliAuthCreateScoreCallback callback,
|
||
|
void * param
|
||
|
) {
|
||
|
ScoreCreateTrans * trans = NEW(ScoreCreateTrans)(
|
||
|
ownerId,
|
||
|
gameName,
|
||
|
gameType,
|
||
|
value,
|
||
|
callback,
|
||
|
param
|
||
|
);
|
||
|
NetTransSend(trans);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthScoreDelete(
|
||
|
unsigned scoreId,
|
||
|
FNetCliAuthScoreUpdateCallback callback,
|
||
|
void * param
|
||
|
) {
|
||
|
ScoreDeleteTrans * trans = NEW(ScoreDeleteTrans)(
|
||
|
scoreId,
|
||
|
callback,
|
||
|
param
|
||
|
);
|
||
|
NetTransSend(trans);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthScoreGetScores(
|
||
|
unsigned ownerId,
|
||
|
const char* gameName,
|
||
|
FNetCliAuthGetScoresCallback callback,
|
||
|
void * param
|
||
|
) {
|
||
|
ScoreGetScoresTrans * trans = NEW(ScoreGetScoresTrans)(
|
||
|
ownerId,
|
||
|
gameName,
|
||
|
callback,
|
||
|
param
|
||
|
);
|
||
|
NetTransSend(trans);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthScoreAddPoints(
|
||
|
unsigned scoreId,
|
||
|
int numPoints,
|
||
|
FNetCliAuthScoreUpdateCallback callback,
|
||
|
void * param
|
||
|
) {
|
||
|
ScoreAddPointsTrans * trans = NEW(ScoreAddPointsTrans)(
|
||
|
scoreId,
|
||
|
numPoints,
|
||
|
callback,
|
||
|
param
|
||
|
);
|
||
|
NetTransSend(trans);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthScoreTransferPoints(
|
||
|
unsigned srcScoreId,
|
||
|
unsigned destScoreId,
|
||
|
int numPoints,
|
||
|
FNetCliAuthScoreUpdateCallback callback,
|
||
|
void * param
|
||
|
) {
|
||
|
ScoreTransferPointsTrans * trans = NEW(ScoreTransferPointsTrans)(
|
||
|
srcScoreId,
|
||
|
destScoreId,
|
||
|
numPoints,
|
||
|
callback,
|
||
|
param
|
||
|
);
|
||
|
NetTransSend(trans);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthScoreSetPoints(
|
||
|
unsigned scoreId,
|
||
|
int numPoints,
|
||
|
FNetCliAuthScoreUpdateCallback callback,
|
||
|
void * param
|
||
|
) {
|
||
|
ScoreSetPointsTrans * trans = NEW(ScoreSetPointsTrans)(
|
||
|
scoreId,
|
||
|
numPoints,
|
||
|
callback,
|
||
|
param
|
||
|
);
|
||
|
NetTransSend(trans);
|
||
|
}
|
||
|
|
||
|
//============================================================================
|
||
|
void NetCliAuthScoreGetRankList(
|
||
|
unsigned ownerId,
|
||
|
unsigned scoreGroup,
|
||
|
unsigned parentFolderId,
|
||
|
const char * gameName,
|
||
|
unsigned timePeriod,
|
||
|
unsigned numResults,
|
||
|
unsigned pageNumber,
|
||
|
bool sortDesc,
|
||
|
FNetCliAuthGetRanksCallback callback,
|
||
|
void * param
|
||
|
) {
|
||
|
ScoreGetRanksTrans * trans = NEW(ScoreGetRanksTrans)(
|
||
|
ownerId,
|
||
|
scoreGroup,
|
||
|
parentFolderId,
|
||
|
gameName,
|
||
|
timePeriod,
|
||
|
numResults,
|
||
|
pageNumber,
|
||
|
sortDesc,
|
||
|
callback,
|
||
|
param
|
||
|
);
|
||
|
NetTransSend(trans);
|
||
|
}
|