forked from metin2/server
71 lines
1.6 KiB
C++
71 lines
1.6 KiB
C++
|
|
#ifndef P2P_MANAGER_H_
|
|
#define P2P_MANAGER_H_
|
|
|
|
#include <unordered_map>
|
|
|
|
#include "input.h"
|
|
#include <common/stl.h>
|
|
|
|
typedef struct _CCI
|
|
{
|
|
char szName[CHARACTER_NAME_MAX_LEN + 1];
|
|
DWORD dwPID;
|
|
BYTE bEmpire;
|
|
int lMapIndex;
|
|
BYTE bChannel;
|
|
|
|
LPDESC pkDesc;
|
|
} CCI;
|
|
|
|
class P2P_MANAGER : public singleton<P2P_MANAGER>
|
|
{
|
|
public:
|
|
P2P_MANAGER();
|
|
~P2P_MANAGER();
|
|
|
|
// 아래 Register* Unregister* pair들은 내부적으로 사실 같은 루틴을 사용한다.
|
|
// 단지 명시적으로 표시하기 위한 것
|
|
void RegisterAcceptor(LPDESC d);
|
|
void UnregisterAcceptor(LPDESC d);
|
|
|
|
void RegisterConnector(LPDESC d);
|
|
void UnregisterConnector(LPDESC d);
|
|
|
|
void EraseUserByDesc(LPDESC d); // 해당 desc에 있는 유저들을 지운다.
|
|
|
|
void FlushOutput();
|
|
|
|
void Boot(LPDESC d); // p2p 처리에 필요한 정보를 보내준다. (전 캐릭터의 로그인 정보 등)
|
|
|
|
void Send(const void * c_pvData, int iSize, LPDESC except = NULL);
|
|
|
|
void Login(LPDESC d, const TPacketGGLogin * p);
|
|
void Logout(const char * c_pszName);
|
|
|
|
CCI * Find(const char * c_pszName);
|
|
CCI * FindByPID(DWORD pid);
|
|
|
|
int GetCount();
|
|
int GetEmpireUserCount(int idx);
|
|
int GetDescCount();
|
|
void GetP2PHostNames(std::string& hostNames);
|
|
|
|
private:
|
|
void Logout(CCI * pkCCI);
|
|
|
|
CInputProcessor * m_pkInputProcessor;
|
|
int m_iHandleCount;
|
|
|
|
typedef std::unordered_map<std::string, CCI *, stringhash> TCCIMap;
|
|
typedef std::unordered_map<DWORD, CCI*> TPIDCCIMap;
|
|
|
|
std::unordered_set<LPDESC> m_set_pkPeers;
|
|
TCCIMap m_map_pkCCI;
|
|
TPIDCCIMap m_map_dwPID_pkCCI;
|
|
int m_aiEmpireUserCount[EMPIRE_MAX_NUM];
|
|
};
|
|
|
|
#endif /* P2P_MANAGER_H_ */
|
|
|