86 lines
2.3 KiB
C++
86 lines
2.3 KiB
C++
#pragma
|
|
|
|
#include "../EterLib/NetStream.h"
|
|
#include "../EterLib/FuncObject.h"
|
|
|
|
class CAccountConnector : public CNetworkStream, public CSingleton<CAccountConnector>
|
|
{
|
|
public:
|
|
enum
|
|
{
|
|
STATE_OFFLINE,
|
|
STATE_HANDSHAKE,
|
|
STATE_AUTH,
|
|
};
|
|
|
|
public:
|
|
CAccountConnector();
|
|
virtual ~CAccountConnector();
|
|
|
|
void SetHandler(PyObject* poHandler);
|
|
void SetLoginInfo(const char * c_szName, const char * c_szPwd);
|
|
void ClearLoginInfo( void );
|
|
|
|
bool SendChinaMatrixCardPacket(const char * c_szMatrixCardString);
|
|
bool SendRunupMatrixCardPacket(const char * c_szMatrixCardString);
|
|
bool SendNEWCIBNPasspodAnswerPacket(const char * answer);
|
|
|
|
bool Connect(const char * c_szAddr, int iPort, const char * c_szAccountAddr, int iAccountPort);
|
|
void Disconnect();
|
|
void Process();
|
|
|
|
protected:
|
|
void OnConnectFailure();
|
|
void OnConnectSuccess();
|
|
void OnRemoteDisconnect();
|
|
void OnDisconnect();
|
|
|
|
protected:
|
|
void __Inialize();
|
|
bool __StateProcess();
|
|
|
|
void __OfflineState_Set();
|
|
void __HandshakeState_Set();
|
|
void __AuthState_Set();
|
|
|
|
bool __HandshakeState_Process();
|
|
bool __AuthState_Process();
|
|
|
|
bool __AuthState_RecvEmpty();
|
|
bool __AuthState_RecvPhase();
|
|
bool __AuthState_RecvHandshake();
|
|
bool __AuthState_RecvPing();
|
|
bool __AuthState_SendPong();
|
|
bool __AuthState_RecvAuthSuccess();
|
|
#ifdef USE_OPENID
|
|
bool __AuthState_RecvAuthSuccess_OpenID();
|
|
#endif /* USE_OPENID */
|
|
bool __AuthState_RecvAuthFailure();
|
|
bool __AuthState_RecvChinaMatrixCard();
|
|
bool __AuthState_RecvRunupMatrixQuiz();
|
|
bool __AuthState_RecvNEWCIBNPasspodRequest();
|
|
bool __AuthState_RecvPanamaPack();
|
|
bool __AuthState_RecvHybridCryptKeys(int VarSize);
|
|
bool __AuthState_RecvHybridCryptSDB(int VarSize);
|
|
|
|
bool __AnalyzePacket(UINT uHeader, UINT uPacketSize, bool (CAccountConnector::*pfnDispatchPacket)());
|
|
// TODO: 지금 현재는 임시다. header뒤에 size 4byte가 무조건 온다는 가정임.
|
|
// 제대로 하려면 Packet System Refactoring해야 한다.
|
|
bool __AnalyzeVarSizePacket(UINT uHeader, bool (CAccountConnector::*pfnDispatchPacket)(int));
|
|
|
|
protected:
|
|
UINT m_eState;
|
|
std::string m_strID;
|
|
std::string m_strPassword;
|
|
|
|
std::string m_strAddr;
|
|
int m_iPort;
|
|
BOOL m_isWaitKey;
|
|
|
|
PyObject * m_poHandler;
|
|
|
|
// CHINA_CRYPT_KEY
|
|
void __BuildClientKey_20050304Myevan();
|
|
// END_OF_CHINA_CRYPT_KEY
|
|
};
|