Esempio n. 1
0
BOOL SFLogicEntry::OnDisconnectPlayer(int serial)
{
	PlayerMap::iterator iter = m_PlayerMap.find(serial);
	
	if(iter == m_PlayerMap.end())
	{
		SFASSERT(0);
		return FALSE;
	}

	SFPlayer* pPlayer = iter->second;

	m_pPlayerManager->DelPlayer(pPlayer);

///////////////////////////////////////////////////////////
//20120619 이런식으로 짜면 실수할 여지가 크다.... 나중에 수정할 수 있도록 한다.
///////////////////////////////////////////////////////////
	if (pPlayer->GetPlayerState() == PLAYER_STATE_LOADING ||
		pPlayer->GetPlayerState() == PLAYER_STATE_ROOM ||
		pPlayer->GetPlayerState() == PLAYER_STATE_PLAY ||
		pPlayer->GetPlayerState() == PLAYER_STATE_PLAYEND ||
		pPlayer->GetPlayerState() == PLAYER_STATE_PLAYREADY)
	{
		SFRoomManager* pManager = GetRoomManager();
		SFRoom* pRoom = pManager->GetRoom(pPlayer->GetRoomIndex());
		pRoom->GetRoomFSM()->OnLeaveRoom(pPlayer);
	}

	pPlayer->ChangeState(PLAYER_STATE_NONE);

	m_pPlayerPool->Release(pPlayer);

	m_PlayerMap.erase(iter);

	return TRUE;
}
Esempio n. 2
0
BOOL SFPlayer::OnMessage( SFObject* pSender, SFMessage* pMessage )
{
	switch(pMessage->GetCommand())
	{
	case CGSF::EnterTeamMember:
		{
			int PlayerIndex = -1;
			pMessage->ReadStart();
			*pMessage >> PlayerIndex;

			pMessage->ReadEnd();

			SendEnterTeamMember(this, PlayerIndex);
		}
		break;	
	case CGSF::LeaveTeamMember:
		{
			int PlayerIndex = -1;
			pMessage->ReadStart();
			*pMessage >> PlayerIndex;

			pMessage->ReadEnd();

			SendLeaveTeamMember(this, PlayerIndex);
		}
		break;
	
	case CGSF::MSG_DESTROY_PLAYER:
		{
			int PlayerIndex = -1;
			pMessage->ReadStart();
			*pMessage >> PlayerIndex;

			pMessage->ReadEnd();

			SendDestroyPlayer(this, PlayerIndex);
		}
		break;
	case CGSF::PeerList:
		{
			SFRoomManager* pManager = SFLogicEntry::GetLogicEntry()->GetRoomManager();
			SFRoom* pRoom = pManager->GetRoom(GetRoomIndex());

			SendPeerInfo(this, pRoom);
		}
		break;
	case CGSF::DeletePeer:
		{
			int PlayerIndex = -1;
			pMessage->ReadStart();
			*pMessage >> PlayerIndex;

			pMessage->ReadEnd();

			SendDeletePeer(this, PlayerIndex);
		}
		break;

	}

	return TRUE;
}
Esempio n. 3
0
BOOL SFLogicEntry::OnTimer(BasePacket* pPacket)
{
	SFRoomManager* pManager = GetRoomManager();
	return pManager->Update();
}