//--------------------------------------- void CGameBrowser::Update(const float dt) { if (m_delayedSearchType != eDST_None) { if (m_searchingTask==CryLobbyInvalidTaskID && !CanStartSearch()) { CryLog("[UI] Activate delayed search %d", m_delayedSearchType); if (m_delayedSearchType == eDST_Full) { StartSearchingForServers(); } else if (m_delayedSearchType == eDST_FavouriteId) { if (!DoFavouriteIdSearch()) { #ifdef USE_C2_FRONTEND if (CMPMenuHub *pMPMenu = CMPMenuHub::GetMPMenuHub()) { pMPMenu->SearchComplete(); } #endif //#ifdef USE_C2_FRONTEND } } m_delayedSearchType = eDST_None; } } }
void CGameBrowser::StartFavouriteIdSearch( const CGameServerLists::EGameServerLists serverList, uint32 *pFavouriteIds, uint32 numFavouriteIds ) { CRY_ASSERT(numFavouriteIds <= CGameServerLists::k_maxServersStoredInList); numFavouriteIds = MIN(numFavouriteIds, CGameServerLists::k_maxServersStoredInList); if (numFavouriteIds <= CGameServerLists::k_maxServersStoredInList) { memset(m_searchFavouriteIds, INVALID_SESSION_FAVOURITE_ID, sizeof(m_searchFavouriteIds)); for (uint32 i=0; i<numFavouriteIds; ++i) { m_searchFavouriteIds[i] = pFavouriteIds[i]; } m_currentSearchFavouriteIdIndex = 0; m_numSearchFavouriteIds = numFavouriteIds; if (CanStartSearch()) { CryLog("[UI] Delayed Searching for favId sessions"); m_delayedSearchType = eDST_FavouriteId; NOTIFY_UILOBBY_MP(SearchStarted()); } else { if (DoFavouriteIdSearch()) { m_currentFavouriteIdSearchType = serverList; NOTIFY_UILOBBY_MP(SearchStarted()); } } } }
void CGameBrowser::StartFavouriteIdSearch( const CGameServerLists::EGameServerLists serverList, uint32 *pFavouriteIds, uint32 numFavouriteIds ) { CRY_ASSERT(numFavouriteIds <= CGameServerLists::k_maxServersStoredInList); numFavouriteIds = MIN(numFavouriteIds, CGameServerLists::k_maxServersStoredInList); if (numFavouriteIds <= CGameServerLists::k_maxServersStoredInList) { memset(m_searchFavouriteIds, INVALID_SESSION_FAVOURITE_ID, sizeof(m_searchFavouriteIds)); for (uint32 i=0; i<numFavouriteIds; ++i) { m_searchFavouriteIds[i] = pFavouriteIds[i]; } m_currentSearchFavouriteIdIndex = 0; m_numSearchFavouriteIds = numFavouriteIds; if (CanStartSearch()) { CryLog("[UI] Delayed Searching for favId sessions"); m_delayedSearchType = eDST_FavouriteId; #ifdef USE_C2_FRONTEND if (CMPMenuHub *pMPMenu = CMPMenuHub::GetMPMenuHub()) { pMPMenu->StartSearching(); } #endif //#ifdef USE_C2_FRONTEND } else { if (DoFavouriteIdSearch()) { m_currentFavouriteIdSearchType = serverList; #ifdef USE_C2_FRONTEND if (CMPMenuHub *pMPMenu = CMPMenuHub::GetMPMenuHub()) { pMPMenu->StartSearching(); } #endif //#ifdef USE_C2_FRONTEND } } } }
//--------------------------------------- void CGameBrowser::Update(const float dt) { if (m_delayedSearchType != eDST_None) { if (m_searchingTask==CryLobbyInvalidTaskID && !CanStartSearch()) { CryLog("[UI] Activate delayed search %d", m_delayedSearchType); if (m_delayedSearchType == eDST_Full) { StartSearchingForServers(); } else if (m_delayedSearchType == eDST_FavouriteId) { if (!DoFavouriteIdSearch()) { NOTIFY_UILOBBY_MP(SearchCompleted()); } } m_delayedSearchType = eDST_None; } } }
//------------------------------------------------------------------------- void CGameBrowser::StartSearchingForServers(CryMatchmakingSessionSearchCallback cb) { ICryLobby *lobby = gEnv->pNetwork->GetLobby(); if (lobby != NULL && lobby->GetLobbyService()) { #ifdef GAME_IS_CRYSIS2 CCCPOINT (GameLobby_StartSearchingForServers); #endif if (CanStartSearch()) { CryLog("[UI] Delayed Searching for sessions"); m_delayedSearchType = eDST_Full; #ifdef USE_C2_FRONTEND if (CMPMenuHub *pMPMenu = CMPMenuHub::GetMPMenuHub()) { pMPMenu->StartSearching(); } #endif //#ifdef USE_C2_FRONTEND return; } SCrySessionSearchParam param; SCrySessionSearchData data[START_SEARCHING_FOR_SERVERS_NUM_DATA]; param.m_type = REQUIRED_SESSIONS_QUERY; param.m_data = data; param.m_numFreeSlots = 0; param.m_maxNumReturn = g_pGameCVars->g_maxGameBrowserResults; param.m_ranked = false; int curData = 0; CRY_ASSERT_MESSAGE( curData < START_SEARCHING_FOR_SERVERS_NUM_DATA, "Session search data buffer overrun" ); data[curData].m_operator = eCSSO_Equal; data[curData].m_data.m_id = LID_MATCHDATA_VERSION; data[curData].m_data.m_type = eCLUDT_Int32; data[curData].m_data.m_int32 = GameLobbyData::GetVersion(); curData++; #ifdef GAME_IS_CRYSIS2 if (!g_pGameCVars->g_ignoreDLCRequirements) { // Note: GetSquadCommonDLCs is actually a bit field, so it should really be doing a bitwise & to determine // if the client can join the server. However this is not supported so the less than equal operator // is used instead. This may return some false positives but never any false negatives, the false // positives will be filtered out when the results are retreived. CRY_ASSERT_MESSAGE( curData < START_SEARCHING_FOR_SERVERS_NUM_DATA, "Session search data buffer overrun" ); data[curData].m_operator = eCSSO_LessThanEqual; data[curData].m_data.m_id = LID_MATCHDATA_REQUIRED_DLCS; data[curData].m_data.m_type = eCLUDT_Int32; data[curData].m_data.m_int32 = g_pGame->GetDLCManager()->GetSquadCommonDLCs(); curData++; } #endif #if USE_CRYLOBBY_GAMESPY uint32 region = eSR_All; // Game side support for region filtering needs to change this. if ( region != eSR_All ) { CRY_ASSERT_MESSAGE( curData < START_SEARCHING_FOR_SERVERS_NUM_DATA, "Session search data buffer overrun" ); data[curData].m_operator = eCSSO_BitwiseAndNotEqualZero; data[curData].m_data.m_id = LID_MATCHDATA_REGION; data[curData].m_data.m_type = eCLUDT_Int32; data[curData].m_data.m_int32 = region; curData++; } int32 favouriteID = 0; // Game side support for favourite servers needs to change this. if ( favouriteID ) { CRY_ASSERT_MESSAGE( curData < START_SEARCHING_FOR_SERVERS_NUM_DATA, "Session search data buffer overrun" ); data[curData].m_operator = eCSSO_Equal; data[curData].m_data.m_id = LID_MATCHDATA_FAVOURITE_ID; data[curData].m_data.m_type = eCLUDT_Int32; data[curData].m_data.m_int32 = favouriteID; curData++; } #endif param.m_numData = curData; CRY_ASSERT_MESSAGE(m_searchingTask==CryLobbyInvalidTaskID,"CGameBrowser Trying to search for sessions when you think you are already searching."); ECryLobbyError error = StartSearchingForServers(¶m, cb, this, false); CRY_ASSERT_MESSAGE(error==eCLE_Success,"CGameBrowser searching for sessions failed."); #ifdef USE_C2_FRONTEND CMPMenuHub *pMPMenu = CMPMenuHub::GetMPMenuHub(); if (error == eCLE_Success) { if (pMPMenu) { pMPMenu->StartSearching(); } CryLogAlways("CCGameBrowser::StartSearchingForServers %d", m_searchingTask); } else { if (pMPMenu) { pMPMenu->SearchComplete(); } m_searchingTask = CryLobbyInvalidTaskID; } #endif //#ifdef USE_C2_FRONTEND } else { CRY_ASSERT_MESSAGE(0,"CGameBrowser Cannot search for servers : no lobby service available."); } }
//------------------------------------------------------------------------- void CGameBrowser::StartSearchingForServers(CryMatchmakingSessionSearchCallback cb) { ICryLobby *lobby = gEnv->pNetwork->GetLobby(); if (lobby != NULL && lobby->GetLobbyService()) { CCCPOINT (GameLobby_StartSearchingForServers); if (CanStartSearch()) { CryLog("[UI] Delayed Searching for sessions"); m_delayedSearchType = eDST_Full; NOTIFY_UILOBBY_MP(SearchStarted()); return; } SCrySessionSearchParam param; SCrySessionSearchData data[START_SEARCHING_FOR_SERVERS_NUM_DATA]; param.m_type = REQUIRED_SESSIONS_QUERY; param.m_data = data; #if defined(XENON) || defined(PS3) param.m_numFreeSlots = max(g_pGame->GetSquadManager()->GetSquadSize(), 1); #else param.m_numFreeSlots = 0; #endif param.m_maxNumReturn = g_pGameCVars->g_maxGameBrowserResults; param.m_ranked = false; int curData = 0; #if defined(XENON) data[curData].m_operator = eCSSO_Equal; data[curData].m_data.m_id = REQUIRED_SESSIONS_SEARCH_PARAM; data[curData].m_data.m_type = eCLUDT_Int32; data[curData].m_data.m_int32 = 0; ++curData; #endif CRY_ASSERT_MESSAGE( curData < START_SEARCHING_FOR_SERVERS_NUM_DATA, "Session search data buffer overrun" ); data[curData].m_operator = eCSSO_Equal; data[curData].m_data.m_id = LID_MATCHDATA_VERSION; data[curData].m_data.m_type = eCLUDT_Int32; data[curData].m_data.m_int32 = GameLobbyData::GetVersion(); ++curData; // if you want to use this, make sure the search query in the SPA asks for this param as well if (!g_pGameCVars->g_ignoreDLCRequirements) { // Note: GetSquadCommonDLCs is actually a bit field, so it should really be doing a bitwise & to determine // if the client can join the server. However this is not supported so the less than equal operator // is used instead. This may return some false positives but never any false negatives, the false // positives will be filtered out when the results are retreived. CRY_ASSERT_MESSAGE( curData < START_SEARCHING_FOR_SERVERS_NUM_DATA, "Session search data buffer overrun" ); data[curData].m_operator = eCSSO_LessThanEqual; data[curData].m_data.m_id = LID_MATCHDATA_REQUIRED_DLCS; data[curData].m_data.m_type = eCLUDT_Int32; data[curData].m_data.m_int32 = g_pGame->GetDLCManager()->GetSquadCommonDLCs(); ++curData; } param.m_numData = curData; CRY_ASSERT_MESSAGE(m_searchingTask==CryLobbyInvalidTaskID,"CGameBrowser Trying to search for sessions when you think you are already searching."); ECryLobbyError error = StartSearchingForServers(¶m, cb, this, false); CRY_ASSERT_MESSAGE(error==eCLE_Success,"CGameBrowser searching for sessions failed."); if (error == eCLE_Success) { NOTIFY_UILOBBY_MP(SearchStarted()); CryLogAlways("CCGameBrowser::StartSearchingForServers %d", m_searchingTask); } else { NOTIFY_UILOBBY_MP(SearchCompleted()); m_searchingTask = CryLobbyInvalidTaskID; } } else { CRY_ASSERT_MESSAGE(0,"CGameBrowser Cannot search for servers : no lobby service available."); } }