void ProximitySensorNode::update() 
{
	if (!isEnabled())
		return;

	SceneGraph *sg = getSceneGraph();
	if (!sg)
		return;

	ViewpointNode *vpoint = sg->getViewpointNode();
	if (vpoint == NULL)
		vpoint = sg->getDefaultViewpointNode();

	float vpos[3];
	vpoint->getPosition(vpos);

	float center[3];
	getCenter(center);

	float size[3];
	getSize(size);

	if (inRegion() == false) {
		if (isRegion(vpos, center, size) == true) {
			setInRegion(true);
			double time = GetCurrentSystemTime();
			setEnterTime(time);
			sendEvent(getEventOut(enterTimeFieldString));
			setIsActive(true);
			sendEvent(getEventOut(isActiveFieldString));
		}
	}
	else {
		if (isRegion(vpos, center, size) == false) {
			setInRegion(false);
			double time = GetCurrentSystemTime();
			setExitTime(time);
			sendEvent(getEventOut(exitTimeFieldString));
			setIsActive(false);
			sendEvent(getEventOut(isActiveFieldString));
		}
	}
}
Example #2
0
//Read parameter from file
bool ReadParameter(
	const bool IsFirstRead)
{
//Initialization(Part 1)
	FILE *FileHandle = nullptr;
	size_t FileIndex = 0;

//First reading initialization
	if (IsFirstRead)
	{
		FILE_DATA FileDataTemp;
		FileDataTemp.ModificationTime = 0;

	//Create file list.
		const wchar_t *WCS_ConfigFileNameList[] = CONFIG_FILE_NAME_LIST_WCS;
	#if (defined(PLATFORM_FREEBSD) || defined(PLATFORM_LINUX) || defined(PLATFORM_MACOS))
		const char *ConfigFileNameList_MBS[] = CONFIG_FILE_NAME_LIST_MBS;
	#endif
		for (FileIndex = 0;FileIndex < sizeof(WCS_ConfigFileNameList) / sizeof(wchar_t *);++FileIndex)
		{
			FileDataTemp.FileName = GlobalRunningStatus.Path_Global->front();
			FileDataTemp.FileName.append(WCS_ConfigFileNameList[FileIndex]);
		#if (defined(PLATFORM_FREEBSD) || defined(PLATFORM_LINUX) || defined(PLATFORM_MACOS))
			FileDataTemp.FileName_MBS = GlobalRunningStatus.Path_Global_MBS->front();
			FileDataTemp.FileName_MBS.append(ConfigFileNameList_MBS[FileIndex]);
		#endif
			FileDataTemp.ModificationTime = 0;

			FileList_Config.push_back(FileDataTemp);
		}

	//Open configuration file.
		for (FileIndex = 0;FileIndex < FileList_Config.size();++FileIndex)
		{
		#if defined(PLATFORM_WIN)
			if (_wfopen_s(&FileHandle, FileList_Config.at(FileIndex).FileName.c_str(), L"rb") != 0 || FileHandle == nullptr)
		#elif (defined(PLATFORM_FREEBSD) || defined(PLATFORM_LINUX) || defined(PLATFORM_MACOS))
			FileHandle = fopen(FileList_Config.at(FileIndex).FileName_MBS.c_str(), "rb");
			if (FileHandle == nullptr)
		#endif
			{
				if (FileIndex + 1U == FileList_Config.size())
				{
					PrintError(LOG_LEVEL_TYPE::LEVEL_1, LOG_ERROR_TYPE::PARAMETER, L"Cannot open any configuration files", 0, nullptr, 0);
					return false;
				}
			}
			else {
				fclose(FileHandle);
				FileHandle = nullptr;

				break;
			}
		}

	//Mark the only one of configuration file.
		FileDataTemp = FileList_Config.at(FileIndex);
		FileList_Config.clear();
		FileList_Config.shrink_to_fit();
		FileList_Config.push_back(FileDataTemp);
	}

//Initialization(Part 2)
	auto IsConfigFileModified = false, IsFirstMonitorRead = true;
	auto ReadConfigTextType = READ_TEXT_TYPE::PARAMETER_NORMAL;
#if defined(ENABLE_LIBSODIUM)
	auto IsDNSCurveFileModified = false;
	auto ReadDNSCurveTextType = READ_TEXT_TYPE::DNSCURVE_DATABASE;
#endif
	if (!IsFirstRead)
	{
		ReadConfigTextType = READ_TEXT_TYPE::PARAMETER_MONITOR;
	#if defined(ENABLE_LIBSODIUM)
		ReadDNSCurveTextType = READ_TEXT_TYPE::DNSCURVE_MONITOR;
	#endif
	}

//File Monitor
	while (!GlobalRunningStatus.IsNeedExit)
	{
	//Jump here to restart.
	#if defined(ENABLE_LIBSODIUM)
		JumpTo_Restart:
	#endif

	//Check configuration file list.
		for (FileIndex = 0;FileIndex < FileList_Config.size();++FileIndex)
		{
		//Get attributes of file.
			if (!ReadSupport_FileAttributesLoop(ReadConfigTextType, FileIndex, FileList_Config.at(FileIndex), IsConfigFileModified))
			{
				if (IsFirstRead)
					return false;
				else if (!IsConfigFileModified)
					continue;
			}
			else {
				IsConfigFileModified = true;
			}

		//Read configuration file.
		#if defined(PLATFORM_WIN)
			if (_wfopen_s(&FileHandle, FileList_Config.at(FileIndex).FileName.c_str(), L"rb") != 0 || FileHandle == nullptr)
		#elif (defined(PLATFORM_FREEBSD) || defined(PLATFORM_LINUX) || defined(PLATFORM_MACOS))
			FileHandle = fopen(FileList_Config.at(FileIndex).FileName_MBS.c_str(), "rb");
			if (FileHandle == nullptr)
		#endif
			{
				if (IsFirstRead)
				{
					PrintError(LOG_LEVEL_TYPE::LEVEL_1, LOG_ERROR_TYPE::PARAMETER, L"Cannot open any configuration files", 0, nullptr, 0);
					return false;
				}
				else {
					FileList_Config.at(FileIndex).ModificationTime = 0;
//					continue;
				}
			}
			else {
				if (!ReadSupport_ReadText(FileHandle, ReadConfigTextType, FileIndex))
				{
					fclose(FileHandle);
					FileHandle = nullptr;

				//Stop reading.
					if (IsFirstRead)
						return false;
//					else 
//						continue;
				}
				else {
					fclose(FileHandle);
					FileHandle = nullptr;
				}
			}
		}

	//Check DNSCurve database file list.
	#if defined(ENABLE_LIBSODIUM)
		if (IsFirstRead)
		{
			FILE_DATA FileDataTemp;
			FileDataTemp.ModificationTime = 0;

		//Create file list.
			if (Parameter.IsDNSCurve && !DNSCurveParameter.DatabaseName->empty() && 
				(!DNSCurveParameter.Database_Target_Server_Main_IPv6->empty() || !DNSCurveParameter.Database_Target_Server_Alternate_IPv6->empty() || 
				!DNSCurveParameter.Database_Target_Server_Main_IPv4->empty() || !DNSCurveParameter.Database_Target_Server_Alternate_IPv4->empty()))
			{
				for (FileIndex = 0;FileIndex < GlobalRunningStatus.Path_Global->size();++FileIndex)
				{
					FileDataTemp.FileName = GlobalRunningStatus.Path_Global->at(FileIndex);
					FileDataTemp.FileName.append(*DNSCurveParameter.DatabaseName);
				#if (defined(PLATFORM_FREEBSD) || defined(PLATFORM_LINUX) || defined(PLATFORM_MACOS))
					FileDataTemp.FileName_MBS = GlobalRunningStatus.Path_Global_MBS->at(FileIndex);
					FileDataTemp.FileName_MBS.append(*DNSCurveParameter.DatabaseName_MBS);
				#endif
					FileDataTemp.ModificationTime = 0;

					FileList_DNSCurveDatabase.push_back(FileDataTemp);
				}
			}
			else {
				delete DNSCurveParameter.DatabaseName;
				DNSCurveParameter.DatabaseName = nullptr;
			#if (defined(PLATFORM_FREEBSD) || defined(PLATFORM_LINUX) || defined(PLATFORM_MACOS))
				delete DNSCurveParameter.DatabaseName_MBS;
				DNSCurveParameter.DatabaseName_MBS = nullptr;
			#endif
				delete DNSCurveParameter.Database_Target_Server_Main_IPv6;
				delete DNSCurveParameter.Database_Target_Server_Alternate_IPv6;
				delete DNSCurveParameter.Database_Target_Server_Main_IPv4;
				delete DNSCurveParameter.Database_Target_Server_Alternate_IPv4;
				delete DNSCurveParameter.Database_LineData;
				DNSCurveParameter.Database_Target_Server_Main_IPv6 = nullptr;
				DNSCurveParameter.Database_Target_Server_Alternate_IPv6 = nullptr;
				DNSCurveParameter.Database_Target_Server_Main_IPv4 = nullptr;
				DNSCurveParameter.Database_Target_Server_Alternate_IPv4 = nullptr;
				DNSCurveParameter.Database_LineData = nullptr;
			}
		}

	//Check DNSCurve database file list.
		if (DNSCurveParameter.DatabaseName != nullptr)
		{
			for (FileIndex = 0;FileIndex < FileList_DNSCurveDatabase.size();++FileIndex)
			{
			//Get attributes of file.
				if (!ReadSupport_FileAttributesLoop(ReadDNSCurveTextType, FileIndex, FileList_DNSCurveDatabase.at(FileIndex), IsDNSCurveFileModified) && !IsConfigFileModified)
				{
					if (!IsDNSCurveFileModified)
						continue;
				}
				else {
					IsDNSCurveFileModified = true;
				}

			//Force to read configuration file again when DNSCurve database has been changed.
				if (!IsConfigFileModified)
				{
					IsConfigFileModified = true;
					goto JumpTo_Restart;
				}

			//Read DNSCurve database file.
			#if defined(PLATFORM_WIN)
				if (_wfopen_s(&FileHandle, FileList_DNSCurveDatabase.at(FileIndex).FileName.c_str(), L"rb") != 0 || FileHandle == nullptr)
			#elif (defined(PLATFORM_FREEBSD) || defined(PLATFORM_LINUX) || defined(PLATFORM_MACOS))
				FileHandle = fopen(FileList_DNSCurveDatabase.at(FileIndex).FileName_MBS.c_str(), "rb");
				if (FileHandle == nullptr)
			#endif
				{
					if (!IsFirstRead)
						FileList_DNSCurveDatabase.at(FileIndex).ModificationTime = 0;

//					continue;
				}
				else {
					if (!ReadSupport_ReadText(FileHandle, ReadDNSCurveTextType, FileIndex))
					{
						fclose(FileHandle);
						FileHandle = nullptr;

//						continue;
					}
					else {
						fclose(FileHandle);
						FileHandle = nullptr;
					}
				}
			}

		//Read data from list.
			if (IsDNSCurveFileModified && !ReadSupport_DNSCurveDatabaseItem(ReadDNSCurveTextType))
			{
				if (IsFirstRead)
					return false;
				else 
					continue;
			}
			else {
				DNSCurveParameter.Database_LineData->clear();
			}
		}
	#endif

	//The first reading
		if (IsFirstRead)
		{
			GlobalRunningStatus.ConfigFileModifiedTime = GetCurrentSystemTime();
			return Parameter_CheckSetting(IsFirstRead, 0);
		}
	//Jump over the first reading in monitor mode.
		else if (!IsFirstMonitorRead)
		{
			if (IsConfigFileModified)
			{
			//Check parameter list and set default values.
				if (Parameter_CheckSetting(IsFirstRead, 0))
				{
					ParameterModificating.MonitorItemToUsing(&Parameter);
				#if defined(ENABLE_LIBSODIUM)
					if (Parameter.IsDNSCurve)
						DNSCurveParameterModificating.MonitorItemToUsing(&DNSCurveParameter);
				#endif
				}

			//Reset modificating list.
				ParameterModificating.MonitorItemReset();
			#if defined(ENABLE_LIBSODIUM)
				if (Parameter.IsDNSCurve)
					DNSCurveParameterModificating.MonitorItemReset();
			#endif

			//Mark configuration file modified time and flush domain cache.
				FlushDomainCache_Main(nullptr);
				GlobalRunningStatus.ConfigFileModifiedTime = GetCurrentSystemTime();
			}
		}
	//Set first reading flag.
		else {
			IsFirstMonitorRead = false;
		}

	//Auto-refresh
		IsConfigFileModified = false;
	#if defined(ENABLE_LIBSODIUM)
		IsDNSCurveFileModified = false;
	#endif

	//Next loop
		Sleep(Parameter.FileRefreshTime);
	}

//Loop terminated
	if (!GlobalRunningStatus.IsNeedExit)
		PrintError(LOG_LEVEL_TYPE::LEVEL_2, LOG_ERROR_TYPE::SYSTEM, L"Read Parameter module Monitor terminated", 0, nullptr, 0);
	return false;
}
Example #3
0
#include "QuadTimer.h"


double QuadTimer::StartTime = GetCurrentSystemTime();
int QuadTimer::fps = 20;
double QuadTimer::ProcessTime = 0;



QuadTimer::QuadTimer()
{
    //time = GetCurrentSystemTime();
    time = 0;
    //fps = framesPerSec;
}

double QuadTimer::GetProcessTime()
{
    //return GetCurrentSystemTime() - StartTime;
    return ProcessTime;
}

double QuadTimer::getTimeDiffSec()
{

    //double time2 = GetCurrentSystemTime();
    //double diffTime = time2 - time;
    //time = time2;
    //return diffTime;
    //time+=60.0/framesPerSec;