예제 #1
0
파일: DDom.cpp 프로젝트: careysky/FlyFF
void CDDom::Process( void )
{
	if( GetRunTime() == RUN_CLOSED )
		return;

	if( GetRunTime() == RUN_COOLDOWN )
	{
		if( m_dwRoundTime != 0 && m_dwRoundTime < GetTickCount() )
		{
			m_dwRoundTime = 0;
			StartRound();
		}
	}
	else if( GetRunTime() == RUN_FIGHT )
	{
		if( GetTime() > 0 )
		{
			DecreaseTime();
		}
		else
		{
			const DDOM_TEAM tA = m_Base[BASE_A].GetTouchTeam();
			const DDOM_TEAM tB = m_Base[BASE_B].GetTouchTeam();
			if( tA != MAX_TEAM && tB != MAX_TEAM )
			{
				if( tA == tB )
				{
					Capped( tA ); //ATTENTION
					ResetCapTeam(); 
				} 
			}	
		}
	}
}
예제 #2
0
파일: DDom.cpp 프로젝트: careysky/FlyFF
void CDDom::Kill( CUser* pAttack, CUser* pTarget )
{
	if( GetRunTime() != RUN_FIGHT )
		return;
	if( IsInvalidObj( pAttack ) || IsInvalidObj( pTarget ) )
		return;
	if( IsValidTeam( pAttack->m_ddomTeam, pTarget->m_ddomTeam ) )
	{
		CDDomTeam* pDomAttack = &m_DomTeam[ pAttack->m_ddomTeam ];
		CDDomTeam* pDomDefend = &m_DomTeam[ pTarget->m_ddomTeam ];
		if( pDomAttack == NULL || pDomDefend == NULL )
			return;

		//Increase( pAttack->m_ddomTeam, INC_KILL );
		//Increase( pTarget->m_ddomTeam, INC_DEATH );

		pDomAttack->Increase( pAttack->m_idPlayer, INC_KILL );
		pDomDefend->Increase( pTarget->m_idPlayer, INC_DEATH );

		CString strKill;
		strKill.Format( "[%s] %s has killed [%s] %s", GetName( pAttack->m_ddomTeam ), pAttack->GetName(), 
			GetName( pTarget->m_ddomTeam ), pTarget->GetName() );
		Send( strKill, FONT_MIDMED, DoubleDom::Color::nGoldCol );
	}
}
예제 #3
0
파일: DDom.cpp 프로젝트: careysky/FlyFF
void CDDom::Capped( DDOM_TEAM team )
{
	if( GetRunTime() == RUN_CLOSED )
		return;

	m_DomTeam[team].Increase( m_idCapUser, INC_CAPTURE );
	m_idCapUser = 0;

	if( m_DomTeam[team].GetCaptures() >= DoubleDom::Queue::nRounds )
	{
		End();
		return;
	} 

/*#ifdef __LEA_MONDE
	g_UserMng.AddDominationWireframe();
#endif*/

	CString strCaptured;
	strCaptured.Format( "Team %s has increased the score, new round in 9 seconds", GetName( team ) );
	Send( strCaptured );
	SetRunTime( RUN_COOLDOWN );
	m_dwRoundTime = GetTickCount() + 9000;
	m_dwRound++;
}
예제 #4
0
파일: DDom.cpp 프로젝트: careysky/FlyFF
BOOL CDDom::Kick( CUser* pUser )
{
	if( IsValidObj( pUser ) == FALSE )
		return FALSE;

	vector<u_long>::iterator it = find( m_User.begin(), m_User.end(), pUser->m_idPlayer );
	if( it != m_User.end() )
	{
		m_User.erase( it );
	}

	if( m_DomTeam[TEAM_A].GetAmount() == 0 && m_DomTeam[TEAM_B].GetAmount() == 0 )
		return FALSE;
	if( m_DomTeam[TEAM_A].Remove( pUser ) == FALSE )
	{
		if( m_DomTeam[TEAM_B].Remove( pUser ) == FALSE )
		{
			return FALSE;
		}
	} 

	if( GetRunTime() != RUN_CLOSED )
	{
		if( m_DomTeam[TEAM_A].GetAmount() == 0 || m_DomTeam[TEAM_B].GetAmount() == 0 )
			End();
	} 
	
	return TRUE;
}
예제 #5
0
파일: DDom.cpp 프로젝트: careysky/FlyFF
BOOL CDDom::Start( vector<u_long>& playerList  )
{
	if( GetRunTime() != RUN_CLOSED )
		return FALSE;
	SetRunTime( RUN_FIGHT );

	g_DPCoreClient.SendSystem("Double Domination has started!");

#ifdef __NEW_FONT
	Send( "Double Domination Start", FONT_MIDMED, DoubleDom::Color::nBlueCol );
	//g_UserMng.AddTextFontType(  );
#endif

	m_splitSize = playerList.size() / 2;
	for( vector<u_long>::iterator it = playerList.begin(); it != playerList.end(); ++it )
	{
		CUser*	pUser	= static_cast<CUser*>( prj.GetUserByID( (*it ) ) );
		if( IsValidObj( pUser ) )
		{
			Join( pUser );
		}
	}
	m_splitSize = 0;
	return TRUE;
}
예제 #6
0
파일: DDom.cpp 프로젝트: careysky/FlyFF
void CDDom::Touch( CUser* pUser, DDOM_BASE base )
{
	if( IsValidObj( pUser ) == FALSE )
		return;
	if( IsValidBase( base ) == FALSE )
		return;
	if( GetRunTime() != RUN_FIGHT )
		return; 
	if( pUser->IsDie() )
		return; 

	const DDOM_TEAM teamUser = pUser->m_ddomTeam;
	if( IsValidTeamOne( teamUser ) )
	{
		DDOM_TEAM team = m_Base[base].GetTouchTeam();
		if( team != MAX_TEAM )
		{
			if( team == pUser->m_ddomTeam )
			{
				pUser->AddTextD3D( "This base is already captured by your team.", 0xFFFF0000 );
				return;
			}
		}

		CString strTouch;
		strTouch.Format( "[%s] %s captured %s base", GetName( teamUser ), pUser->GetName(), GetBaseName( base ) );
		//SendBaseTouch( strTouch, base, pUser->m_ddomTeam ); //ATTENTION
		Send( strTouch );

		m_Base[base].SetTouchedBy( teamUser );
		const DDOM_BASE opBase = GetOponentBase( base );

		
		m_idCapUser = pUser->m_idPlayer;
		BOOL bTouchTime = FALSE;
		DDOM_TEAM opTeam = m_Base[opBase].GetTouchTeam(); 
		if( opTeam == pUser->m_ddomTeam )
		{
			bTouchTime = TRUE;
			CString strFontText; 
			strFontText.Format( "Both bases have been dominated by %s team. Countdown start", GetName( teamUser ) );
			Send( strFontText, FONT_MIDMED, DoubleDom::Color::nBlueCol );
			SetTime();
		}
		else
		{
			if( GetTime() == 1 || GetTime() == 2 )
			{
				ResetTime();
				Send( "Last second save", FONT_MIDMED, DoubleDom::Color::nBlueCol );
			}
		}
		m_DomTeam[ teamUser ].Increase( pUser->m_idPlayer, INC_TOUCH );
		SendTouch( pUser->m_ddomTeam, base, bTouchTime ); 
	}
}
예제 #7
0
파일: DDom.cpp 프로젝트: careysky/FlyFF
void CDDom::Send( CString strMessage )
{
	if( GetRunTime() == RUN_CLOSED )
		return;

	for( vector<u_long>::iterator it = m_User.begin(); it != m_User.end(); ++it )
	{
		CUser*	pUser		= static_cast<CUser*>( prj.GetUserByID( (*it ) ) );
		if( IsValidObj( pUser ) )
		{
			pUser->AddTextD3D( strMessage, DoubleDom::Color::nBlueCol );
		}
	}
}
예제 #8
0
파일: DDom.cpp 프로젝트: careysky/FlyFF
void CDDom::SendScore( void )
{
	if( GetRunTime() == RUN_CLOSED )
		return;

	for( vector<u_long>::iterator it = m_User.begin(); it != m_User.end(); ++it )
	{
		CUser*	pUser		= static_cast<CUser*>( prj.GetUserByID( (*it ) ) );
		if( IsValidObj( pUser ) )
		{
			pUser->SendDDomScore();
		}
	}
}
예제 #9
0
파일: DDom.cpp 프로젝트: careysky/FlyFF
void CDDom::SendTouch( DDOM_TEAM team, DDOM_BASE base, BOOL bCaptured )
{
	if( GetRunTime() == RUN_CLOSED )
		return;

	for( vector<u_long>::iterator it = m_User.begin(); it != m_User.end(); ++it )
	{
		CUser*	pUser		= static_cast<CUser*>( prj.GetUserByID( (*it ) ) );
		if( IsValidObj( pUser ) )
		{
			pUser->SendDDomTouch( team, base, bCaptured );
		}
	}
}
예제 #10
0
파일: DDom.cpp 프로젝트: careysky/FlyFF
void CDDom::Send( CString strMessage, FONT_MSG font, D3DCOLOR d3dcolor )
{
	if( GetRunTime() == RUN_CLOSED )
		return;
	for( vector<u_long>::iterator it = m_User.begin(); it != m_User.end(); ++it )
	{
		CUser*	pUser		= static_cast<CUser*>( prj.GetUserByID( (*it ) ) );
		if( IsValidObj( pUser ) )
		{
#ifdef __NEW_FONT
			//pUser->SendTextFont( strMessage, static_cast<u_int>( font ), d3dcolor );
			pUser->AddTextD3D( strMessage, d3dcolor );//
#else
			pUser->AddTextD3D( strMessage, d3dcolor );
#endif
		}
	}
}
예제 #11
0
/*************************************************************************************
EXTERNAL
*************************************************************************************/
int getEmuDevParameter( void*_pParam, int _paramId)
{
clemuGPU * clDevice;
cl_int status = SDK_FAILURE;

 clDevice = (clemuGPU * )GetRunTime()->GetActiveDev(0);

    if (clDevice)
	{
      switch( _paramId )
	  {
	  case CLEMU_PARAM_DEV_NAME:
		  (*(const char**)_pParam) = clDevice->GetDevNm();
		  break;
	  }
      status = SDK_SUCCESS;
	}

	return(status);
}
예제 #12
0
파일: DDom.cpp 프로젝트: careysky/FlyFF
void CDDom::End( void )
{
	if( GetRunTime() == RUN_CLOSED )
		return;

	SendTouch( MAX_TEAM, BASE_A );
	SendTouch( MAX_TEAM, BASE_B ); 

	CDDomTeam& team = m_DomTeam[TEAM_A].GetCaptures() > m_DomTeam[TEAM_B].GetCaptures() ? m_DomTeam[TEAM_A] : m_DomTeam[TEAM_B];
	
	if( m_DomTeam[TEAM_A].GetAmount() == 0 )
		team = m_DomTeam[TEAM_B];
	else if( m_DomTeam[TEAM_B].GetAmount() == 0 )
		team = m_DomTeam[TEAM_A];

	DDOM_TEAM dteam = m_DomTeam[TEAM_A].GetCaptures() > m_DomTeam[TEAM_B].GetCaptures() ? TEAM_A : TEAM_B; 

	team.SendPrize();
	CString strTeam;
	strTeam.Format( "Team %s has won the Double Domination game! You can now join at Is!", GetName( dteam ) );
	//this->Send( strTeam );
	//this->Send( "The game has ended!" );
	//g_DPCoreClient.SendSystem( strTeam );
	g_DPCoreClient.SendSystem( strTeam );
	
	ReturnAll();
	
	m_dwRound = 0;
	m_dwRoundTime = 0;
	m_idCapUser = 0;
	m_splitSize = 0;
	m_wTime = 0 ;
	m_RunTime = RUN_CLOSED;
	m_User.clear();

	m_Base[BASE_A].SetTouchedBy( MAX_TEAM );
	m_Base[BASE_B].SetTouchedBy( MAX_TEAM );

	m_DomTeam[TEAM_A].Init();
	m_DomTeam[TEAM_B].Init();
}
예제 #13
0
파일: DDom.cpp 프로젝트: careysky/FlyFF
void CDDom::StartRound( void )
{
	if( GetRunTime() != RUN_COOLDOWN )
		return;

	CString strRound;
	strRound.Format( "The round: %u has begun", m_dwRound +1 );
	for( vector<u_long>::iterator it = m_User.begin(); it != m_User.end(); ++it )
	{
		CUser*	pUser	= static_cast<CUser*>( prj.GetUserByID( (*it ) ) );
		if( IsValidObj( pUser ) )
		{
			pUser->AddTextD3D( strRound, DoubleDom::Color::nBlueCol );
			Safe( pUser );
		} 
	}

	SendTouch( MAX_TEAM, BASE_A );
	SendTouch( MAX_TEAM, BASE_B ); 
	SetRunTime( RUN_FIGHT );
}
예제 #14
0
파일: DDom.cpp 프로젝트: careysky/FlyFF
BOOL CDDom::Join( CUser* pUser )
{
	if( GetRunTime() != RUN_FIGHT )
	{
		if( IsValidObj( pUser ) )
		{
			pUser->AddTextD3D( "No match available", 0xFFFF0000 );
		}
		return FALSE;
	}

	__int64 domRandom = xxRandom();
	DDOM_TEAM domTeam =  static_cast<DDOM_TEAM>( domRandom & 0x01 );
	if( IsValidTeamOne( domTeam ) == FALSE )
		return FALSE;
	if( m_DomTeam[domTeam].GetAmount() >= m_splitSize )
		domTeam = GetOponentTeam( domTeam );
	CString strTeam = GetName( domTeam );
	if( strTeam.IsEmpty() == true )
		return FALSE;
	if( m_DomTeam[domTeam].Add( pUser, domTeam ) != TRUE )
		return FALSE;

	m_User.push_back( pUser->m_idPlayer );

	pUser->m_ddomTeam = domTeam;
	Safe( pUser );
	pUser->SendAdditionalMover( static_cast<CMover*>( pUser ) ); //hey!

	CString strJoin;
	strJoin.Format( "You have been set to %s team", strTeam );
	pUser->AddTextD3D( "You have joined the double domination", DoubleDom::Color::nBlueCol );
	pUser->AddTextD3D( strJoin, DoubleDom::Color::nBlueCol );
	
	SendScore();

	return TRUE;
}
예제 #15
0
파일: Timer.cpp 프로젝트: gurki/gameengine
void CTimer::Update(void)
{
	real curr = GetRunTime();
	
	// time between updates
	static real last = curr;

	delta = curr - last;
	last = curr;

	// framerate
	static real start = curr;
	static uint count = 0;

	count++;

	if(curr - start >= 1.0)
	{
		fps = count / (curr - start);
		start = curr;
		count = 0;
	}
}
예제 #16
0
int runCLEMU(const char * _device_type,
		   int _domainDim,
		   int _domain[],
		   int _group[],
		   const char * _program_location,
		   const char * _program_nm,
		   const char*_kernel_entry_name,
		   int _nbr_arg,
		   ClKrnlArg _args[])
{
clemuGPU * clDevice;
 cl_int status = SDK_SUCCESS;

 clDevice = (clemuGPU * )GetRunTime()->GetActiveDev(0);

clemuKernelJob *newJob;
   newJob = new clemuKernelJob;
   assert(newJob);
   newJob->initJob(clDevice,
	               _program_location,
                   _program_nm,
		           _kernel_entry_name,
		           _domainDim,
				   _domain,
				   _group,
				   _nbr_arg,
		           _args);
   clDevice->attachJob(newJob);
   clDevice->scheduleNextJob();

// delete job
clemuKernelJob *oldJob;
   oldJob = clDevice->fundJob(newJob->GetId());
   clDevice->detachJob(oldJob);
   delete oldJob;
   return(status);
}
예제 #17
0
/*
 * the order status transaction
 */
int ordstat( int t_num,
	     int w_id_arg,		/* warehouse id */
	     int d_id_arg,		/* district id */
	     int byname,		/* select by c_id or c_last? */
	     int c_id_arg,		/* customer id */
	     char c_last_arg[]	        /* customer last name, format? */
)
{
	int            w_id = w_id_arg;
	int            d_id = d_id_arg;
	int            c_id = c_id_arg;
	int            c_d_id = d_id;
	int            c_w_id = w_id;
	char            c_first[17];
	char            c_middle[3];
	char            c_last[17];
	int           c_balance;	//goda:float -> int
	int            o_id;
	char            o_entry_d[25];
	int            o_carrier_id;
	int            ol_i_id;
	int            ol_supply_w_id;
	int            ol_quantity;
	int           ol_amount;	//goda:float -> int
	char            ol_delivery_d[25];
	int            namecnt;

	int             n;
	int             proceed = 0;

	MYSQL_STMT*   mysql_stmt;
        MYSQL_BIND    param[6];
        MYSQL_BIND    column[5];

/* goda [ */
	char		tempquery[500];
	MYSQL_RES *resp = NULL;
	MYSQL_ROW row;
	int max_o_id;
	struct timespec tbuf;
	double runtime;
/* ] goda */ 


	/*EXEC SQL WHENEVER NOT FOUND GOTO sqlerr;*/
	/*EXEC SQL WHENEVER SQLERROR GOTO sqlerr;*/

	if (byname) {
		strcpy(c_last, c_last_arg);
		proceed = 1;
		/*EXEC_SQL SELECT count(c_id)
			INTO :namecnt
		        FROM customer
			WHERE c_w_id = :c_w_id
			AND c_d_id = :c_d_id
		        AND c_last = :c_last;*/

/* goda commentout 
		mysql_stmt = stmt[t_num][20];

                memset(param, 0, sizeof(MYSQL_BIND) * 3); /* initialize *
                param[0].buffer_type = MYSQL_TYPE_LONG;
                param[0].buffer = &c_w_id;
                param[1].buffer_type = MYSQL_TYPE_LONG;
                param[1].buffer = &c_d_id;
                param[2].buffer_type = MYSQL_TYPE_STRING;
                param[2].buffer = c_last;
                param[2].buffer_length = strlen(c_last);
                if( mysql_stmt_bind_param(mysql_stmt, param) ) goto sqlerr;
                if( mysql_stmt_execute(mysql_stmt) ) goto sqlerr;

                if( mysql_stmt_store_result(mysql_stmt) ) goto sqlerr;
                memset(column, 0, sizeof(MYSQL_BIND) * 1); /* initialize *
                column[0].buffer_type = MYSQL_TYPE_LONG;
                column[0].buffer = &namecnt;
                if( mysql_stmt_bind_result(mysql_stmt, column) ) goto sqlerr;
                switch( mysql_stmt_fetch(mysql_stmt) ) {
                    case 0: //SUCCESS
                        break;
                    case 1: //ERROR
                    case MYSQL_NO_DATA: //NO MORE DATA
                    default:
                        mysql_stmt_free_result(mysql_stmt);
                        goto sqlerr;
                }
                mysql_stmt_free_result(mysql_stmt);
*/

/* goda [ */
		sprintf(tempquery,"SELECT count(c_id) FROM customer WHERE c_w_id = %d AND c_d_id = %d AND c_last = '%s'",c_w_id,c_d_id,c_last);
		GetStartTime(&tbuf);
		if(mysql_query(ctx[t_num],tempquery)) goto sqlerr;
		runtime = GetRunTime(&tbuf);
		query_log[20].runCount++;
		query_log[20].runTime += runtime;
		resp = mysql_use_result(ctx[t_num]);
		if((row = mysql_fetch_row(resp)) != NULL){
			namecnt = atoi(row[0]);
		}
		else{
			//NO RESULT
			mysql_free_result(resp);
			goto sqlerr;
		}
		mysql_free_result(resp);
/* ] goda */ 


		proceed = 2;
		/*EXEC_SQL DECLARE c_byname_o CURSOR FOR
		        SELECT c_balance, c_first, c_middle, c_last
		        FROM customer
		        WHERE c_w_id = :c_w_id
			AND c_d_id = :c_d_id
			AND c_last = :c_last
			ORDER BY c_first;
		proceed = 3;
		EXEC_SQL OPEN c_byname_o;*/

/* goda commentout
		mysql_stmt = stmt[t_num][21];

		memset(param, 0, sizeof(MYSQL_BIND) * 3); /* initialize *
		param[0].buffer_type = MYSQL_TYPE_LONG;
                param[0].buffer = &c_w_id;
                param[1].buffer_type = MYSQL_TYPE_LONG;
                param[1].buffer = &c_d_id;
                param[2].buffer_type = MYSQL_TYPE_STRING;
                param[2].buffer = c_last;
                param[2].buffer_length = strlen(c_last);
                if( mysql_stmt_bind_param(mysql_stmt, param) ) goto sqlerr;
                if( mysql_stmt_execute(mysql_stmt) ) goto sqlerr;

		if( mysql_stmt_store_result(mysql_stmt) ) goto sqlerr;
                memset(column, 0, sizeof(MYSQL_BIND) * 4); /* initialize *
		column[0].buffer_type = MYSQL_TYPE_FLOAT;
		column[0].buffer = &c_balance;
		column[1].buffer_type = MYSQL_TYPE_STRING;
		column[1].buffer = c_first;
		column[1].buffer_length = sizeof(c_first);
		column[2].buffer_type = MYSQL_TYPE_STRING;
		column[2].buffer = c_middle;
		column[2].buffer_length = sizeof(c_middle);
		column[3].buffer_type = MYSQL_TYPE_STRING;
		column[3].buffer = c_last;
		column[3].buffer_length = sizeof(c_last);
		if( mysql_stmt_bind_result(mysql_stmt, column) ) goto sqlerr;
*/

/* goda [ */
		sprintf(tempquery,"SELECT c_balance, c_first, c_middle, c_last FROM customer WHERE c_w_id = %d AND c_d_id = %d AND c_last = '%s' ORDER BY c_first",c_w_id,c_d_id,c_last);
		GetStartTime(&tbuf);
		if(mysql_query(ctx[t_num],tempquery)) goto sqlerr;
		runtime = GetRunTime(&tbuf);
		query_log[21].runCount++;
		query_log[21].runTime += runtime;
		resp = mysql_use_result(ctx[t_num]);
		
/* ] goda */ 

		if (namecnt % 2)
			namecnt++;	/* Locate midpoint customer; */

		for (n = 0; n < namecnt / 2; n++) {
			proceed = 4;

/* goda commentout
			/*EXEC_SQL FETCH c_byname_o
			  INTO :c_balance, :c_first, :c_middle, :c_last;*
			switch( mysql_stmt_fetch(mysql_stmt) ) {
			    case 0: //SUCCESS
                            case MYSQL_DATA_TRUNCATED:
				break;
			    case 1: //ERROR
			    case MYSQL_NO_DATA: //NO MORE DATA
			    default:
				mysql_stmt_free_result(mysql_stmt);
				goto sqlerr;
			}
*/
/* goda [ */
			if((row = mysql_fetch_row(resp)) != NULL){
				c_balance = atoi(row[0]);
				sprintf(c_first,"%s",row[1]);
				sprintf(c_middle,"%s",row[2]);
				sprintf(c_last,"%s",row[3]);
			}
			else{
				//NO RESULT
				mysql_free_result(resp);
				goto sqlerr;
			}
/* ] goda */ 
		}
		proceed = 5;
		/*EXEC_SQL CLOSE  c_byname_o;*/

//goda commentout		mysql_stmt_free_result(mysql_stmt);

		mysql_free_result(resp);


	} else {		/* by number */
		proceed = 6;
		/*EXEC_SQL SELECT c_balance, c_first, c_middle, c_last
			INTO :c_balance, :c_first, :c_middle, :c_last
		        FROM customer
		        WHERE c_w_id = :c_w_id
			AND c_d_id = :c_d_id
			AND c_id = :c_id;*/
/* goda commentout
		mysql_stmt = stmt[t_num][22];

		memset(param, 0, sizeof(MYSQL_BIND) * 3); /* initialize *
		param[0].buffer_type = MYSQL_TYPE_LONG;
		param[0].buffer = &c_w_id;
		param[1].buffer_type = MYSQL_TYPE_LONG;
		param[1].buffer = &c_d_id;
		param[2].buffer_type = MYSQL_TYPE_LONG;
		param[2].buffer = &c_id;
		if( mysql_stmt_bind_param(mysql_stmt, param) ) goto sqlerr;
		if( mysql_stmt_execute(mysql_stmt) ) goto sqlerr;

		if( mysql_stmt_store_result(mysql_stmt) ) goto sqlerr;
		memset(column, 0, sizeof(MYSQL_BIND) * 4); /* initialize *
		column[0].buffer_type = MYSQL_TYPE_FLOAT;
		column[0].buffer = &c_balance;
		column[1].buffer_type = MYSQL_TYPE_STRING;
		column[1].buffer = c_first;
		column[1].buffer_length = sizeof(c_first);
		column[2].buffer_type = MYSQL_TYPE_STRING;
		column[2].buffer = c_middle;
		column[2].buffer_length = sizeof(c_middle);
		column[3].buffer_type = MYSQL_TYPE_STRING;
		column[3].buffer = c_last;
		column[3].buffer_length = sizeof(c_last);
		if( mysql_stmt_bind_result(mysql_stmt, column) ) goto sqlerr;
		switch( mysql_stmt_fetch(mysql_stmt) ) {
		    case 0: //SUCCESS
                    case MYSQL_DATA_TRUNCATED:
			break;
		    case 1: //ERROR
		    case MYSQL_NO_DATA: //NO MORE DATA
		    default:
			mysql_stmt_free_result(mysql_stmt);
			goto sqlerr;
		}
		mysql_stmt_free_result(mysql_stmt);
*/
/* goda [ */
		sprintf(tempquery,"SELECT c_balance, c_first, c_middle, c_last FROM customer WHERE c_w_id = %d AND c_d_id = %d AND c_id = %d",c_w_id,c_d_id,c_id);
		GetStartTime(&tbuf);
		if(mysql_query(ctx[t_num],tempquery)) goto sqlerr;
		runtime = GetRunTime(&tbuf);
		query_log[22].runCount++;
		query_log[22].runTime += runtime;
		resp = mysql_use_result(ctx[t_num]);
		if((row = mysql_fetch_row(resp)) != NULL){
			c_balance = atoi(row[0]);
			sprintf(c_first,"%s",row[1]);
			sprintf(c_middle,"%s",row[2]);
			sprintf(c_last,"%s",row[3]);
		}
		else{
			//NO RESULT
			mysql_free_result(resp);
			goto sqlerr;
		}
		mysql_free_result(resp);
/* ] goda */ 

	}

	/* find the most recent order for this customer */

	proceed = 7;
	/*EXEC_SQL SELECT o_id, o_entry_d, COALESCE(o_carrier_id,0)
		INTO :o_id, :o_entry_d, :o_carrier_id
	        FROM orders
	        WHERE o_w_id = :c_w_id
		AND o_d_id = :c_d_id
		AND o_c_id = :c_id
		AND o_id = (SELECT MAX(o_id)
		    	    FROM orders
		    	    WHERE o_w_id = :c_w_id
		  	    AND o_d_id = :c_d_id
		    	    AND o_c_id = :c_id);*/
/* goda commentout 
	mysql_stmt = stmt[t_num][23];

	memset(param, 0, sizeof(MYSQL_BIND) * 6); /* initialize *
	param[0].buffer_type = MYSQL_TYPE_LONG;
	param[0].buffer = &c_w_id;
	param[1].buffer_type = MYSQL_TYPE_LONG;
	param[1].buffer = &c_d_id;
	param[2].buffer_type = MYSQL_TYPE_LONG;
	param[2].buffer = &c_id;
	param[3].buffer_type = MYSQL_TYPE_LONG;
	param[3].buffer = &c_w_id;
	param[4].buffer_type = MYSQL_TYPE_LONG;
	param[4].buffer = &c_d_id;
	param[5].buffer_type = MYSQL_TYPE_LONG;
	param[5].buffer = &c_id;
	if( mysql_stmt_bind_param(mysql_stmt, param) ) goto sqlerr;
	if( mysql_stmt_execute(mysql_stmt) ) goto sqlerr;

	if( mysql_stmt_store_result(mysql_stmt) ) goto sqlerr;
	memset(column, 0, sizeof(MYSQL_BIND) * 3); /* initialize *
	column[0].buffer_type = MYSQL_TYPE_LONG;
        column[0].buffer = &o_id;
	column[1].buffer_type = MYSQL_TYPE_STRING;
	column[1].buffer = o_entry_d;
	column[1].buffer_length = sizeof(o_entry_d);
	column[2].buffer_type = MYSQL_TYPE_LONG;
        column[2].buffer = &o_carrier_id;
	if( mysql_stmt_bind_result(mysql_stmt, column) ) goto sqlerr;
        switch( mysql_stmt_fetch(mysql_stmt) ) {
            case 0: //SUCCESS
                break;
            case 1: //ERROR
            case MYSQL_NO_DATA: //NO MORE DATA
            default:
                mysql_stmt_free_result(mysql_stmt);
                goto sqlerr;
        }
        mysql_stmt_free_result(mysql_stmt);
*/
/* goda [ */
/* preprocess to get max_o_id */
		sprintf(tempquery,"SELECT MAX(o_id) FROM orders WHERE o_w_id = %d AND o_d_id = %d AND o_c_id = %d",c_w_id,c_d_id,c_id);
		if(mysql_query(ctx[t_num],tempquery)) goto sqlerr;
		resp = mysql_use_result(ctx[t_num]);
		if((row = mysql_fetch_row(resp)) != NULL){
			max_o_id = atoi(row[0]);
		}
		else{
			//NO RESULT
			mysql_free_result(resp);
			goto sqlerr;
		}
		mysql_free_result(resp);

	proceed = 70;
		//sprintf(tempquery,"SELECT o_id, o_entry_d, COALESCE(o_carrier_id,0) FROM orders WHERE o_w_id = %d AND o_d_id = %d AND o_c_id = %d AND o_id = (SELECT MAX(o_id) FROM orders WHERE o_w_id = %d AND o_d_id = %d AND o_c_id = %d)",c_w_id,c_d_id,c_id,c_w_id,c_d_id,c_id);
		sprintf(tempquery,"SELECT o_id, o_entry_d, o_carrier_id FROM orders WHERE o_w_id = %d AND o_d_id = %d AND o_c_id = %d AND o_id = %d",c_w_id,c_d_id,c_id,max_o_id);
		GetStartTime(&tbuf);
		if(mysql_query(ctx[t_num],tempquery)) goto sqlerr;
		runtime = GetRunTime(&tbuf);
		query_log[23].runCount++;
		query_log[23].runTime += runtime;

		resp = mysql_use_result(ctx[t_num]);
		if((row = mysql_fetch_row(resp)) != NULL){
			sprintf(o_entry_d,"%s",row[1]);
			if(row[2] != NULL){
				o_carrier_id = atoi(row[2]);
			}
			else{
				o_carrier_id = 0;
			}
		}
		else{
			//NO RESULT
			mysql_free_result(resp);
			goto sqlerr;
		}
		mysql_free_result(resp);
/* ] goda */ 


	/* find all the items in this order */
	proceed = 8;
	/*EXEC_SQL DECLARE c_items CURSOR FOR
		SELECT ol_i_id, ol_supply_w_id, ol_quantity, ol_amount,
                       ol_delivery_d
		FROM order_line
	        WHERE ol_w_id = :c_w_id
		AND ol_d_id = :c_d_id
		AND ol_o_id = :o_id;*/
/* goda commentout
	mysql_stmt = stmt[t_num][24];

	memset(param, 0, sizeof(MYSQL_BIND) * 3); /* initialize *
	param[0].buffer_type = MYSQL_TYPE_LONG;
	param[0].buffer = &c_w_id;
	param[1].buffer_type = MYSQL_TYPE_LONG;
	param[1].buffer = &c_d_id;
	param[2].buffer_type = MYSQL_TYPE_LONG;
	param[2].buffer = &o_id;
	if( mysql_stmt_bind_param(mysql_stmt, param) ) goto sqlerr;
	if( mysql_stmt_execute(mysql_stmt) ) goto sqlerr;

	if( mysql_stmt_store_result(mysql_stmt) ) goto sqlerr;
        memset(column, 0, sizeof(MYSQL_BIND) * 5); /* initialize *	
	column[0].buffer_type = MYSQL_TYPE_LONG;
        column[0].buffer = &ol_i_id;
	column[1].buffer_type = MYSQL_TYPE_LONG;
        column[1].buffer = &ol_supply_w_id;
	column[2].buffer_type = MYSQL_TYPE_LONG;
        column[2].buffer = &ol_quantity;
	column[3].buffer_type = MYSQL_TYPE_FLOAT;
        column[3].buffer = &ol_amount;
	column[4].buffer_type = MYSQL_TYPE_STRING;
        column[4].buffer = ol_delivery_d;
        column[4].buffer_length = sizeof(ol_delivery_d);
	if( mysql_stmt_bind_result(mysql_stmt, column) ) goto sqlerr;
*/
/* goda [ */
		sprintf(tempquery,"SELECT ol_i_id, ol_supply_w_id, ol_quantity, ol_amount, ol_delivery_d FROM order_line WHERE ol_w_id = %d AND ol_d_id = %d AND ol_o_id = %d",c_w_id,c_d_id,o_id);
		GetStartTime(&tbuf);
		if(mysql_query(ctx[t_num],tempquery)) goto sqlerr;
		runtime = GetRunTime(&tbuf);
		query_log[24].runCount++;
		query_log[24].runTime += runtime;
		resp = mysql_use_result(ctx[t_num]);
/* ] goda */ 


	/*proceed = 9;
	EXEC_SQL OPEN c_items;

	EXEC SQL WHENEVER NOT FOUND GOTO done;*/

	for (;;) {
		proceed = 10;
		/*EXEC_SQL FETCH c_items
			INTO :ol_i_id, :ol_supply_w_id, :ol_quantity,
			:ol_amount, :ol_delivery_d;*/
/* goda commentout
		switch( mysql_stmt_fetch(mysql_stmt) ) {
		    case 0: //SUCCESS
		    case MYSQL_DATA_TRUNCATED:
			break;
		    case MYSQL_NO_DATA: //NO MORE DATA
			mysql_stmt_free_result(mysql_stmt);
			goto done;
		    case 1: //ERROR
		    default:
			mysql_stmt_free_result(mysql_stmt);
			goto sqlerr;
		}
*/
		if((row = mysql_fetch_row(resp)) != NULL){
			ol_i_id = atoi(row[0]);
			ol_supply_w_id = atoi(row[1]);
			ol_quantity = atoi(row[2]);
			ol_amount = atoi(row[3]);
			sprintf(ol_delivery_d,"%s",row[4]);
		}
		else{
			//NO RESULT
			mysql_free_result(resp);
			goto done;
			//goto sqlerr;
		}
		mysql_free_result(resp);
	}

done:
	/*EXEC_SQL CLOSE c_items;*/
        /*EXEC_SQL COMMIT WORK;*/
	if( mysql_commit(ctx[t_num]) ) goto sqlerr;

	return (1);

sqlerr:
        fprintf(stderr, "ordstat %d:%d\n",t_num,proceed);
	outputQuery(tempquery);
	error(ctx[t_num],mysql_stmt);
        /*EXEC SQL WHENEVER SQLERROR GOTO sqlerrerr;*/
	/*EXEC_SQL ROLLBACK WORK;*/
	mysql_rollback(ctx[t_num]);
sqlerrerr:
	return (0);
}
예제 #18
0
float Root::GetAverageFps() const {
	return floor(mTotalNumFrames / GetRunTime());
}