|
|
//===== Copyright � 1996-2005, Valve Corporation, All rights reserved. ======//
//
// Purpose: Interface to Xbox 360 system functions. Helps deal with the async system and Live
// functions by either providing a handle for the caller to check results or handling
// automatic cleanup of the async data when the caller doesn't care about the results.
//
//===========================================================================//
#ifndef IXBOXSYSTEM_H
#define IXBOXSYSTEM_H
#ifdef _WIN32
#pragma once
#endif
#if !defined( _X360 )
#include "xbox/xboxstubs.h"
#endif
typedef void* AsyncHandle_t; typedef void* XboxHandle_t;
#if !defined( _PS3 ) && defined( POSIX )
struct XOVERLAPPED { };
#endif
#ifdef POSIX
#define ERROR_SUCCESS 0
#define ERROR_IO_PENDING 1
#define ERROR_IO_INCOMPLETE 2
#define ERROR_INSUFFICIENT_BUFFER 3
#define ERROR_NO_SUCH_USER 4
#define ERROR_NO_SUCH_PRIVILEGE 5
#define ERROR_ACCESS_DISABLED_BY_POLICY 6
#endif
//-----------------------------------------------------------------------------
// Xbox system interface
//-----------------------------------------------------------------------------
abstract_class IXboxSystem { public: virtual AsyncHandle_t CreateAsyncHandle( void ) = 0; virtual void ReleaseAsyncHandle( AsyncHandle_t handle ) = 0; virtual int GetOverlappedResult( AsyncHandle_t handle, uint *pResultCode, bool bWait ) = 0; virtual void CancelOverlappedOperation( AsyncHandle_t handle ) = 0;
// Save/Load
virtual bool GameHasSavegames( void ) = 0; virtual void GetModSaveContainerNames( const char *pchModName, const wchar_t **ppchDisplayName, const char **ppchName ) = 0; virtual uint GetContainerRemainingSpace( DWORD nStorageID ) = 0; virtual bool DeviceCapacityAdequate( int iController, DWORD nStorageID, const char *pModName ) = 0; virtual DWORD DiscoverUserData( DWORD nUserID, const char *pModName ) = 0;
virtual void FinishContainerWrites( int iController ) = 0; virtual uint GetContainerOpenResult( int iController ) = 0; virtual uint OpenContainers( int iController ) = 0; virtual void CloseContainers( int iController ) = 0;
virtual void FinishAllContainerWrites( void ) = 0; virtual void CloseAllContainers( void ) = 0;
// XUI
virtual bool ShowDeviceSelector( int iController, bool bForce, uint *pStorageID, AsyncHandle_t *pHandle ) = 0; virtual void ShowSigninUI( uint nPanes, uint nFlags ) = 0;
// Rich Presence and Matchmaking
virtual int UserSetContext( uint nUserIdx, XUSER_CONTEXT const &xc, bool bAsync = true, AsyncHandle_t *pHandle = NULL ) = 0; virtual int UserSetProperty( uint nUserIndex, XUSER_PROPERTY const &xp, bool bAsync = true, AsyncHandle_t *pHandle = NULL ) = 0; virtual int UserGetContext( uint nUserIdx, uint nContextID, uint &nContextValue) = 0; virtual int UserGetPropertyInt( uint nUserIndex, uint nPropertyId, uint &nPropertyValue) = 0;
// Matchmaking
virtual int CreateSession( uint nFlags, uint nUserIdx, uint nMaxPublicSlots, uint nMaxPrivateSlots, uint64 *pNonce, void *pSessionInfo, XboxHandle_t *pSessionHandle, bool bAsync, AsyncHandle_t *pAsyncHandle = NULL ) = 0; virtual uint DeleteSession( XboxHandle_t hSession, bool bAsync, AsyncHandle_t *pAsyncHandle = NULL ) = 0; virtual uint SessionSearch( uint nProcedureIndex, uint nUserIndex, uint nNumResults, uint nNumUsers, uint nNumProperties, uint nNumContexts, XUSER_PROPERTY *pSearchProperties, XUSER_CONTEXT *pSearchContexts, uint *pcbResultsBuffer, XSESSION_SEARCHRESULT_HEADER *pSearchResults, bool bAsync, AsyncHandle_t *pAsyncHandle = NULL ) = 0; virtual uint SessionStart( XboxHandle_t hSession, uint nFlags, bool bAsync, AsyncHandle_t *pAsyncHandle = NULL ) = 0; virtual uint SessionEnd( XboxHandle_t hSession, bool bAsync, AsyncHandle_t *pAsyncHandle = NULL ) = 0; virtual int SessionJoinLocal( XboxHandle_t hSession, uint nUserCount, const uint *pUserIndexes, const bool *pPrivateSlots, bool bAsync, AsyncHandle_t *pAsyncHandle = NULL ) = 0; virtual int SessionJoinRemote( XboxHandle_t hSession, uint nUserCount, const XUID *pXuids, const bool *pPrivateSlots, bool bAsync, AsyncHandle_t *pAsyncHandle = NULL ) = 0; virtual int SessionLeaveLocal( XboxHandle_t hSession, uint nUserCount, const uint *pUserIndexes, bool bAsync, AsyncHandle_t *pAsyncHandle = NULL ) = 0; virtual int SessionLeaveRemote( XboxHandle_t hSession, uint nUserCount, const XUID *pXuids, bool bAsync, AsyncHandle_t *pAsyncHandle = NULL ) = 0; virtual int SessionMigrate( XboxHandle_t hSession, uint nUserIndex, void *pSessionInfo, bool bAsync, AsyncHandle_t *pAsyncHandle = NULL ) = 0; virtual int SessionArbitrationRegister( XboxHandle_t hSession, uint nFlags, uint64 nonce, uint *pBytes, void *pBuffer, bool bAsync, AsyncHandle_t *pAsyncHandle = NULL ) = 0;
// Friends
virtual int EnumerateFriends( uint userIndex, void **pBuffer, bool bAsync, AsyncHandle_t *pAsyncHandle = NULL ) = 0;
// Stats
virtual int WriteStats( XboxHandle_t hSession, XUID xuid, uint nViews, void* pViews, bool bAsync, AsyncHandle_t *pAsyncHandle = NULL ) = 0; virtual int FlushStats( XboxHandle_t hSession, bool bAsync, AsyncHandle_t *pAsyncHandle = NULL ) = 0; virtual int EnumerateStatsByRank( uint nStartingRank, uint nNumRows, uint nNumSpecs, void *pSpecs, void **ppResults, bool bAsync, AsyncHandle_t *pAsyncHandle = NULL ) = 0; virtual int EnumerateStatsByXuid( XUID nUserId, uint nNumRows, uint nNumSpecs, void *pSpecs, void **ppResults, bool bAsync, AsyncHandle_t *pAsyncHandle = NULL ) = 0;
// Achievements
virtual int EnumerateAchievements( uint nUserIdx, uint64 xuid, uint nStartingIdx, uint nCount, void *pBuffer, uint nBufferBytes, bool bAsync = true, AsyncHandle_t *pAsyncHandle = NULL ) = 0; virtual int AwardAchievement( uint nUserIdx, uint nAchievementId, AsyncHandle_t *ppOverlappedResult ) = 0; virtual int AwardAvatarAsset( uint nUserIdx, uint nAwardId, AsyncHandle_t *ppOverlappedResult ) = 0;
// Arcade titles
virtual void ShowUnlockFullGameUI( void ) = 0; virtual bool UpdateArcadeTitleUnlockStatus( void ) = 0; virtual bool IsArcadeTitleUnlocked( void ) = 0; virtual float GetArcadeRemainingTrialTime( int nSlot = 0 ) = 0;
//
// Overlapped
//
virtual int Io_HasOverlappedIoCompleted( XOVERLAPPED *pOverlapped ) = 0;
//
// XNet
//
virtual int NetRandom( byte *pb, unsigned numBytes ) = 0; virtual DWORD NetGetTitleXnAddr( XNADDR *pxna ) = 0; virtual int NetXnAddrToMachineId( const XNADDR *pxnaddr, uint64 *pqwMachineId ) = 0; virtual int NetInAddrToXnAddr( const IN_ADDR ina, XNADDR *pxna, XNKID *pxnkid ) = 0; virtual int NetXnAddrToInAddr( const XNADDR *pxna, const XNKID *pxnkid, IN_ADDR *pina ) = 0;
//
// User
//
virtual XUSER_SIGNIN_STATE UserGetSigninState( int iCtrlr ) = 0; };
#define XBOXSYSTEM_INTERFACE_VERSION "XboxSystemInterface002"
//
// XOnline.lib abstraction
//
#ifdef _X360
abstract_class IXOnline { public: virtual void RunFrame() = 0;
public: virtual DWORD XCancelOverlapped( PXOVERLAPPED pOverlapped ) = 0;
public: virtual DWORD XFriendsCreateEnumerator( DWORD dwUserIndex, DWORD dwStartingIndex, DWORD dwFriendsToReturn, DWORD *pcbBuffer, HANDLE *ph ) = 0;
virtual INT XNetQosRelease( XNQOS * pxnqos ) = 0;
virtual INT XNetQosServiceLookup( DWORD dwFlags, WSAEVENT hEvent, XNQOS * * ppxnqos ) = 0;
virtual DWORD XInviteGetAcceptedInfo( DWORD dwUserIndex, XINVITE_INFO *pInfo ) = 0;
virtual DWORD XInviteSend( DWORD dwUserIndex, DWORD cInvitees, const XUID *pXuidInvitees, const WCHAR *pszText, XOVERLAPPED *pXOverlapped ) = 0;
virtual DWORD XTitleServerCreateEnumerator( LPCSTR pszServerInfo, DWORD cItem, PDWORD pcbBuffer, PHANDLE phEnum ) = 0;
virtual INT XNetQosLookup( UINT cxna, const XNADDR * apxna[], const XNKID * apxnkid[], const XNKEY * apxnkey[], UINT cina, const IN_ADDR aina[], const DWORD adwServiceId[], UINT cProbes, DWORD dwBitsPerSec, DWORD dwFlags, WSAEVENT hEvent, XNQOS ** ppxnqos ) = 0;
virtual INT XNetUnregisterInAddr( const IN_ADDR ina ) = 0;
virtual INT XNetServerToInAddr( const IN_ADDR ina, DWORD dwServiceId, IN_ADDR *pina ) = 0;
virtual DWORD XSessionSearchEx( DWORD dwProcedureIndex, DWORD dwUserIndex, DWORD dwNumResults, DWORD dwNumUsers, WORD wNumProperties, WORD wNumContexts, PXUSER_PROPERTY pSearchProperties, PXUSER_CONTEXT pSearchContexts, DWORD *pcbResultsBuffer, PXSESSION_SEARCHRESULT_HEADER pSearchResults, PXOVERLAPPED pXOverlapped ) = 0;
virtual DWORD XSessionGetDetails( HANDLE hSession, DWORD *pcbResultsBuffer, XSESSION_LOCAL_DETAILS *pSessionDetails, PXOVERLAPPED pXOverlapped ) = 0;
virtual INT XNetQosListen( const XNKID * pxnkid, const BYTE * pb, UINT cb, DWORD dwBitsPerSec, DWORD dwFlags ) = 0;
virtual DWORD XSessionModify( HANDLE hSession, DWORD dwFlags, DWORD dwMaxPublicSlots, DWORD dwMaxPrivateSlots, PXOVERLAPPED pXOverlapped ) = 0;
virtual DWORD XNetGetTitleXnAddr( XNADDR *pxna ) = 0;
virtual INT XNetRegisterKey( const XNKID *pxnkid, const XNKEY *pxnkey ) = 0;
virtual INT XNetUnregisterKey( const XNKID *pxnkid ) = 0;
virtual INT XNetCreateKey( XNKID *pxnkid, XNKEY *pxnkey ) = 0;
virtual INT XNetReplaceKey( const XNKID *pxnkidUnregister, const XNKID * pxnkidReplace ) = 0;
virtual DWORD XSessionDelete( HANDLE hSession, PXOVERLAPPED pXOverlapped ) = 0;
virtual DWORD XSessionCreate( DWORD dwFlags, DWORD dwUserIndex, DWORD dwMaxPublicSlots, DWORD dwMaxPrivateSlots, ULONGLONG *pqwSessionNonce, PXSESSION_INFO pSessionInfo, PXOVERLAPPED pXOverlapped, HANDLE *ph ) = 0;
virtual DWORD XSessionSearchByID( XNKID sessionID, DWORD dwUserIndex, DWORD *pcbResultsBuffer, PXSESSION_SEARCHRESULT_HEADER pSearchResults, PXOVERLAPPED pXOverlapped ) = 0;
virtual DWORD XSessionMigrateHost( HANDLE hSession, DWORD dwUserIndex, XSESSION_INFO *pSessionInfo, PXOVERLAPPED pXOverlapped ) = 0;
virtual DWORD XSessionJoinRemote( HANDLE hSession, DWORD dwXuidCount, const XUID *pXuids, const BOOL *pfPrivateSlots, PXOVERLAPPED pXOverlapped ) = 0;
virtual DWORD XSessionJoinLocal( HANDLE hSession, DWORD dwUserCount, const DWORD *pdwUserIndexes, const BOOL *pfPrivateSlots, PXOVERLAPPED pXOverlapped ) = 0;
virtual DWORD XSessionLeaveRemote( HANDLE hSession, DWORD dwXuidCount, const XUID *pXuids, PXOVERLAPPED pXOverlapped ) = 0;
virtual DWORD XSessionLeaveLocal( HANDLE hSession, DWORD dwUserCount, const DWORD *pdwUserIndexes, PXOVERLAPPED pXOverlapped ) = 0;
virtual DWORD XSessionEnd( HANDLE hSession, PXOVERLAPPED pXOverlapped ) = 0;
virtual DWORD XSessionStart( HANDLE hSession, DWORD dwFlags, PXOVERLAPPED pXOverlapped ) = 0;
virtual DWORD XNetGetConnectStatus( const IN_ADDR ina ) = 0;
virtual INT XNetInAddrToXnAddr( const IN_ADDR ina, XNADDR *pxna, XNKID *pxnkid ) = 0;
virtual INT XNetXnAddrToInAddr( const XNADDR *pxna, const XNKID *pxnkid, IN_ADDR *pina ) = 0;
virtual INT XNetConnect( const IN_ADDR ina ) = 0;
virtual DWORD XUserReadProfileSettingsByXuid( DWORD dwTitleId, DWORD dwUserIndexRequester, DWORD dwNumFor, const XUID *pxuidFor, DWORD dwNumSettingIds, const DWORD *pdwSettingIds, DWORD *pcbResults, PXUSER_READ_PROFILE_SETTING_RESULT pResults, PXOVERLAPPED pXOverlapped ) = 0;
virtual DWORD XUserReadProfileSettings( DWORD dwTitleId, DWORD dwUserIndex, DWORD dwNumSettingIds, const DWORD *pdwSettingIds, DWORD *pcbResults, PXUSER_READ_PROFILE_SETTING_RESULT pResults, PXOVERLAPPED pXOverlapped ) = 0;
virtual DWORD XUserWriteProfileSettings( DWORD dwUserIndex, DWORD dwNumSettings, const PXUSER_PROFILE_SETTING pSettings, PXOVERLAPPED pXOverlapped ) = 0;
virtual DWORD XUserMuteListQuery( DWORD dwUserIndex, XUID XuidRemoteTalker, BOOL *pfOnMuteList ) = 0;
virtual DWORD XSessionWriteStats( HANDLE hSession, XUID xuid, DWORD dwNumViews, const XSESSION_VIEW_PROPERTIES *pViews, XOVERLAPPED *pXOverlapped ) = 0;
virtual DWORD XSessionFlushStats( HANDLE hSession, XOVERLAPPED *pXOverlapped ) = 0;
virtual DWORD XShowMarketplaceDownloadItemsUI( DWORD dwUserIndex, DWORD dwEntryPoint, CONST ULONGLONG *pOfferIDs, DWORD dwOfferIdCount, HRESULT *phrResult, PXOVERLAPPED pOverlapped ) = 0;
virtual DWORD XMarketplaceGetDownloadStatus( DWORD dwUserIndex, ULONGLONG qwOfferID, LPDWORD pdwResult ) = 0;
virtual DWORD XShowMarketplaceUI( DWORD dwUserIndex, DWORD dwEntryPoint, ULONGLONG qwOfferID, DWORD dwContentCategories ) = 0;
virtual DWORD XShowGameInviteUI( DWORD dwUserIndex, CONST XUID *pXuidRecipients, DWORD cRecipients, LPCWSTR wszUnused ) = 0;
virtual HRESULT XShowPartyUI( DWORD dwUserIndex ) = 0;
virtual DWORD XPartySendGameInvites( DWORD dwUserIndex, XOVERLAPPED *pOverlapped ) = 0;
virtual HRESULT XShowCommunitySessionsUI( DWORD dwUserIndex, DWORD dwSocialSessionsFlags ) = 0;
virtual INT XNetXnAddrToMachineId( const XNADDR *pxnaddr, ULONGLONG *pqwMachineId ) = 0;
virtual DWORD XNetGetEthernetLinkStatus() = 0;
virtual XONLINE_NAT_TYPE XOnlineGetNatType() = 0;
};
#define XONLINE_INTERFACE_VERSION "XOnlineInterface001"
#endif
#endif // IXBOXSYSTEM_H
|