#include "StdAfx.h" #include "SignalManager.h" #include #include #include "SignalItem.h" #include "SignalCustomRender.h" int CSignalManager::s_nUniqueIndex = 0; CSignalManager g_SignalManager; CSignalManager::CSignalManager() { char szStr[2048] = { 0, }; GetRegistryString( HKEY_CURRENT_USER, REG_SUBKEY, "WorkingFolder", szStr, 2048 ); if( strlen(szStr) == 0 ) m_szWorkingFolder = "\\\\eye-ad\\ToolData\\SignalData"; else m_szWorkingFolder = szStr; m_szFileName = "ActionInfo.dat"; CString szIP, szHost; GetLocalIP( szIP ); GetHostName( szHost ); m_szMyName = szHost; m_szMyName += ";"; m_szMyName += szIP; char szBuf[256]; sprintf_s( szBuf, m_szMyName ); for( int i=0; i<(int)strlen(szBuf); i++ ) { if( szBuf[i] == '.' ) szBuf[i] = ';'; } m_szMyName = szBuf; InitEnableSaveAndPasteSignal(); Load(); LoadDefineList(); } CSignalManager::~CSignalManager() { SAFE_DELETE_PVEC( m_pVecList ); for( DWORD i=0; ih_addr_list; if( p->h_addrtype == AF_INET ) { while( ( ptr = reinterpret_cast(*listptr++) ) != NULL ) { szIP = inet_ntoa( *ptr ); break; } } WSACleanup(); } bool CSignalManager::AddSignalItem( CSignalItem *pSignalItem ) { if( pSignalItem->GetUniqueIndex() == -1 ) { pSignalItem->SetUniqueIndex( s_nUniqueIndex ); s_nUniqueIndex++; } SetEnableSaveAndPasteSignal( pSignalItem ); m_pVecList.push_back( pSignalItem ); return true; } bool CSignalManager::RemoveSignalItem( CString &szName ) { for( DWORD i=0; iGetName() == szName ) { SAFE_DELETE( m_pVecList[i] ); m_pVecList.erase( m_pVecList.begin() + i ); } } return true; } DWORD CSignalManager::GetSignalItemCount() { return (DWORD)m_pVecList.size(); } CSignalItem *CSignalManager::GetSignalItem( DWORD dwIndex ) { if( dwIndex < 0 || dwIndex >= m_pVecList.size() ) return NULL; return m_pVecList[dwIndex]; } CSignalItem *CSignalManager::GetSignalItemFromName( CString &szSignalName ) { for( DWORD i=0; iGetName() == szSignalName ) return m_pVecList[i]; } return NULL; } CSignalItem *CSignalManager::GetSignalItemFromUniqueIndex( int nValue ) { for( DWORD i=0; iGetUniqueIndex() == nValue ) return m_pVecList[i]; } return NULL; } bool CSignalManager::IsExistSignalItem( CString &szName, CString &szOriginalName ) { for( DWORD i=0; iGetName() == szName ) { if( !szOriginalName.IsEmpty() && m_pVecList[i]->GetName() == szOriginalName ) continue; return true; } } return false; } void CSignalManager::BackupFiles( CString szFileName ) { char szFullName[2048]; char szBackupName[2048]; __time64_t ltime; char szBuf[2048]; errno_t err; time( <ime ); err = _ctime64_s( szBuf, 2048, <ime ); if( err != 0 ) return; for( int i=0; i<(int)strlen(szBuf); i++ ) { if( szBuf[i] == ' ' ) szBuf[i] = '_'; if( szBuf[i] == ':' ) szBuf[i] = ';'; } szBuf[strlen(szBuf) - 1] = 0; char szExt[256]; char szName[256]; _GetExt( szExt, _countof(szExt), szFileName ); _GetFileName( szName, _countof(szName), szFileName ); sprintf_s( szFullName, "%s\\%s", m_szWorkingFolder, szFileName ); sprintf_s( szBackupName, "%s\\%s_%s_%s.%s", m_szWorkingFolder, szName, szBuf, m_szMyName, szExt ); CopyFile( szFullName, szBackupName, FALSE ); } bool CSignalManager::Save() { #ifndef NO_BACKUP BackupFiles( m_szFileName ); #endif //NO_BACKUP FILE *fp; char szFullName[2048]; sprintf_s( szFullName, "%s\\%s", m_szWorkingFolder, m_szFileName ); fopen_s( &fp, szFullName, "wb" ); if( fp == NULL ) return false; fwrite( &s_nUniqueIndex, sizeof(int), 1, fp ); bool bResult = true; DWORD dwCount = (DWORD)m_pVecList.size(); fwrite( &dwCount, sizeof(int), 1, fp ); for( DWORD i=0; iSave( fp ) == false ) { bResult = false; break; } } fclose(fp); return bResult; } bool CSignalManager::Load() { FILE *fp; char szFullName[2048]; sprintf_s( szFullName, "%s\\%s", m_szWorkingFolder, m_szFileName ); fopen_s( &fp, szFullName, "rb" ); if( fp == NULL ) return false; fread( &s_nUniqueIndex, sizeof(int), 1, fp ); bool bResult = true; DWORD dwCount; fread( &dwCount, sizeof(int), 1, fp ); for( DWORD i=0; iLoad( fp ) == false ) { SAFE_DELETE( pItem ); SAFE_DELETE_PVEC( m_pVecList ); bResult = false; break; } SetEnableSaveAndPasteSignal( pItem ); m_pVecList.push_back( pItem ); } fclose(fp); return bResult; } void CSignalManager::ExportEnum( FILE *fp ) { fprintf_s( fp, "#pragma once\n\n" ); fprintf_s( fp, "#pragma pack(push, 4)\n" ); fprintf_s( fp, "// ½Ã±×³Î ŸÀÔ ¿­°Å\n" ); fprintf_s( fp, "enum SignalTypeEnum {\n" ); CString szStr; for( DWORD i=0; iGetName(), m_pVecList[i]->GetUniqueIndex() ); fprintf_s( fp, szStr ); } fprintf_s( fp, "};\n\n" ); fprintf_s( fp, "// ½Ã±×³Î º° ½ºÆ®·°ÃÄ\n" ); } bool CSignalManager::ExportHeader( CString szFileName ) { FILE *fp; fopen_s( &fp, szFileName, "wt" ); if( fp == NULL ) return false; std::map VecDataUsingCount; std::map VecDataUsingCount64; ExportEnum( fp ); bool bResult = true; for( DWORD i=0; iExportHeader( fp, nUsingBuffCount, nUsingBuffCount64 ) == false ) { bResult = false; break; } VecDataUsingCount.insert(std::make_pair(m_pVecList[i]->GetUniqueIndex(), nUsingBuffCount)); VecDataUsingCount64.insert(std::make_pair(m_pVecList[i]->GetUniqueIndex(), nUsingBuffCount64)); //fprintf_s( fp, "const int %sUsingCount = %d;\n\n", m_pVecList[i]->GetName(), nUsingBuffCount ); } fprintf_s(fp, "static int GetSignalDataUsingCount(int signalIdx) {\n\tswitch(signalIdx) {\n"); std::map::const_iterator iter = VecDataUsingCount.begin(); for (; iter != VecDataUsingCount.end(); ++iter) { fprintf_s(fp, "\tcase %d: return %d;\n", (*iter).first, (*iter).second); } fprintf_s(fp, "\t}\n\treturn 64;\n};\n"); fprintf_s(fp, "\nstatic int GetSignalDataUsingCount64(int signalIdx) {\n\tswitch(signalIdx) {\n"); iter = VecDataUsingCount64.begin(); for (; iter != VecDataUsingCount64.end(); ++iter) { fprintf_s(fp, "\tcase %d: return %d;\n", (*iter).first, (*iter).second); } fprintf_s(fp, "\t}\n\treturn 64;\n};\n"); fprintf_s( fp, "\n#pragma pack(pop)\n\n" ); fclose(fp); return bResult; } void CSignalManager::ChangeWorkingFolder( CString szPath ) { m_szWorkingFolder = szPath; Refresh(); } bool CSignalManager::IsCanCheckOut() { #ifdef NO_LOCK return true; #endif //NO_LOCK CString szFullName; szFullName.Format( "%s\\checkout.ini", m_szWorkingFolder ); FILE *fp; fopen_s( &fp, szFullName, "r" ); if( fp == NULL ) return true; fclose(fp); return false; } bool CSignalManager::CheckOut() { #ifdef NO_LOCK return true; #endif //NO_LOCK if( IsCanCheckOut() == false ) return false; CString szFullName; szFullName.Format( "%s\\checkout.ini", m_szWorkingFolder ); FILE *fp; fopen_s( &fp, szFullName, "wt" ); fprintf_s( fp, m_szMyName ); fclose(fp); return true; } bool CSignalManager::CheckIn() { #ifdef NO_LOCK return true; #endif //NO_LOCK CString szFullName; szFullName.Format( "%s\\checkout.ini", m_szWorkingFolder ); DeleteFile( szFullName ); return true; } void CSignalManager::LoadDefineList() { for( DWORD i=0; i szVecList; FindFileListInDirectory( m_szWorkingFolder, "*.txt", szVecList, false, false ); char szName[256] = { 0, }; CString szFullPathName; DefineStringStruct Struct; for( DWORD i=0; i &szVecList ) { FILE *fp; fopen_s( &fp, szFileName, "rt" ); if( fp == NULL ) return false; char szBuf[1024] = { 0, }; while( !feof(fp) ) { fscanf_s( fp, "%s", szBuf, 1024 ); bool bExist = false; for( DWORD i=0; iGetUniqueIndex() ); pSignalItem->SetEnableCopyAndPaste( bEnable ); } bool CSignalManager::IsEnableSaveAndPasteSignal( const int nUniqueIndex ) { std::vector::iterator first_Itor = m_vEnableSaveAndPasteSignal.begin(); std::vector::iterator end_Itor = m_vEnableSaveAndPasteSignal.end(); std::vector::iterator Itor = std::find( first_Itor, end_Itor, nUniqueIndex ); //if( end_Itor == Itor ) // return false; return true; }