Пример #1
0
//--------------------------------------------------------------------------------------
// 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;
}
Пример #2
0
//-----------------------------------------------------------------------------
//	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 );
}