251 lines
7.8 KiB
C
251 lines
7.8 KiB
C
// XBLive.h
|
|
//
|
|
|
|
#ifndef XBLIVE_H
|
|
#define XBLIVE_H
|
|
|
|
|
|
#include <xtl.h>
|
|
#include <xonline.h>
|
|
#include "match.h"
|
|
#include "../qcommon/qcommon.h"
|
|
|
|
//constants
|
|
//
|
|
#define ANY_TYPE NULL
|
|
|
|
#define VOICE_ANY 0
|
|
#define VOICE_ON 1
|
|
#define VOICE_OFF 2
|
|
|
|
#define MINIMUM_QOS 2 // warn of lag if join below this
|
|
|
|
|
|
// Friend states stored in clientInfo
|
|
//
|
|
enum FriendState
|
|
{
|
|
FRIEND_NO,
|
|
FRIEND_YES,
|
|
FRIEND_RQST,
|
|
FRIEND_RQST_RCV,
|
|
FRIEND_INV,
|
|
FRIEND_INV_RCV
|
|
};
|
|
|
|
//Possibe menu interactions for friends
|
|
typedef enum
|
|
{
|
|
UI_F_FRIENDREQUESTED,
|
|
UI_F_FRIENDACCEPTED,
|
|
UI_F_FRIENDREMOVE,
|
|
UI_F_FRIENDDECLINE,
|
|
UI_F_FRIENDBLOCK,
|
|
UI_F_FRIENDCANCEL,
|
|
UI_F_GAMEREQUESTED,
|
|
UI_F_GAMEACCEPTED,
|
|
UI_F_GAMEDECLINE,
|
|
UI_F_GAMECANCEL,
|
|
UI_F_GAMEFRIENDREMOVED,
|
|
UI_F_JOINSESSION,
|
|
UI_F_TOGGLEONLINE
|
|
} friendChoices_t;
|
|
|
|
|
|
extern bool logged_on; // flag defined in XBLive.cpp indicating wether we are logged on to XBox Live or not
|
|
extern XONLINE_USER XBLLoggedOnUsers[XONLINE_MAX_LOGON_USERS]; // The users logged on to Live
|
|
extern XONLINETASK_HANDLE logonHandle; // The sooper handle that sometimes needs to be serviced in other files
|
|
|
|
// A few things use the CSession directly to check if we're running a server, for example
|
|
extern CSession session;
|
|
|
|
// different ways we can join a game
|
|
//
|
|
enum JoinType
|
|
{
|
|
VIA_FRIEND_JOIN,
|
|
VIA_FRIEND_INVITE,
|
|
VIA_QUICKMATCH,
|
|
VIA_OPTIMATCH,
|
|
};
|
|
|
|
// XBox Live functionality
|
|
//
|
|
|
|
#ifdef _DEBUG
|
|
const char *getXBLErrorName(HRESULT hr);
|
|
#endif
|
|
|
|
// Stages of logging in. It's a complicated process - this makes it a little easier
|
|
//
|
|
enum XBLoginState
|
|
{
|
|
LOGIN_PASSCODE_CHECK,
|
|
LOGIN_CONNECT,
|
|
LOGIN_USER_ERRORS,
|
|
LOGIN_SERVICE_ERRORS,
|
|
LOGIN_FINISH,
|
|
};
|
|
|
|
bool XBL_PumpLogon( void );
|
|
void XBL_Tick();
|
|
HRESULT XBL_Init();
|
|
bool XBL_Login(XBLoginState loginState);
|
|
void XBL_AbortLogin(void);
|
|
HRESULT XBL_Cleanup();
|
|
HRESULT XBL_RefreshUserList();
|
|
DWORD XBL_GetNumAccounts(bool doNow);
|
|
int XBL_GetSelectedAccountIndex(void);
|
|
void XBL_SetAccountIndex(const int index);
|
|
bool XBL_SetAccountIndexByXuid(const XUID *xuid);
|
|
XONLINE_USER* XBL_GetUserInfo(const int index);
|
|
void XBL_DisplayLobbyMenu();
|
|
|
|
const XNKID *SysLink_GetXNKID(void);
|
|
const XNKEY *SysLink_GetXNKEY(void);
|
|
const XNADDR *Net_GetXNADDR( DWORD *pStatus = NULL );
|
|
bool Net_ConnectionStatus(void);
|
|
|
|
|
|
void Syslink_PacketEvent( msg_t *msg );
|
|
|
|
// Utility to get the current session's XNKID. Works for both server and client,
|
|
// in both Live and system link
|
|
const XNKID *Net_GetXNKID(void);
|
|
bool Net_XboxConnect(const XNKID *pxnkid, const XNKEY *pxnkey, const XNADDR *pxnaddr);
|
|
bool Net_XboxDisconnect(void);
|
|
|
|
// match making functionality
|
|
//
|
|
void XBL_MM_Tick();
|
|
void XBL_MM_Advertise();
|
|
bool XBL_MM_QuickMatch(ULONGLONG GameType); // Optional: X_MATCH_NULL_INTEGER to omit
|
|
// Same arguments as COptiMatchQuery::Query(), except for map, which is sent in as the name
|
|
int XBL_MM_Find_Session(ULONGLONG GameType, // Optional: X_MATCH_NULL_INTEGER to omit
|
|
const char *mapName, // Optional: "any" to omit
|
|
ULONGLONG MinimumPlayers,
|
|
ULONGLONG MaximumPlayers,
|
|
ULONGLONG FriendlyFire, // Optional: X_MATCH_NULL_INTEGER to omit
|
|
ULONGLONG JediMastery, // Optional: X_MATCH_NULL_INTEGER to omit
|
|
ULONGLONG SaberOnly, // Optional: X_MATCH_NULL_INTEGER to omit
|
|
ULONGLONG Dedicated); // Optional: X_MATCH_NULL_INTEGER to omit
|
|
DWORD XBL_MM_RemovePlayer( bool usePrivateSlot );
|
|
DWORD XBL_MM_AddPlayer( bool usePrivateSlot );
|
|
bool XBL_MM_PublicSlotAvailable( void );
|
|
bool XBL_MM_ConnectViaSessionID( const XNKID *sessionID, bool invited );
|
|
void XBL_MM_Shutdown( bool processLogon );
|
|
bool XBL_MM_ThisSessionIsLagging( const XNKID *sessionID );
|
|
bool XBL_MM_IsSessionIDValid( const XNKID *sessionID );
|
|
void XBL_MM_JoinServer( void );
|
|
void XBL_MM_DontJoinLowQOSSever( void );
|
|
void XBL_MM_JoinLowQOSSever( void );
|
|
void XBL_MM_SetJoinType( JoinType );
|
|
bool XBL_MM_CanUsePrivateSlot( void );
|
|
void XBL_MM_SetServerJoinSlot(int);
|
|
|
|
// Now used in the UI as well...
|
|
int mapNameToIndex(const char *mapname);
|
|
const char *mapIndexToLongName(int index);
|
|
extern const int MAP_ARRAY_SIZE;
|
|
|
|
// System Link functions used to communicate with the UI
|
|
int Syslink_GetNumServers( void );
|
|
//const char* Syslink_GetServerName( const int index );
|
|
const char* Syslink_GetServerMap( const int index );
|
|
const char* Syslink_GetServerClients( const int index );
|
|
const char* Syslink_GetServerGametype( const int index );
|
|
int Syslink_GetServerSaberOnly( const int index );
|
|
int Syslink_GetServerDisableForce( const int index );
|
|
void Syslink_SetChosenServerIndex( const int index );
|
|
void Syslink_Listen( bool bListen );
|
|
|
|
// Optimatch functions used to communicate with the UI
|
|
int XBL_MM_GetNumServers( void );
|
|
const char* XBL_MM_GetServerName( const int index );
|
|
const char* XBL_MM_GetServerMap( const int index );
|
|
const char* XBL_MM_GetServerClients( const int index );
|
|
const char* XBL_MM_GetServerGametype( const int index );
|
|
int XBL_MM_GetServerSaberOnly( const int index );
|
|
int XBL_MM_GetServerDisableForce( const int index );
|
|
int XBL_MM_GetServerPing( const int index );
|
|
void XBL_MM_SetChosenServerIndex( const int index );
|
|
void XBL_MM_CancelProbing( void );
|
|
|
|
// System link analog to MM
|
|
bool SysLink_JoinServer( void );
|
|
|
|
// friends functionality
|
|
//
|
|
void XBL_F_Init( void );
|
|
void XBL_F_Tick( void );
|
|
void XBL_F_Cleanup( void );
|
|
void XBL_F_ReleaseFriendsList( void );
|
|
void XBL_F_GenerateFriendsList( void );
|
|
void XBL_F_SetState( DWORD flag, bool set_flag );
|
|
bool XBL_F_GetState( DWORD flag );
|
|
void XBL_F_OnClientLeaveSession( void );
|
|
// Friend functions used to communicate with UI
|
|
int XBL_F_GetNumFriends( void );
|
|
XONLINE_FRIEND* XBL_F_GetChosenFriend( void );
|
|
XONLINE_FRIEND* XBL_F_GetFriendFromName( char* );
|
|
void XBL_F_SetChosenFriendIndex( const int index );
|
|
HRESULT XBL_F_PerformMenuAction( friendChoices_t action );
|
|
void XBL_F_CheckJoinableStatus( bool force );
|
|
|
|
const char* XBL_F_GetFriendName( const int index );
|
|
int XBL_F_GetStatusIcon( const int index );
|
|
const char* XBL_F_GetStatusString( const int index );
|
|
const char* XBL_F_GetStatusString2( const int index );
|
|
int XBL_F_GetVoiceIcon( const int index );
|
|
const char* XBL_F_GetVoiceString( const int index );
|
|
|
|
FriendState XBL_F_GetFriendStatus( const XUID* xuid );
|
|
void XBL_F_AddFriend( const XUID *pXuid );
|
|
void XBL_F_RemoveFriend( const XUID *pXuid );
|
|
void XBL_F_GetTitleString( const DWORD titleID, char* titleString );
|
|
|
|
bool XBL_F_FriendNotice( void );
|
|
bool XBL_F_GameNotice( void );
|
|
|
|
// player list functionality
|
|
//
|
|
void XBL_PL_Tick(void);
|
|
void XBL_PL_OnClientLeaveSession();
|
|
void XBL_PL_RemoveActivePeer(XUID* xuid, int index);
|
|
// Should include XBoxCommon.h at the top, or put all of this in one file, but whatever...
|
|
struct XBPlayerInfo;
|
|
void XBL_PL_CheckHistoryList(XBPlayerInfo *newInfo);
|
|
void XBL_PL_UpdatePlayerName( int index, const char *newName );
|
|
|
|
// Player functions used to communicate with UI
|
|
void XBL_PL_Init( void );
|
|
void XBL_PL_Cleanup( void );
|
|
int XBL_PL_GetNumPlayers( void );
|
|
bool XBL_PL_SetCurrentInfo( void );
|
|
void XBL_PL_SetPlayerIndex( const int index );
|
|
const char* XBL_PL_GetPlayerName( const int index );
|
|
int XBL_PL_GetVoiceIcon( const int index );
|
|
int XBL_PL_GetStatusIcon( const int index );
|
|
|
|
// Actions taken by the user via the playerlist popup window:
|
|
void XBL_PL_ToggleMute( void );
|
|
void XBL_PL_SendFeedBack( void );
|
|
void XBL_PL_KickPlayer( void );
|
|
void XBL_PL_MakeFriend( void );
|
|
void XBL_PL_CancelFriend( void );
|
|
|
|
void XBL_CheckServer();
|
|
|
|
// handy little buggers
|
|
//
|
|
void charToWchar( WCHAR* wc, char* c );
|
|
void wcharToChar( char* c, WCHAR* wc );
|
|
|
|
// stores cross title info from Single Player
|
|
//
|
|
extern BYTE CrossTitle_InviteType;
|
|
extern XNKID CrossTitle_TargetSessionID;
|
|
extern char CrossTitle_FriendsGamerTag[XONLINE_GAMERTAG_SIZE];
|
|
|
|
#endif // XBLIVE_H
|