#include "stdafx.h" #include "RylServerBindRunID.h" #include #include CRylServerBindRunID& CRylServerBindRunID::GetInstance() { static CRylServerBindRunID bindRunID; return bindRunID; } CRylServerBindRunID::CRylServerBindRunID() { _sntprintf(m_szDefaultSetupFileName, MAX_PATH - 1, "%s", _T("./RylSetupBindServerID.ini")); m_szDefaultSetupFileName[MAX_PATH - 1] = 0; Load(); } CRylServerBindRunID::~CRylServerBindRunID() { } bool CRylServerBindRunID::SetID(unsigned long dwRunID, unsigned long dwServerID) { std::pair runIDpair = m_RunID.insert(BindIDTable::value_type(dwRunID, dwServerID)); if(runIDpair.second) { std::pair serverIDPair = m_ServerID.insert(BindIDTable::value_type(dwServerID, dwRunID)); if(serverIDPair.second) { return true; } m_RunID.erase(runIDpair.first); } return false; } bool CRylServerBindRunID::RemoveFromRunID(unsigned long dwRunID) { BindIDTable::iterator pos_runID = m_RunID.find(dwRunID); if(pos_runID != m_RunID.end()) { unsigned long dwServerID = pos_runID->second; BindIDTable::iterator pos_serverID = m_ServerID.find(dwServerID); if(pos_serverID != m_ServerID.end()) { m_RunID.erase(pos_runID); m_ServerID.erase(pos_serverID); return true; } } return false; } bool CRylServerBindRunID::RemoveFromServerID(unsigned long dwServerID) { BindIDTable::iterator pos_serverID = m_ServerID.find(dwServerID); if(pos_serverID != m_ServerID.end()) { unsigned long dwRunID = pos_serverID->second; BindIDTable::iterator pos_runID = m_RunID.find(dwRunID); if(pos_runID != m_RunID.end()) { m_RunID.erase(pos_runID); m_ServerID.erase(pos_serverID); return true; } } return false; } bool CRylServerBindRunID::GetRunID(unsigned long dwServerID, unsigned long* lpdwRunID) { BindIDTable::iterator pos = m_ServerID.find(dwServerID); if(0 != lpdwRunID && pos != m_ServerID.end()) { *lpdwRunID = pos->second; return true; } return false; } bool CRylServerBindRunID::GetServerID(unsigned long dwRunID, unsigned long* lpdwServerID) { BindIDTable::iterator pos = m_RunID.find(dwRunID); if(0 != lpdwServerID && pos != m_RunID.end()) { *lpdwServerID = pos->second; return true; } return false; } void CRylServerBindRunID::SetSetupFileName(const TCHAR* szSetupFileName) { if(0 != szSetupFileName) { _sntprintf(m_szDefaultSetupFileName, MAX_PATH - 1, "%s", szSetupFileName); m_szDefaultSetupFileName[MAX_PATH - 1] = 0; } } bool CRylServerBindRunID::Load() { HANDLE hFile = CreateFile(m_szDefaultSetupFileName, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); unsigned long dwWritten = 0; bool bResult = false; if(INVALID_HANDLE_VALUE != hFile) { size_t nBindIDNum = 0; m_RunID.clear(); m_ServerID.clear(); if(ReadFile(hFile, &nBindIDNum, sizeof(size_t), &dwWritten, 0)) { BindID bindID; for(size_t nCount = 0; nCount < nBindIDNum; ++nCount) { if(ReadFile(hFile, &bindID, sizeof(BindID), &dwWritten, 0)) { m_RunID.insert(bindID); std::swap(bindID.first, bindID.second); m_ServerID.insert(bindID); } else { break; } } if(nCount == nBindIDNum) { bResult = true; } } CloseHandle(hFile); }; return bResult; } bool CRylServerBindRunID::Save() { HANDLE hFile = CreateFile(m_szDefaultSetupFileName, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); unsigned long dwWritten = 0; bool bResult = false; if(INVALID_HANDLE_VALUE != hFile) { size_t nBindIDNum = m_RunID.size(); if(WriteFile(hFile, &nBindIDNum, sizeof(size_t), &dwWritten, 0)) { BindIDTable::iterator pos = m_RunID.begin(); BindIDTable::iterator end = m_RunID.end(); BindID bindID; for(; pos != end; ++pos) { bindID = *pos; if(!WriteFile(hFile, &bindID, sizeof(BindID), &dwWritten, 0)) { break; } } if(pos == end) { bResult = true; } } CloseHandle(hFile); }; return bResult; }