Initial commit.
This commit is contained in:
202
tools/jawa/jawa.cpp
Normal file
202
tools/jawa/jawa.cpp
Normal file
@@ -0,0 +1,202 @@
|
||||
// jawa.cpp : Defines the entry point for the application.
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
#ifndef _DEBUG
|
||||
#error Jawa should only be used in debug mode!
|
||||
#endif
|
||||
|
||||
// Our (many) game sessions
|
||||
#define MAX_SESSIONS 10
|
||||
CSession sessions[MAX_SESSIONS];
|
||||
|
||||
// Handle the logon task
|
||||
XONLINETASK_HANDLE g_hLogonTask;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: Print()
|
||||
//-----------------------------------------------------------------------------
|
||||
VOID __cdecl Print( const WCHAR* strFormat, ... )
|
||||
{
|
||||
const int MAX_OUTPUT_STR = 80;
|
||||
WCHAR strBuffer[ MAX_OUTPUT_STR ];
|
||||
va_list pArglist;
|
||||
|
||||
va_start( pArglist, strFormat );
|
||||
INT iChars = wvsprintfW( strBuffer, strFormat, pArglist );
|
||||
assert( iChars < MAX_OUTPUT_STR );
|
||||
OutputDebugStringW( L"\n*** SimpleAuth: " );
|
||||
OutputDebugStringW( strBuffer );
|
||||
OutputDebugStringW( L"\n\n" );
|
||||
(VOID)iChars; // avoid compiler warning
|
||||
va_end( pArglist );
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: SignIn()
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL SignIn()
|
||||
{
|
||||
XONLINE_USER StoredUsers[ XONLINE_MAX_STORED_ONLINE_USERS ];
|
||||
DWORD dwNumStoredUsers;
|
||||
HRESULT hr = XOnlineGetUsers( StoredUsers, &dwNumStoredUsers );
|
||||
assert( SUCCEEDED( hr ) );
|
||||
assert( dwNumStoredUsers );
|
||||
|
||||
XONLINE_USER LogonUsers[ XONLINE_MAX_LOGON_USERS ] = { 0 }; // Initially zeroed
|
||||
LogonUsers[0] = StoredUsers[0];
|
||||
const DWORD Services[] = { XONLINE_MATCHMAKING_SERVICE };
|
||||
const DWORD dwNumServices = sizeof( Services ) / sizeof( Services[0] );
|
||||
|
||||
hr = XOnlineLogon( LogonUsers, Services, dwNumServices, NULL, &g_hLogonTask );
|
||||
assert( hr == S_OK );
|
||||
|
||||
// 1. Check for system authentication errors.
|
||||
do { hr = XOnlineTaskContinue( g_hLogonTask ); } while ( hr == XONLINETASK_S_RUNNING );
|
||||
assert( hr == XONLINE_S_LOGON_CONNECTION_ESTABLISHED );
|
||||
|
||||
// 2. Check for user authentication errors.
|
||||
PXONLINE_USER Users = XOnlineGetLogonUsers();
|
||||
assert( Users );
|
||||
|
||||
for( DWORD i = 0; i < XONLINE_MAX_LOGON_USERS; ++i )
|
||||
{
|
||||
if( Users[i].xuid.qwUserID != 0 ) // A valid user
|
||||
assert( Users[i].hr == S_OK || Users[i].hr == XONLINE_S_LOGON_USER_HAS_MESSAGE );
|
||||
}
|
||||
|
||||
// 3. Finally check the requested services
|
||||
for( DWORD i = 0; i < dwNumServices; ++i )
|
||||
{
|
||||
hr = XOnlineGetServiceInfo( Services[i], NULL );
|
||||
assert( hr == S_OK );
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: main()
|
||||
// Desc: The application's entry point
|
||||
//-----------------------------------------------------------------------------
|
||||
void __cdecl main()
|
||||
{
|
||||
XInitDevices( 0, NULL );
|
||||
while ( XGetDeviceEnumerationStatus() == XDEVICE_ENUMERATION_BUSY ) {}
|
||||
|
||||
// We need MANY keys registered!
|
||||
XNetStartupParams xnsp;
|
||||
ZeroMemory( &xnsp, sizeof(xnsp) );
|
||||
xnsp.cfgSizeOfStruct = sizeof(xnsp);
|
||||
xnsp.cfgKeyRegMax = 255; // 4
|
||||
xnsp.cfgSecRegMax = 255; // 32
|
||||
XNetStartup( &xnsp );
|
||||
|
||||
HRESULT hr = XOnlineStartup( NULL );
|
||||
assert( SUCCEEDED( hr ) );
|
||||
|
||||
// Need to log in first.
|
||||
if( !SignIn() )
|
||||
return;
|
||||
|
||||
char sessionName[16] = { 0 };
|
||||
{
|
||||
// Always generate worst case display
|
||||
CSession *sess = &sessions[0];
|
||||
sess->PrivateFilled = 0;
|
||||
sess->PrivateOpen = 0;
|
||||
sess->PublicFilled = 5;
|
||||
sess->PublicOpen = 3;
|
||||
sess->TotalPlayers = 5;
|
||||
|
||||
sess->GameType = 4; // PowerDuel
|
||||
sess->CurrentMap = 8; // Imperial Control Room
|
||||
|
||||
strcpy( sessionName, "WWWWWWWWWWWWWWQ" );
|
||||
WCHAR wSessionName[16];
|
||||
wsprintfW( wSessionName, L"%hs", sessionName );
|
||||
sess->SetSessionName( wSessionName );
|
||||
|
||||
sess->FriendlyFire = 0;
|
||||
sess->SaberOnly = 0;
|
||||
sess->JediMastery = 0;
|
||||
sess->Dedicated = 0;
|
||||
|
||||
HRESULT hr = sess->Create();
|
||||
if (hr != S_OK)
|
||||
{
|
||||
OutputDebugString( "Session creation failed" );
|
||||
}
|
||||
|
||||
do
|
||||
{
|
||||
hr = XOnlineTaskContinue( g_hLogonTask );
|
||||
if ( FAILED( hr ) )
|
||||
{
|
||||
OutputDebugString( "Logon task failed" );
|
||||
}
|
||||
hr = sess->Process();
|
||||
} while ( sess->IsCreating() );
|
||||
}
|
||||
for( int i = 1; i < MAX_SESSIONS; ++i )
|
||||
{
|
||||
CSession *sess = &sessions[i];
|
||||
int totalSlots = (rand() % 5) + 4; // 4 - 8
|
||||
int publicSlots = (rand() % totalSlots); // 0 - (total-1)
|
||||
int privateSlots = totalSlots - publicSlots; // 1 - total
|
||||
int privateTaken = (rand() % privateSlots) + 1; // 1 - private
|
||||
int publicTaken = (rand() % (publicSlots+1)); // 0 - public
|
||||
sess->PrivateFilled = 1; //privateTaken;
|
||||
sess->PrivateOpen = 2; //privateSlots - privateTaken;
|
||||
sess->PublicFilled = 3; //publicTaken;
|
||||
sess->PublicOpen = 4; //publicSlots - publicTaken;
|
||||
sess->TotalPlayers = 4; //privateTaken + publicTaken;
|
||||
|
||||
sess->GameType = rand() % 10;
|
||||
sess->CurrentMap = rand() % 23;
|
||||
|
||||
XNetRandom( (BYTE *)&sessionName[0], 10 );
|
||||
for( int j = 0; j < 10; ++j )
|
||||
sessionName[j] = (((unsigned char)sessionName[j]) % 26) + 'A';
|
||||
WCHAR wSessionName[11];
|
||||
wsprintfW( wSessionName, L"%hs", sessionName );
|
||||
wSessionName[10] = 0;
|
||||
sess->SetSessionName( wSessionName );
|
||||
|
||||
sess->FriendlyFire = rand() % 2;
|
||||
sess->SaberOnly = rand() % 2;
|
||||
sess->JediMastery = rand() % 7;
|
||||
sess->Dedicated = rand() % 2;
|
||||
|
||||
HRESULT hr = sess->Create();
|
||||
if (hr != S_OK)
|
||||
{
|
||||
OutputDebugString( "Session creation failed" );
|
||||
}
|
||||
|
||||
do
|
||||
{
|
||||
hr = XOnlineTaskContinue( g_hLogonTask );
|
||||
if ( FAILED( hr ) )
|
||||
{
|
||||
OutputDebugString( "Logon task failed" );
|
||||
}
|
||||
hr = sess->Process();
|
||||
} while ( sess->IsCreating() );
|
||||
}
|
||||
|
||||
while( TRUE )
|
||||
{
|
||||
// Service things
|
||||
hr = XOnlineTaskContinue( g_hLogonTask );
|
||||
assert( SUCCEEDED( hr ) );
|
||||
for( int j = 0; j < MAX_SESSIONS; ++j )
|
||||
{
|
||||
hr = sessions[j].Process();
|
||||
assert( SUCCEEDED( hr ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user