// 현재 유저의 정보를 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); }
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(); }