コード例 #1
0
ファイル: NetManager.cpp プロジェクト: astromaker/sandbox
// 현재 유저의 정보를 txt파일에 저장시킨다.
void CNetManager::SaveCurrentUserData()
{
	FILE * pCurrentUserInfoFile = NULL;
	int count = SMemManager()->GetCurrentUser();
	CUserList * pUserList = SMemManager()->GetUserList();
	CUser * pUser = pUserList->GetFirstUser();

	if((pCurrentUserInfoFile = fopen("userdata.txt", "w")) == NULL)
	{
		ServerLog()->Log("Userdata File Create Error.");
	}

	fprintf(pCurrentUserInfoFile, "=============================================\n");
	fprintf(pCurrentUserInfoFile, "Current User Count : %d\n", count);
	fprintf(pCurrentUserInfoFile, "=============================================\n");
	fprintf(pCurrentUserInfoFile, "Database ID\tNickname\n");
	fprintf(pCurrentUserInfoFile, "---------------------------------------------\n");

	while(pUser != NULL)
	{
		if(pUser->IsOnline())
		{
			fprintf(pCurrentUserInfoFile, "%d\t\t%s\n", pUser->GetDatabaseID(), pUser->GetUserNickname());
		}
		pUser = pUserList->GetNext(pUser);
	}
	fclose(pCurrentUserInfoFile);
}
コード例 #2
0
ファイル: PacketProcess.cpp プロジェクト: astromaker/sandbox
void CPacketProcess::SendUserInfo(CUser * pUser)
{
	CSendPacket * pSendPacket;
	CUserList * pUserList = SMemManager()->GetUserList();
	CUser * pAllUser;

	pSendPacket = SMemManager()->AllocPerSendPacket();
	// 접속자 정보를 보내 준다.
	pSendPacket->Begin();
	pSendPacket->Set8Bit(MSG_SERV_LOGINOK);
	pSendPacket->Set16Bit((short)pUser->GetDatabaseID());
	pSendPacket->Set16Bit((short)SMemManager()->GetCurrentUser());

	// 사용자 정보가 많으면 패킷에 다 못넣으니깐.. 다른 처리 필요.
	pAllUser = pUserList->GetFirstUser();
	while(pAllUser != NULL)
	{
		if(pAllUser->IsOnline())
		{
			pSendPacket->Set16Bit((short)pAllUser->GetDatabaseID());
			pSendPacket->SetString(pAllUser->GetUserNickname());
			// 일단 보내는 패킷의 크기로 패킷의 크기를 넘어서면 사용자 정보 입력을 그만 둔다.
			// 패킷을 완성하고 보낸다. 그리고 다시 연결 패킷을 만들어 보낸다.
			// 이거 아마 동기화 안맞추어주어서 에러 날거 같다.. 난중에 테스트 필!
			// 여기서 유저의 마지막까지 왔는데 패킷이 다찾을때 다음 유저가 널이니까. 버그다..(무슨말인지 알지?)
			if(((pSendPacket->GetSize() + MAX_NICKNAME_LEN + 2) > MAX_PACKETBUFFER_LEN))
			{
				pSendPacket->End();
				pUser->GetSendQueue()->AddTail(pSendPacket);
				pUser->SendPost();

				pSendPacket = SMemManager()->AllocPerSendPacket();
				pSendPacket->Begin();
				pSendPacket->Set8Bit(MSG_SERV_USERLIST);
			}
		}
		pAllUser = pUserList->GetNext(pAllUser);
	}
	pSendPacket->End();
	pUser->GetSendQueue()->AddTail(pSendPacket);
	pUser->SendPost();
}