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)); } } }
//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; }
#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;