//-------------------------------------------------------------------------------------- // 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; }
//----------------------------------------------------------------------------- // 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 ); }