//------------------------------------------------------------------------ void CMatchMakingHandler::Search( int freeSlots, int maxResults, SCrySessionSearchData* searchParameters, int numSearchParameters ) { //might still want equivalents of these //m_findGameTimeout = GetFindGameTimeout(); //m_findGameResults.clear(); SCrySessionSearchParam param; param.m_type = FIND_GAME_SESSION_QUERY; param.m_data = searchParameters; param.m_numFreeSlots = freeSlots; CRY_ASSERT(param.m_numFreeSlots > 0); param.m_maxNumReturn = maxResults; param.m_ranked = false; int curData = 0; CRY_ASSERT_MESSAGE( numSearchParameters < FIND_GAMES_SEARCH_NUM_DATA, "Session search data buffer overrun" ); searchParameters[ numSearchParameters ].m_operator = eCSSO_Equal; searchParameters[ numSearchParameters ].m_data.m_id = LID_MATCHDATA_VERSION; searchParameters[ numSearchParameters ].m_data.m_type = eCLUDT_Int32; searchParameters[ numSearchParameters ].m_data.m_int32 = GameLobbyData::GetVersion(); numSearchParameters++; param.m_numData = numSearchParameters; ++s_currentMMSearchID; #if defined(TRACK_MATCHMAKING) if( CMatchmakingTelemetry* pMMTel = g_pGame->GetMatchMakingTelemetry() ) { pMMTel->AddEvent( SMMStartSearchEvent( param, s_currentMMSearchID ) ); } #endif ECryLobbyError result = g_pGame->GetGameBrowser()->StartSearchingForServers(¶m, CMatchMakingHandler::SearchCallback, this, false); if (result == eCLE_Success) { CryLog("MatchMakingHandler::Search() search successfully started, ");//setting s_bShouldBeSearching to FALSE to prevent another one starting"); } else { CryLog("MatchMakingHandler::Search() search failed to start (error=%i)", result);// setting s_bShouldBeSearching to TRUE so we start another one when the timeout occurs", result); } }
//------------------------------------------------------------------------ void CMatchMakingHandler::Search( int freeSlots, int maxResults, SCrySessionSearchData* searchParameters, int numSearchParameters ) { //might still want equivalents of these //m_findGameTimeout = GetFindGameTimeout(); //m_findGameResults.clear(); SCrySessionSearchParam param; param.m_type = FIND_GAME_SESSION_QUERY; param.m_data = searchParameters; param.m_numFreeSlots = freeSlots; CRY_ASSERT(param.m_numFreeSlots > 0); param.m_maxNumReturn = maxResults; param.m_ranked = false; int curData = 0; CRY_ASSERT_MESSAGE( numSearchParameters < FIND_GAMES_SEARCH_NUM_DATA, "Session search data buffer overrun" ); searchParameters[ numSearchParameters ].m_operator = eCSSO_Equal; searchParameters[ numSearchParameters ].m_data.m_id = LID_MATCHDATA_VERSION; searchParameters[ numSearchParameters ].m_data.m_type = eCLUDT_Int32; searchParameters[ numSearchParameters ].m_data.m_int32 = GameLobbyData::GetVersion(); numSearchParameters++; // TODO: Need to decide how to handle regions in searches on all platforms (currently different IDs/types used) /* #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 < FIND_GAMES_SEARCH_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 < FIND_GAMES_SEARCH_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 int userRegion = g_pGame->GetUserRegion(); if (userRegion) { const CTimeValue &now = gEnv->pTimer->GetFrameStartTime(); const float timeSinceStarted = (now - m_timeSearchStarted).GetSeconds(); if (timeSinceStarted < gl_findGameExpandSearchTime) { CryLog("CGameLobby::FindGamesSearch() using local region"); CRY_ASSERT_MESSAGE( curData < FIND_GAMES_SEARCH_NUM_DATA, "Session search data buffer overrun" ); data[curData].m_operator = eCSSO_Equal; data[curData].m_data.m_id = LID_MATCHDATA_COUNTRY; data[curData].m_data.m_type = eCLUDT_Int32; data[curData].m_data.m_int32 = g_pGame->GetUserRegion(); curData++; // Need to use a different query since we've got more filters param.m_type = FIND_GAME_SESSION_QUERY_WC; } else { CryLog("CGameLobby::FindGamesSearch() using all regions"); } } else { CryLog("CGameLobby::FindGamesSearch() using all regions - no user region detected"); } */ param.m_numData = numSearchParameters; ++s_currentMMSearchID; #if defined(TRACK_MATCHMAKING) if( CMatchmakingTelemetry* pMMTel = g_pGame->GetMatchMakingTelemetry() ) { pMMTel->AddEvent( SMMStartSearchEvent( param, s_currentMMSearchID ) ); } #endif ECryLobbyError result = g_pGame->GetGameBrowser()->StartSearchingForServers(¶m, CMatchMakingHandler::SearchCallback, this, false); if (result == eCLE_Success) { CryLog("MatchMakingHandler::Search() search successfully started, ");//setting s_bShouldBeSearching to FALSE to prevent another one starting"); } else { CryLog("MatchMakingHandler::Search() search failed to start (error=%i)", result);// setting s_bShouldBeSearching to TRUE so we start another one when the timeout occurs", result); } }