123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- /*
- EQ2Emulator: Everquest II Server Emulator
- Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net)
- This file is part of EQ2Emulator.
- */
- #ifndef CLIENT_H
- #define CLIENT_H
- #include "../common/linked_list.h"
- #include "../common/timer.h"
- #include "../common/TCPConnection.h"
- #include "login_structs.h"
- #include "LoginAccount.h"
- #include "../common/PacketStruct.h"
- #include <string>
- #include <vector>
- enum eLoginMode { None, Normal, Registration };
- class DelayQue;
- class Client
- {
- public:
- Client(EQStream* ieqnc);
- ~Client();
- void SendLoginDenied();
- void SendLoginDeniedBadVersion();
- void SendLoginAccepted(int32 account_id = 1, int8 login_response = 0);
- void SendWorldList();
- void SendCharList();
- int16 AddWorldToList2(uchar* buffer, char* name, int32 id, int16* flags);
- void GenerateChecksum(EQApplicationPacket* outapp);
- int8 LoginKey[10];
- int8 ClientSession[25];
- bool Process();
- void SaveErrorsToDB(EQApplicationPacket* app, char* type, int32 version);
- void CharacterApproved(int32 server_id,int32 char_id);
- void CharacterRejected(int8 reason_number);
- EQStream* getConnection() { return eqnc; }
- LoginAccount* GetLoginAccount() { return login_account; }
- void SetLoginAccount(LoginAccount* in_account) {
- login_account = in_account;
- if(in_account)
- account_id = in_account->getLoginAccountID();
- }
- int16 GetVersion(){ return version; }
- char* GetKey() { return key; }
- void SetKey(char* in_key) { strcpy(key,in_key); }
- int32 GetIP() { return ip; }
- int16 GetPort() { return port; }
- int32 GetAccountID() { return account_id; }
- const char* GetAccountName(){ return (char*)account_name.c_str(); }
- void SetAccountName(const char* name){ account_name = string(name); }
- void ProcessLogin(char* name, char* pass,int seq=0);
- void QueuePacket(EQ2Packet* app);
- void FatalError(int8 response);
- void WorldResponse(int32 worldid, int8 response, char* ip_address, int32 port, int32 access_key);
- bool AwaitingCharCreationRequest(){
- if(createRequest)
- return true;
- else
- return false;
- }
- Timer* updatetimer;
- Timer* updatelisttimer;
- Timer* disconnectTimer;
- //Timer* keepalive;
- //Timer* logintimer;
- int16 packettotal;
- int32 requested_server_id;
- int32 request_num;
- LinkedList<DelayQue*> delay_que;
- void SendPlayFailed(int8 response);
- void StartDisconnectTimer();
- private:
- string pending_play_char_name;
- int32 pending_play_char_id;
- int8 update_position;
- int16 num_updates;
- vector<PacketStruct*>* update_packets;
- LoginAccount* login_account;
- EQStream* eqnc;
- int32 ip;
- int16 port;
- int32 account_id;
- string account_name;
- char key[10];
- int8 lsadmin;
- sint16 worldadmin;
- int lsstatus;
- bool kicked;
- bool verified;
- bool start;
- bool needs_world_list;
- int16 version;
- char bannedreason[30];
- eLoginMode LoginMode;
- PacketStruct* createRequest;
- Timer* playWaitTimer;
- };
- class ClientList
- {
- public:
- ClientList() {}
- ~ClientList() {}
-
- void Add(Client* client);
- Client* Get(int32 ip, int16 port);
- Client* FindByLSID(int32 lsaccountid);
- void FindByCreateRequest();
- void SendPacketToAllClients(EQ2Packet* app);
- void Process();
- private:
- Mutex MClientList;
- map<Client*, bool> client_list;
- };
- class DelayQue {
- public:
- DelayQue(Timer* in_timer, EQApplicationPacket* in_packet){
- timer = in_timer;
- packet = in_packet;
- };
- Timer* timer;
- EQApplicationPacket* packet;
- };
- #endif
|