// 룸 리스트를 요청받았을 때 처리하는 함수 ERROR_CODE PacketProcess::LobbyRoomList(PacketInfo packetInfo) { CHECK_START // 현재 로비에 있는지 조사한다. // 룸 리스트를 보내준다. auto pUserRet = m_pRefUserMgr->GetUser(packetInfo.sessionIndex); auto errorCode = std::get<0>(pUserRet); if (errorCode != ERROR_CODE::NONE) { CHECK_ERROR(errorCode); } auto pUser = std::get<1>(pUserRet); if (pUser->IsCurDomainInLobby() == false) { CHECK_ERROR(ERROR_CODE::LOBBY_ROOM_LIST_INVALID_DOMAIN); } auto pLobby = m_pRefLobbyMgr->GetLobby(pUser->GetLobbyIndex()); if (pLobby == nullptr) { CHECK_ERROR(ERROR_CODE::LOBBY_ROOM_LIST_INVALID_LOBBY_INDEX); } auto reqPkt = (NCommon::PktLobbyRoomListReq*)packetInfo.dataAddress; pLobby->SendRoomList(pUser->GetSessioIndex(), reqPkt->StartRoomIndex); return ERROR_CODE::NONE; CHECK_ERR: NCommon::PktLobbyRoomListRes resPkt; resPkt.SetError(__result); m_pRefNetwork->SendData(packetInfo.sessionIndex, (short)PACKET_ID::LOBBY_ENTER_ROOM_LIST_RES, sizeof(NCommon::PktBase), (char*)&resPkt); return (ERROR_CODE)__result; }
ERROR_CODE PacketProcess::LobbyLeave(PacketInfo packetInfo) { CHECK_START // 현재 로비에 있는지 조사한다. // 로비에서 나간다 // 기존 로비에 있는 사람에게 나가는 사람이 있다고 알려준다. NCommon::PktLobbyLeaveRes resPkt; auto pUserRet = m_pRefUserMgr->GetUser(packetInfo.sessionIndex); auto errorCode = std::get<0>(pUserRet); if (errorCode != ERROR_CODE::NONE) { CHECK_ERROR(errorCode); } auto pUser = std::get<1>(pUserRet); if (pUser->IsCurDomainInLobby() == false) { CHECK_ERROR(ERROR_CODE::LOBBY_LEAVE_INVALID_DOMAIN); } auto pLobby = m_pRefLobbyMgr->GetLobby(pUser->GetLobbyIndex()); if (pLobby == nullptr) { CHECK_ERROR(ERROR_CODE::LOBBY_LEAVE_INVALID_LOBBY_INDEX); } auto enterRet = pLobby->LeaveUser(pUser->GetIndex()); if (enterRet != ERROR_CODE::NONE) { CHECK_ERROR(enterRet); } pLobby->NotifyLobbyLeaveUserInfo(pUser); m_pRefNetwork->SendData(packetInfo.sessionIndex, (short)PACKET_ID::LOBBY_LEAVE_RES, sizeof(NCommon::PktLobbyLeaveRes), (char*)&resPkt); return ERROR_CODE::NONE; CHECK_ERR: resPkt.SetError(__result); m_pRefNetwork->SendData(packetInfo.sessionIndex, (short)PACKET_ID::LOBBY_LEAVE_RES, sizeof(NCommon::PktLobbyLeaveRes), (char*)&resPkt); return (ERROR_CODE)__result; }
// 채팅 메시지가 들어왔을 때 ERROR_CODE PacketProcess::LobbyChat(PacketInfo packetInfo) { CHECK_START; auto reqPkt = (NCommon::PktLobbyChatReq*)packetInfo.dataAddress; NCommon::PktLobbyChatRes resPkt; auto pUserRet = m_pRefUserMgr->GetUser(packetInfo.sessionIndex); auto errorCode = std::get<0>(pUserRet); if (errorCode != ERROR_CODE::NONE) { CHECK_ERROR(errorCode); } // 유저 auto pUser = std::get<1>(pUserRet); // 유저가 방에 있는 놈이 아니면 에러 if (pUser->IsCurDomainInRoom() == false) { CHECK_ERROR(ERROR_CODE::LOBBY_CHAT_INVALID_DOMAIN); } // 해당 유저를 관리하고 있는 로비를 찾는다. auto lobbyIndex = pUser->GetLobbyIndex(); auto pLobby = m_pRefLobbyMgr->GetLobby(lobbyIndex); if (pLobby == nullptr) { CHECK_ERROR(ERROR_CODE::LOBBY_CHAT_INVALID_LOBBY_INDEX); } // 해당 방의 유저들에게 새로 들어온 채팅 메시지를 전달한다. pLobby->NotifyChat(pUser->GetSessioIndex(), pUser->GetID().c_str(), reqPkt->Msg); m_pRefNetwork->SendData(packetInfo.sessionIndex, (short)PACKET_ID::LOBBY_CHAT_RES, sizeof(resPkt), (char*)&resPkt); return ERROR_CODE::NONE; CHECK_ERR: resPkt.SetError(__result); m_pRefNetwork->SendData(packetInfo.sessionIndex, (short)PACKET_ID::LOBBY_CHAT_RES, sizeof(resPkt), (char*)&resPkt); return (ERROR_CODE)__result; }
ERROR_CODE PacketProcess::NtfSysCloseSession(PacketInfo packetInfo) { auto pUser = std::get<1>(m_pRefUserMgr->GetUser(packetInfo.SessionIndex)); if (pUser) { auto pLobby = m_pRefLobbyMgr->GetLobby(pUser->GetLobbyIndex()); if (pLobby) { // auto pRoom = pLobby->GetRoom(pUser->GetRoomIndex()); // // if (pRoom) // { // pRoom->LeaveUser(pUser->GetIndex()); // pRoom->NotifyLeaveUserInfo(pUser->GetID().c_str()); // pLobby->NotifyChangedRoomInfo(pRoom->GetIndex()); // // m_pRefLogger->Write(LOG_TYPE::L_INFO, "%s | NtfSysCloseSesson. sessionIndex(%d). Room Out", __FUNCTION__, packetInfo.SessionIndex); // } // // pLobby->LeaveUser(pUser->GetIndex()); // // if (pRoom == nullptr) { // pLobby->NotifyLobbyLeaveUserInfo(pUser); // } m_pRefLogger->Write(LOG_TYPE::L_INFO, "%s | NtfSysCloseSesson. sessionIndex(%d). Lobby Out", __FUNCTION__, packetInfo.SessionIndex); } m_pRefUserMgr->RemoveUser(packetInfo.SessionIndex); } m_pConnectedUserManager->SetDisConnectSession(packetInfo.SessionIndex); m_pRefLogger->Write(LOG_TYPE::L_INFO, "%s | NtfSysCloseSesson. sessionIndex(%d)", __FUNCTION__, packetInfo.SessionIndex); return ERROR_CODE::NONE; }