//-------------------------------------------------------------------------------------- // Name: BeginSession() // Desc: Create a GS_NEW session for writing stats //-------------------------------------------------------------------------------------- GS_BOOL SessionSrv::BeginSession() { #if defined(_XBOX) || defined(_XENON) if (m_hSession != INVALID_HANDLE_VALUE) return FALSE; GS_DWORD dwUser = SignIn::GetSignedInUser(); if (-1 == dwUser) return FALSE; // Set the context to standard (not ranked) XUserSetContext( dwUser, X_CONTEXT_GAME_TYPE, X_CONTEXT_GAME_TYPE_STANDARD ); // Create a (non-matchmaking) session CTaskID id = 0; GS_DWORD ret = XSessionCreate( XSESSION_CREATE_USES_STATS, dwUser, m_dwPublicSlots, m_dwPrivateSlots, &m_SessionNonce, &m_SessionInfo, Master::G()->GetTaskMgr()->AddTask(EGSTaskType_SessionCreate,this,&id), &m_hSession ); Master::G()->GetTaskMgr()->StartTask(id,ret); if( ret != ERROR_IO_PENDING ) { Master::G()->Log("XSessionCreate failed with error %d", ret); return FALSE; } #endif return TRUE; }
//----------------------------------------------------------------------------- // Purpose: Create a matchmaking session //----------------------------------------------------------------------------- int CXboxSystem::CreateSession( uint nFlags, uint nUserIdx, uint nMaxPublicSlots, uint nMaxPrivateSlots, uint64 *pNonce, void *pSessionInfo, XboxHandle_t *pSessionHandle, bool bAsync, AsyncHandle_t *pAsyncHandle ) { XOVERLAPPED *pOverlapped = NULL; if ( bAsync ) { AsyncResult_t *pResult = InitializeAsyncResult( &pAsyncHandle ); pOverlapped = &pResult->overlapped; } // Create the session return XSessionCreate( nFlags, nUserIdx, nMaxPublicSlots, nMaxPrivateSlots, pNonce, (XSESSION_INFO*)pSessionInfo, pOverlapped, pSessionHandle ); }