void CDPClient::OnQueryDestroyPlayer( CAr & ar, DPID dpid, LPVOID lpBuffer, u_long uBufSize ) { DWORD dwSerial; ar >> dwSerial; u_long idPlayer; ar >> idPlayer; CMclAutoLock Lock( CPlayerMng::Instance()->m_AddRemoveLock ); CPlayer* pPlayer = CPlayerMng::Instance()->GetPlayerBySerial( dwSerial ); if( pPlayer ) { // 성공적으로 찾았으니까 접속을 끊는다. g_DPCacheSrvr.DestroyPlayer( pPlayer->GetNetworkId() ); // 소켓연결이 끊기고, PACKETTYPE_LEAVE가 월드서버로 간다. #ifdef __MA_VER11_07 // cache 서버에서 loginserver로 유저접속끊낌을 알려주는 부분 g_DPCoreClient.SendDestroyPlayer( pPlayer );// coresvr를 통해 loginsvr 에도 끊낌을 알려준다 #endif // __MA_VER11_07 // cache 서버에서 loginserver로 유저접속끊낌을 알려주는 부분 return; } WriteError( "OnQueryDestroyPlayer - idPlayer:%d GetPlayer return NULL.", idPlayer ); // 찾지 못해도, 끊었다고 알려준다. BEFORESENDSOLE( out, PACKETTYPE_LEAVE, DPID_UNKNOWN ); out << idPlayer; LPBYTE lpBuf = out.GetBuffer( &nBufSize ); g_DPClientArray.SendToServer( dpid, lpBuf, nBufSize ); }
void CDPCoreClient::OnJoin( CAr & ar, DPID dpid ) { CMclAutoLock Lock( CPlayerMng::Instance()->m_AddRemoveLock ); DWORD dwSerial; BYTE byData; ar >> dwSerial; ar >> byData; // 사용하지 않는다. CPlayer* pPlayer = CPlayerMng::Instance()->GetPlayerBySerial( dwSerial ); if( pPlayer == NULL ) { WriteLog( "CDPCoreClient::OnJoin - player not found" ); return; } CDPClient* pClient = g_DPClientArray.GetClient( pPlayer->GetChannel(), pPlayer->GetWorld(), D3DXVECTOR3(0.0f, 0.0f, 0.0f) ); if( pClient ) { pPlayer->SetClient( pClient ); pClient->SendJoin( pPlayer ); } else { WriteLog( "CDPCoreClient.OnJoin: server not found id: %d account: %s player: %s world: %d", pPlayer->GetPlayerId(), pPlayer->GetAccount(), pPlayer->GetPlayer(), pPlayer->GetWorld() ); g_DPCacheSrvr.DestroyPlayer( dpid ); } }
void CDPCoreClient::OnLeave( CAr & ar, DPID dpid ) { CMclAutoLock Lock( CPlayerMng::Instance()->m_AddRemoveLock ); DWORD dwSerial; ar >> dwSerial; CPlayer* pPlayer = CPlayerMng::Instance()->GetPlayerBySerial( dwSerial ); // dpid가 serial번호이다. if( pPlayer ) g_DPCacheSrvr.DestroyPlayer( dpid ); }
void CDPCoreClient::OnKillPlayer( CAr & ar, DPID dpid ) { g_DPCacheSrvr.DestroyPlayer( dpid ); }