📄 apsinterface.cpp
字号:
{
(*m_pProfileMap)[pczNewName] = strGUID;
}
if (m_strCollectionID.empty())
{
nRes = m_pYpClient->GetGUID(strGUID, 0);
if (nRes == 0)
{
m_strCollectionID = strGUID;
}
}
m_pMutex->Release();
return ChangeProfile(pczNewName);
}
m_pMutex->Release();
return APS_PARAMERROR;
}
int APSInterface::DeleteProfile(const char *pczNewName, bool bServerToo)
{
// TODO: add server side deletion as well
if (pczNewName == NULL)
return APS_PARAMERROR;
string logfilename = m_profilePath + string(DIR_MARKER_STR) +
string(pczNewName);
#ifdef WIN32
DeleteFile(logfilename.c_str());
#else
unlink(logfilename.c_str());
#endif
m_pProfileMap->erase(pczNewName);
if (m_strCurrentProfile == pczNewName)
{
m_strCurrentProfile = ""; // clear current profile
if (m_pLogFile != NULL)
{
m_pLogFile->close();
delete m_pLogFile;
m_pLogFile = NULL;
}
}
string savedProfiles = m_profilePath + string(DIR_MARKER_STR) +
string("profiles.txt");
WriteProfileMap(savedProfiles.c_str());
return APS_NOERROR;
}
int APSInterface::LoadProfileMap(const char *pczFile)
{
if (pczFile == NULL)
return APS_PARAMERROR;
FILE* pfIn = fopen(pczFile, "r");
if (pfIn == NULL) return APS_PARAMERROR;
int nNumProfiles = 0;
string strCurrentProfileName;
string strCollectionID;
bool bIsOn = false;
int nBufLen = 2048;
int nStrLen = 0;
char* pBuffer = new char[nBufLen];
memset(pBuffer, 0x00, nBufLen);
int nRes = fread(&nNumProfiles, sizeof(int), 1, pfIn); // Number of profiles
if (nRes == 0)
{
delete [] pBuffer;
fclose(pfIn);
return APS_PARAMERROR;
}
nRes = fread(&bIsOn, sizeof(bool), 1, pfIn); // is on flag
if (nRes == 0)
{
delete [] pBuffer;
fclose(pfIn);
return APS_PARAMERROR;
}
nRes = fread(&nStrLen, sizeof(int), 1, pfIn); // len of current profile
if ((nRes == 0) && (nStrLen < nBufLen))
{
delete [] pBuffer;
fclose(pfIn);
return APS_PARAMERROR;
}
nRes = fread(pBuffer, nStrLen, 1, pfIn); // current profile
if (nRes == 0)
{
delete [] pBuffer;
fclose(pfIn);
return APS_PARAMERROR;
}
strCurrentProfileName = pBuffer;
memset(pBuffer, 0x00, nStrLen);
nRes = fread(&nStrLen, sizeof(int), 1, pfIn); // len of collection ID
if ((nRes == 0) && (nStrLen < nBufLen))
{
delete [] pBuffer;
fclose(pfIn);
return APS_PARAMERROR;
}
nRes = fread(pBuffer, nStrLen, 1, pfIn); // collection id
if (nRes == 0)
{
delete [] pBuffer;
fclose(pfIn);
return APS_PARAMERROR;
}
strCollectionID = pBuffer;
memset(pBuffer, 0x00, nStrLen);
string* pProfNames = new string[nNumProfiles];
string* pProfGUID = new string[nNumProfiles];
int i = 0;
for (i = 0; i < nNumProfiles; i++)
{
nRes = fread(&nStrLen, sizeof(int), 1, pfIn); // profile name len
if ((nRes == 0) && (nStrLen < nBufLen))
{
delete [] pProfNames;
delete [] pProfGUID;
delete [] pBuffer;
fclose(pfIn);
return APS_PARAMERROR;
}
nRes = fread(pBuffer, nStrLen, 1, pfIn); // profile name
if (nRes == 0)
{
delete [] pProfNames;
delete [] pProfGUID;
delete [] pBuffer;
fclose(pfIn);
return APS_PARAMERROR;
}
pProfNames[i] = pBuffer;
memset(pBuffer, 0x00, nStrLen);
nRes = fread(&nStrLen, sizeof(int), 1, pfIn); // GUID len
if ((nRes == 0) && (nStrLen < nBufLen))
{
delete [] pProfNames;
delete [] pProfGUID;
delete [] pBuffer;
fclose(pfIn);
return APS_PARAMERROR;
}
nRes = fread(pBuffer, nStrLen, 1, pfIn); // GUID
if (nRes == 0)
{
delete [] pProfNames;
delete [] pProfGUID;
delete [] pBuffer;
fclose(pfIn);
return APS_PARAMERROR;
}
pProfGUID[i] = pBuffer;
memset(pBuffer, 0x00, nStrLen);
}
// having successfully read in the entire profile log file, apply it
fclose(pfIn);
if (strCollectionID == "NULL")
m_strCollectionID = "";
else
m_strCollectionID = strCollectionID;
m_bRelatableOn = bIsOn;
for (i = 0; i < nNumProfiles; i++)
{
if ((!pProfNames[i].empty()) && (!pProfGUID[i].empty()))
(*m_pProfileMap)[pProfNames[i]] = pProfGUID[i];
}
delete [] pProfNames;
delete [] pProfGUID;
delete [] pBuffer;
if (!strCurrentProfileName.empty())
return ChangeProfile(strCurrentProfileName.c_str());
else
return -1; // no active profile
}
int APSInterface::WriteProfileMap(const char *pczFile)
{
if (pczFile == NULL)
return APS_PARAMERROR;
int nNumProfiles = m_pProfileMap->size();
int nStrLen = 0;
FILE* pfOut = fopen(pczFile, "w+b");
if (pfOut == NULL)
return APS_PARAMERROR;
map<string, string>::iterator i;
string strCurrentProfile = m_strCurrentProfile;
if (strCurrentProfile.empty())
strCurrentProfile = "NULL";
string strCollectionID = m_strCollectionID;
if (strCollectionID.empty())
strCollectionID = "NULL";
// file format is : numprofiles, isenabled flag, current profile name len, current profile name,
// current collection id len, current collection id,
// for each profile entry, name len, name, guid len, guid
int nRes = fwrite(&nNumProfiles, sizeof(int), 1, pfOut);
if (nRes == 0)
{
fclose(pfOut);
return APS_PARAMERROR;
}
nRes = fwrite(&m_bRelatableOn, sizeof(bool), 1, pfOut);
if (nRes == 0)
{
fclose(pfOut);
return APS_PARAMERROR;
}
nStrLen = strCurrentProfile.size();
nRes = fwrite(&nStrLen, sizeof(int), 1, pfOut);
if (nRes == 0)
{
fclose(pfOut);
return APS_PARAMERROR;
}
nRes = fwrite(strCurrentProfile.c_str(), nStrLen, 1, pfOut);
if (nRes == 0)
{
fclose(pfOut);
return APS_PARAMERROR;
}
nStrLen = strCollectionID.size();
nRes = fwrite(&nStrLen, sizeof(int), 1, pfOut);
if (nRes == 0)
{
fclose(pfOut);
return APS_PARAMERROR;
}
nRes = fwrite(strCollectionID.c_str(), nStrLen, 1, pfOut);
if (nRes == 0)
{
fclose(pfOut);
return APS_PARAMERROR;
}
for (i = m_pProfileMap->begin(); i != m_pProfileMap->end(); i++)
{
nStrLen = (*i).first.size();
nRes = fwrite(&nStrLen, sizeof(int), 1, pfOut);
if (nRes == 0)
{
fclose(pfOut);
return APS_PARAMERROR;
}
nRes = fwrite((*i).first.c_str(), nStrLen, 1, pfOut);
if (nRes == 0)
{
fclose(pfOut);
return APS_PARAMERROR;
}
nStrLen = (*i).second.size();
nRes = fwrite(&nStrLen, sizeof(int), 1, pfOut);
if (nRes == 0)
{
fclose(pfOut);
return APS_PARAMERROR;
}
nRes = fwrite((*i).second.c_str(), nStrLen, 1, pfOut);
if (nRes == 0)
{
fclose(pfOut);
return APS_PARAMERROR;
}
}
fclose(pfOut);
return APS_NOERROR;
}
int APSInterface::CombineProfile(const char *ProfileName)
{
if (ProfileName == NULL)
return APS_PARAMERROR;
bool bInList = false;
vector<string>::iterator i;
for ( i = m_pActiveProfiles->begin(); i != m_pActiveProfiles->end(); i++)
{
if (*i == ProfileName)
bInList = true;
}
if (!bInList)
{
map<string, string>::iterator i;
i = m_pProfileMap->find(ProfileName);
if (i != m_pProfileMap->end())
{
m_pActiveProfiles->insert(m_pActiveProfiles->end(), ProfileName);
}
}
return APS_NOERROR;
}
vector<string>* APSInterface::GetKnownProfiles()
{
if (m_pProfileMap->empty())
return NULL;
vector<string>* pReturn = new vector<string>;
map<string, string>::iterator i = m_pProfileMap->begin();
if (m_pProfileMap->size() == 1)
{
pReturn->insert(pReturn->end(), (*i).first);
}
else {
for (i = m_pProfileMap->begin(); i != m_pProfileMap->end(); i++)
{
pReturn->insert(pReturn->end(), (*i).first);
}
}
if (pReturn->empty())
{
delete pReturn;
return NULL;
}
return pReturn;
}
vector<string>* APSInterface::GetActiveProfiles()
{
if (!IsTurnedOn())
return NULL;
vector<string>* pReturn = new vector<string>(*m_pActiveProfiles);
return pReturn;
}
void APSInterface::ClearActiveProfiles()
{
m_pActiveProfiles->clear();
if (!m_strCurrentProfile.empty())
CombineProfile(m_strCurrentProfile.c_str());
}
int APSInterface::SyncLog()
{
if (!IsTurnedOn())
return APS_PARAMERROR;
int nRes = -1;
EventRecord TempRecord;
EventLog TheLog;
m_pMutex->Acquire();
if (m_pLogFile != NULL) // close the current log file
{
if (m_pLogFile->is_open())
m_pLogFile->close();
delete m_pLogFile;
m_pLogFile = NULL;
}
string logfilename = m_profilePath + string(DIR_MARKER_STR) +
m_strCurrentProfile;
fstream fIn(logfilename.c_str(), ios_base::in);
if (fIn.is_open()) {
TempRecord.strGUID = "blah";
// Does this deal with the spaces between fields or the binary bits
// in the GUID?
while (!fIn.eof() && !TempRecord.strGUID.empty())
{
TempRecord.strGUID.erase(TempRecord.strGUID.begin(),
TempRecord.strGUID.end());
fIn >> TempRecord.lTimeStamp >> TempRecord.strGUID
>> TempRecord.nEventType;
if (!TempRecord.strGUID.empty())
{
TheLog.push_back(TempRecord);
}
}
fIn.close();
if (TheLog.size() > 0)
{
nRes = m_pYpClient->SyncLog(TheLog,
(*m_pProfileMap)[m_strCurrentProfile]);
if (nRes == 0)
{
// empty the log file
fIn.open(logfilename.c_str(), ios_base::out | ios_base::trunc);
if (fIn.is_open())
fIn.close();
}
}
}
m_pMutex->Release();
this->ChangeProfile(m_strCurrentProfile.c_str()); // reopen logfile.
return nRes;
}
bool APSInterface::IsTurnedOn()
{
if (m_bRelatableOn && m_strCurrentProfile != "")
return true;
return false;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -