示例#1
0
task main() {
	initialize(BLUE_S); //Which way does the robot start pointing?
	autoReset(0); // 0 = Start, 1 = Finish
	#include "routine.c"
	autoReset(1);
	for (int j=0; j<10; j++) motor[j]=0;
	while(true) {}
}
BOOL CXTPCalendarRemindersManager::ProcessActiveReminders(COleDateTime dtTime)
{
	CXTPAutoResetValue<BOOL> autoReset(m_bSkipOnEventChanged, FALSE);
	m_bSkipOnEventChanged = TRUE;

	BOOL bChanged = FALSE;
	int nCount = m_arWaitingReminders.GetCount();
	for (int i = nCount-1; i >= 0 ; i--)
	{
		CXTPCalendarReminder* pRmdI = m_arWaitingReminders.GetAt(i, FALSE);

		if (pRmdI->m_dtNextReminderTime <= dtTime)
		{
			m_arActiveReminders.Add(pRmdI, TRUE);
			m_arWaitingReminders.RemoveAt(i);

			bChanged = TRUE;

			_RemoveSnoozeData(pRmdI);
		}
	}
	if (bChanged)
		m_arActiveReminders.Sort();

	return bChanged;
}
BOOL CXTPCalendarRemindersManager::_Dismiss(CXTPCalendarReminder* pReminder)
{
	CXTPCalendarEventPtr ptrEvent = pReminder ? pReminder->GetEvent() : NULL;

	if (!pReminder || !ptrEvent)
	{
		ASSERT(FALSE);
		return FALSE;
	}

	CXTPAutoResetValue<BOOL> autoReset(m_bSkipOnEventChanged, FALSE);
	m_bSkipOnEventChanged = TRUE;

	if (ptrEvent->GetRecurrenceState() == xtpCalendarRecurrenceOccurrence)
	{
		CXTPCalendarRecurrencePatternPtr ptrPattern = ptrEvent->GetRecurrencePattern();
		CXTPCalendarEventPtr ptrMaster = ptrPattern ? ptrPattern->GetMasterEvent() : NULL;
		if (ptrMaster)
		{
			ptrPattern->SetOccReminder(ptrEvent, FALSE);

			VERIFY( ptrMaster->UpdateRecurrence(ptrPattern) );
			VERIFY( XTP_SAFE_GET1(ptrMaster->GetDataProvider(), ChangeEvent(ptrMaster), FALSE) );
		}
	}
	else
	{
		ptrEvent->SetReminder(FALSE);
		//ptrEvent->GetCustomProperties()->RemoveProperty(cszEventCustProp_NextReminderTime_Snoozed);

		VERIFY( XTP_SAFE_GET1(ptrEvent->GetDataProvider(), ChangeEvent(ptrEvent), FALSE) );
	}

	return TRUE;
}
示例#4
0
const AuthToken AuthManager::Authenticate( const std::string& username, const std::string& password, const std::string& ip )
{
	kode::db::AutoReset autoReset( m_pCheckLoginStatement );

	m_pCheckLoginStatement->Bind( "@Username", username );
	if( m_pCheckLoginStatement->GetNextRow() )
	{

		int nID = m_pCheckLoginStatement->GetColumn<int>( 0 );
		std::string encodedHash = m_pCheckLoginStatement->GetColumn<std::string>( 1 );
		std::vector< unsigned char > passwordHash( CryptoPP::SHA::DIGESTSIZE );
		kode::base64::Decode( encodedHash, passwordHash );

		//
		// Now we need to confirm the passwords match
		//
		unsigned char hashBuffer[ CryptoPP::SHA::DIGESTSIZE ];
		CryptoPP::HMAC< CryptoPP::SHA >( m_salt, sizeof( m_salt ) )
		.CalculateDigest(
		    hashBuffer,
		    &passwordHash[0],
		    passwordHash.size()
		);
		std::string hmac = kode::base64::Encode( hashBuffer, sizeof( hashBuffer ) );

		if( hmac != password )
			throw authentication_exception( "Invalid username or password" );
		return AuthToken( username, nID, AuthToken::AccessLevel_Admin );
	}
	throw authentication_exception( "Invalid username or password" );
}
task main()
	{
	initialize(N_EAST); //Which way does the robot start pointing?
	autoReset(0); // 0 = Start, 1 = Finish
	//	TYPE,	Left,	Right,	Other,	End Type,	Delay
	auto(CMP_2,	RHT_45,	FULL,	LOW_SH,	DRIV_READY,	PID);	//Turn toward S dispenser
	auto(STR,	EAST,	11300,	LOW_SH,	DRIV_READY,	NEXT);	//Forward
	auto(CMP_2,	LFT_90,	FULL,	LOW_SH,	DRIV_READY,	PID);	//Turn to hooks
	auto(STR,	NORTH,	9150,	HIG_SH,	DRIV_READY,	NEXT);	//Forward - High
	auto(STR,	NORTH,	-7200,	HIG_OP,	DRIV_READY,	NEXT);	//Backward
	auto(STR,	NORTH,	7200,	MED_SH,	DRIV_READY,	NEXT);	//Forward - Med
	auto(STR,	NORTH,	-7200,	MED_OP,	DRIV_READY,	NEXT);	//Backward
	auto(STR,	NORTH,	7150,	LOW_SH,	DRIV_READY,	NEXT);	//Forward - Low
	auto(STR,	NORTH,	-1000,	LOW_OP,	DRIV_READY,	NEXT);	//Backward

	auto(CMP_2,	1350,	FULL,	LOW_LV,	DRIV_READY,	PID);	//Turn to get around pole
	auto(STR,	S_EAST,	-5000,	LOW_LV,	DRIV_READY,	NEXT);	//Backward
	auto(CMP_2,	RHT_90,	FULL,	LOW_LV,	DRIV_READY,	PID);	//Turn to get around pole
	auto(STR,	S_WEST,	-2300,	LOW_LV,	DRIV_READY,	NEXT);	//Backward
	auto(CMP_2,	LFT_45,	FULL,	LOW_LV,	DRIV_READY,	PID);	//Align with S wall

	auto(STR,	SOUTH,	-7300,	LOW_LV,	DRIV_READY,	NEXT);	//Backward
	auto(STR,	SOUTH,	7400,	HIG_SH,	DRIV_READY,	NEXT);	//Forward - High
	auto(STR,	SOUTH,	-7500,	HIG_OP,	DRIV_READY,	NEXT);	//Backward
	auto(STR,	SOUTH,	7100,	MED_SH,	DRIV_READY,	NEXT);	//Forward - Med
	auto(STR,	SOUTH,	-7300,	MED_OP,	DRIV_READY,	NEXT);	//Backward
	auto(STR,	SOUTH,	7200,	LOW_SH,	DRIV_READY,	NEXT);	//Forward - Low
	auto(STR,	SOUTH,	-7900,	LOW_OP,	DRIV_READY,	NEXT);	//Backward

	auto(CMP_2,	RHT_90,	FULL,	CRN_SH,	DRIV_READY,	PID);	//Turn toward corner hook
	auto(STR,	3600,	9500,	CRN_SH,	DRIV_READY,	NEXT);	//Forward
	auto(CMP_2,	RHT_45,	FULL,	CRN_SH,	DRIV_READY,	PID);	//Turn into corner hook
	auto(CMP_2,	-1350,	FULL,	LOW_OP,	DRIV_READY,	PID);	//Turn away from corner hook

	auto(STR,	SOUTH,	9800,	DRP_OP,	DRIV_READY,	NEXT);	//Forward
	auto(CMP_2,	-250,	FULL,	DRP_SH,	DRIV_READY,	PID);	//Turn
	auto(STR,	2450,	9000,	DRP_SH,	DRIV_READY,	NEXT);	//Forward -	^
	auto(STR,	2450,	-9000,	DRP_OP,	DRIV_READY,	NEXT);	//Backward
	auto(CMP_2,	250,	FULL,	DRP_SH,	DRIV_READY,	PID);	//Turn
	auto(STR,	SOUTH,	4000,	DRP_SH,	DRIV_READY,	NEXT);	//Forward -	>
	auto(STR,	SOUTH,	-5000,	DRP_OP,	DRIV_READY,	NEXT);	//Backward
	auto(CMP_2,	LFT_45,	FULL,	DRP_SH,	DRIV_READY,	PID);	//Turn
	auto(STR,	S_EAST,	8500,	DRP_SH,	DRIV_READY,	NEXT);	//Forward -	<
	auto(STR,	S_EAST,	-8500,	DRP_OP,	DRIV_READY,	NEXT);	//Backward
	auto(STR,	S_EAST,	3000,	DRP_SH,	DRIV_READY,	NEXT);	//Forward -	v
	auto(STR,	S_EAST,	-3000,	DRP_OP,	DRIV_READY,	NEXT);	//Backward
	auto(CMP_2,	LFT_45,	FULL,	DRP_OP,	DRIV_READY,	PID);	//Turn toward E dispenser

	auto(STR,	EAST,	10000,	DRP_SH,	DRIV_READY,	NEXT);	//Forward across field
	auto(STR,	EAST,	10000,	DRP_SH,	DRIV_READY,	NEXT);	//Forward across field
	auto(CMP_2,	-1150,	FULL,	DRP_SH,	DRIV_READY,	PID);	//Turn
	auto(STR,	650,	7000,	DRP_SH,	DRIV_READY,	NEXT);	//Forward -	^
	auto(STR,	650,	-7000,	DRP_OP,	DRIV_READY,	NEXT);	//Backward
	auto(CMP_2,	250,	FULL,	DRP_SH,	DRIV_READY,	PID);	//Turn
	auto(STR,	NORTH,	3000,	DRP_SH,	DRIV_READY,	NEXT);	//Forward -	>
	auto(STR,	NORTH,	-5000,	DRP_OP,	DRIV_READY,	NEXT);	//Backward
	auto(CMP_2,	LFT_45,	FULL,	DRP_SH,	DRIV_READY,	PID);	//Turn
	auto(STR,	N_WEST,	7000,	DRP_SH,	DRIV_READY,	NEXT);	//Forward -	<
	auto(STR,	N_WEST,	-7000,	DRP_OP,	DRIV_READY,	NEXT);	//Backward
	auto(STR,	N_WEST,	3000,	DRP_SH,	DRIV_READY,	NEXT);	//Forward -	v
	auto(STR,	N_WEST,	-3000,	DRP_OP,	DRIV_READY,	NEXT);	//Backward

	auto(CMP_2,	RHT_90,	FULL,	CRN_SH,	DRIV_READY,	PID);	//Turn
	auto(STR,	N_EAST,	-12800,	CRN_SH,	DRIV_READY,	NEXT);	//Backward to last dispenser
	auto(CMP_2,	RHT_45,	FULL,	CRN_SH,	DRIV_READY,	PID);	//Turn toward corner hook
	auto(STR,	EAST,	9200,	CRN_SH,	DRIV_READY,	NEXT);	//Forward
	auto(CMP_2,	RHT_45,	FULL,	CRN_SH,	DRIV_READY,	PID);	//Turn into corner hook
	auto(STR,	S_EAST,	-850,	CRN_OP,	DRIV_READY,	300);	//Let go

	autoReset(1);
	while(1==1)
		{zeroMotors();
		output();}
	}
BOOL CXTPCalendarRemindersManager::Snooze(CXTPCalendarReminder* pReminder,
		int nMinutesAfterNow)
{
	const int cnMaxSnoozeMinutes = (60*24*365) * 1000; // 1000 years

	// WARNING. no sense to snooze before now.
	ASSERT(nMinutesAfterNow >= 1);

	// WARNING. do you really need to snooze so far.
	ASSERT(nMinutesAfterNow <= cnMaxSnoozeMinutes);

	nMinutesAfterNow = max(1, min(nMinutesAfterNow, cnMaxSnoozeMinutes));

	CXTPCalendarEventPtr ptrEvent = pReminder ? pReminder->GetEvent() : NULL;

	if (!pReminder || !ptrEvent)
	{
		ASSERT(FALSE);
		return FALSE;
	}

	pReminder->m_dtNextReminderTime = CXTPCalendarUtils::GetCurrentTime();
	pReminder->m_dtNextReminderTime += CXTPCalendarUtils::Minutes2Span(nMinutesAfterNow);

	m_arWaitingReminders.Add(pReminder, TRUE);

	int nIdx = m_arActiveReminders.Find(pReminder);
	if (nIdx >= 0)
	{
		m_arActiveReminders.RemoveAt(nIdx);
	}

	CXTPAutoResetValue<BOOL> autoReset(m_bSkipOnEventChanged, FALSE);
	m_bSkipOnEventChanged = TRUE;

	if (ptrEvent->GetRecurrenceState() == xtpCalendarRecurrenceOccurrence)
	{
		CXTPCalendarRecurrencePatternPtr ptrPattern = ptrEvent->GetRecurrencePattern();
		CXTPCalendarEventPtr ptrMaster = ptrPattern ? ptrPattern->GetMasterEvent() : NULL;
		if (ptrMaster)
		{
			ptrPattern->SetOccReminder(ptrEvent, xtpCalendarRmdPrm_DontChange,
										(DATE)pReminder->m_dtNextReminderTime);

			VERIFY( ptrMaster->UpdateRecurrence(ptrPattern) );
			VERIFY( XTP_SAFE_GET1(ptrMaster->GetDataProvider(), ChangeEvent(ptrMaster), FALSE) );
		}
	}
	else
	{
		VERIFY( ptrEvent->GetCustomProperties()->SetProperty(
				cszEventCustProp_NextReminderTime_Snoozed,
				(DATE)pReminder->m_dtNextReminderTime) );

		VERIFY( XTP_SAFE_GET1(ptrEvent->GetDataProvider(), ChangeEvent(ptrEvent), FALSE) );
	}

	NotifyReminders(xtpCalendarReminderSnoozed, (LPARAM)pReminder);

	return TRUE;
}
task main()
	{
	initialize(N_EAST); //Which way does the robot start pointing?
	autoReset(START);
	//	TYPE,	Left,	Right,	Other,	End Type,	Delay
	auto(CMP_2,	RHT_45,	FULL,	LOW_SH,	DRIV_READY,	PID);	//Turn toward S dispenser
	auto(STR,	EAST,	11300,	LOW_SH,	DRIV_READY,	NEXT);	//Forward
	auto(CMP_2,	LFT_90,	FULL,	LOW_SH,	DRIV_READY,	PID);	//Turn to SE hooks
	auto(STR,	NORTH,	9150,	HIG_SH,	DRIV_READY,	NEXT);	//Forward - High
	auto(STR,	NORTH,	-7200,	HIG_OP,	DRIV_READY,	NEXT);	//Backward
	auto(STR,	NORTH,	7200,	MED_SH,	DRIV_READY,	NEXT);	//Forward - Med
	auto(STR,	NORTH,	-7200,	MED_OP,	DRIV_READY,	NEXT);	//Backward
	auto(STR,	NORTH,	7150,	LOW_SH,	DRIV_READY,	NEXT);	//Forward - Low
	auto(STR,	NORTH,	-7200,	LOW_OP,	DRIV_READY,	NEXT);	//Backward

	auto(CMP_2,	RHT_90,	FULL,	CRN_SH,	DRIV_READY,	PID);	//Turn toward corner hook
	auto(STR,	EAST,	8100,	CRN_SH,	DRIV_READY,	NEXT);	//Forward
	auto(CMP_2,	RHT_45,	FULL,	CRN_SH,	DRIV_READY,	PID);	//Turn into corner hook
	auto(STR,	S_EAST,	1600,	CRN_SH,	DRIV_READY,	NEXT);	//Forward
	auto(CMP_2,	-1350,	FULL,	CRN_OP,	DRIV_READY,	PID);	//Turn toward E dispenser

	auto(STR,	NORTH,	10400,	DRP_SH,	DRIV_READY,	NEXT);	//Forward - E dispenser to 4 tiles
	auto(CMP_2,	-250,	FULL,	DRP_OP,	DRIV_READY,	PID);	//Turn
	auto(STR,	650,	8000,	DRP_SH,	DRIV_READY,	NEXT);	//Forward -	N Tile
	auto(STR,	650,	-4000,	DRP_SH,	DRIV_READY,	NEXT);	//Backward
	auto(STR,	650,	-4000,	DRP_OP,	DRIV_READY,	NEXT);	//Backward
	auto(CMP_2,	-200,	FULL,	DRP_OP,	DRIV_READY,	PID);	//Turn
	auto(STR,	N_WEST,	8300,	DRP_SH,	DRIV_READY,	NEXT);	//Forward -	W Tile
	auto(STR,	N_WEST,	-3300,	DRP_SH,	DRIV_READY,	NEXT);	//Backward
	auto(CMP_2,	1350,	FULL,	DRP_SH,	DRIV_READY,	PID);	//Turn - Straight back
	auto(STR,	EAST,	-2200,	DRP_SH,	DRIV_READY,	NEXT);	//Backward
	auto(CMP_2,	RHT_45,	FULL,	DRP_OP,	DRIV_READY,	PID);	//Turn - 45 curve
	auto(STR,	S_EAST,	-6620,	DRP_SH,	DRIV_READY,	NEXT);	//Backward
	auto(CMP_2,	RHT_45,	FULL,	DRP_SH,	DRIV_READY,	PID);	//Turn - Align

	auto(STR,	SOUTH,	-2420,	LOW_LV,	DRIV_READY,	NEXT);	//Backward - N dispenser to NW hooks
	auto(STR,	SOUTH,	7900,	HIG_SH,	DRIV_READY,	NEXT);	//Forward - High
	auto(STR,	SOUTH,	-7800,	HIG_OP,	DRIV_READY,	NEXT);	//Backward
	auto(STR,	SOUTH,	7400,	MED_SH,	DRIV_READY,	NEXT);	//Forward - Med
	auto(STR,	SOUTH,	-7600,	MED_OP,	DRIV_READY,	NEXT);	//Backward
	auto(STR,	SOUTH,	7500,	LOW_SH,	DRIV_READY,	NEXT);	//Forward - Low
	auto(STR,	SOUTH,	-7500,	LOW_OP,	DRIV_READY,	NEXT);	//Backward

	auto(CMP_2,	RHT_90,	FULL,	CRN_SH,	DRIV_READY,	PID);	//Turn toward corner hook
	auto(STR,	3600,	8850,	CRN_SH,	DRIV_READY,	NEXT);	//Forward
	auto(CMP_2,	RHT_45,	FULL,	CRN_SH,	DRIV_READY,	PID);	//Turn into corner hook
	auto(STR,	4050,	1000,	CRN_SH,	DRIV_READY,	NEXT);	//Let go
	auto(CMP_2,	-1350,	FULL,	CRN_OP,	DRIV_READY,	NEXT);	//Turn toward W dispenser

	auto(STR,	SOUTH,	10400,	DRP_SH,	DRIV_READY,	NEXT);	//Forward - E dispenser to 4 tiles
	auto(CMP_2,	-250,	FULL,	DRP_OP,	DRIV_READY,	NEXT);	//Turn
	auto(STR,	2450,	8000,	DRP_SH,	DRIV_READY,	NEXT);	//Forward -	N Tile
	auto(STR,	2450,	-4000,	DRP_SH,	DRIV_READY,	NEXT);	//Backward
	auto(STR,	2450,	-4000,	DRP_OP,	DRIV_READY,	NEXT);	//Backward
	auto(CMP_2,	250,	FULL,	DRP_SH,	DRIV_READY,	NEXT);	//Turn
	auto(STR,	SOUTH,	3000,	DRP_SH,	DRIV_READY,	NEXT);	//Forward -	E Tile
	auto(STR,	SOUTH,	-4000,	DRP_OP,	DRIV_READY,	NEXT);	//Backward
	auto(CMP_2,	LFT_45,	FULL,	DRP_SH,	DRIV_READY,	NEXT);	//Turn
	auto(STR,	S_EAST,	8300,	DRP_SH,	DRIV_READY,	NEXT);	//Forward -	W Tile
	auto(STR,	S_EAST,	-8300,	DRP_OP,	DRIV_READY,	NEXT);	//Backward
	auto(STR,	S_EAST,	2200,	DRP_SH,	DRIV_READY,	NEXT);	//Forward -	S Tile
	auto(STR,	S_EAST,	-200,	DRP_OP,	DRIV_READY,	NEXT);	//Backward

	autoReset(FINISH);
	while(1==1)
		{zeroMotors();
		output();
		wait1Msec(10);}
	}