예제 #1
0
//--------------------------------------------------------------------------------------
// Name: LeaveSession()
// Desc: Remove local users from the session preparatory to deleting it
//--------------------------------------------------------------------------------------
GS_BOOL SessionSrv::LeaveSession()
{
#if defined(_XBOX) || defined(_XENON)
    // Don't leave the session if it was never created
    if( m_hSession == INVALID_HANDLE_VALUE )
    {
        return FALSE;
    }

    // End the session
	CTaskID id = 0;
    GS_DWORD ret = XSessionLeaveRemote(
        m_hSession,
		SignIn::GetUserNum(),
		SignIn::GetXUIDArray(),
        Master::G()->GetTaskMgr()->AddTask(EGSTaskType_SessionLeave,this,&id) );
	Master::G()->GetTaskMgr()->StartTask(id,ret);

    if( ret != ERROR_IO_PENDING )
    {
        Master::G()->Log( "XSessionLeaveRemote failed with error %d", ret );
		return FALSE;
    }
#endif
	return TRUE;
}
예제 #2
0
//-----------------------------------------------------------------------------
//	Purpose: Remove remote users from a session
//-----------------------------------------------------------------------------
int	CXboxSystem::SessionLeaveRemote( XboxHandle_t hSession, uint nUserCount, const XUID *pXuids, bool bAsync, AsyncHandle_t *pAsyncHandle )
{
	XOVERLAPPED *pOverlapped = NULL;

	if ( bAsync )
	{
		AsyncResult_t *pResult = InitializeAsyncResult( &pAsyncHandle );
		pOverlapped = &pResult->overlapped;
	}

	return XSessionLeaveRemote( hSession, nUserCount, pXuids, pOverlapped );
}