72 lines
2.1 KiB
C++
72 lines
2.1 KiB
C++
#ifndef REALMSESSION_H
|
|
#define REALMSESSION_H
|
|
|
|
#include "common.h"
|
|
#include "Auth/MD5Hash.h"
|
|
|
|
struct SRealmInfo
|
|
{
|
|
uint8 icon; // icon near realm
|
|
uint8 locked; // added in 2.0.x
|
|
uint8 color; // color of record
|
|
std::string name; // Text zero terminated name of Realm
|
|
std::string addr_port; // Text zero terminated address of Realm ("ip:port")
|
|
float population; // 1.6 -> population value. lower == lower population and vice versa
|
|
uint8 chars_here; // number of characters on this server
|
|
uint8 timezone; // timezone
|
|
uint8 unknown; //
|
|
};
|
|
|
|
struct AuthHandler;
|
|
class RealmSocket;
|
|
|
|
class RealmSession
|
|
{
|
|
public:
|
|
RealmSession(PseuInstance*);
|
|
~RealmSession();
|
|
void AddToPktQueue(ByteBuffer*);
|
|
void Connect(void);
|
|
void Update(void);
|
|
PseuInstance *GetInstance(void);
|
|
void ClearSocket(void);
|
|
void SetLogonData(void);
|
|
void SendLogonChallenge(void);
|
|
bool MustDie(void);
|
|
void SetMustDie(void);
|
|
bool SocketGood(void);
|
|
void SetRealmAddr(std::string);
|
|
inline uint32 GetRealmCount(void) { return _realms.size(); }
|
|
inline SRealmInfo& GetRealm(uint32 i) { return _realms[i]; }
|
|
|
|
|
|
private:
|
|
void _HandleRealmList(ByteBuffer&);
|
|
void _HandleLogonProof(ByteBuffer&);
|
|
void _HandleLogonChallenge(ByteBuffer&);
|
|
void _HandleTransferInit(ByteBuffer&);
|
|
void _HandleTransferData(ByteBuffer&);
|
|
AuthHandler *_GetAuthHandlerTable(void) const;
|
|
void SendRealmPacket(ByteBuffer&);
|
|
void DumpInvalidPacket(ByteBuffer&);
|
|
void DieOrReconnect(bool err = false);
|
|
std::string _accname,_accpass;
|
|
SocketHandler _sh;
|
|
PseuInstance *_instance;
|
|
ZThread::LockedQueue<ByteBuffer*,ZThread::FastMutex> pktQueue;
|
|
RealmSocket *_socket;
|
|
uint8 _m2[20];
|
|
RealmSession *_session;
|
|
BigNumber _key;
|
|
bool _mustdie;
|
|
bool _filetransfer;
|
|
uint8 _file_md5[MD5_DIGEST_LENGTH];
|
|
uint64 _file_done, _file_size;
|
|
ByteBuffer _filebuf;
|
|
ByteBuffer _transbuf; // stores parts of unfinished packets
|
|
std::vector<SRealmInfo> _realms;
|
|
};
|
|
|
|
|
|
#endif
|