📄 pagepeople.cpp
字号:
{
HTREEITEM hCurrItem = m_ServerTree.GetSelectedItem();
if((m_ServerTree.GetItemState(hCurrItem, TVIS_STATEIMAGEMASK) & TVIS_STATEIMAGEMASK) == INDEXTOSTATEIMAGEMASK(ICON_MANUAL))
m_ServerTree.SetItemState(hCurrItem, INDEXTOSTATEIMAGEMASK(ICON_EMPTY), TVIS_STATEIMAGEMASK);
else
m_ServerTree.SetItemState(hCurrItem, INDEXTOSTATEIMAGEMASK(ICON_MANUAL), TVIS_STATEIMAGEMASK);
}
/////////////////////////////////////////////////////////////////////////////
void CPagePeople::OnActive()
{
HTREEITEM hCurrItem = m_ServerTree.GetSelectedItem();
m_ServerTree.SetItemData(hCurrItem, 0);
if(m_ServerTree.GetItemState(hCurrItem, TVIF_STATE) & TVIS_BOLD)
m_ServerTree.SetItemState(hCurrItem, NULL, TVIS_BOLD);
else
m_ServerTree.SetItemState(hCurrItem, TVIS_BOLD, TVIS_BOLD);
IfCanCheckAll();
}
/////////////////////////////////////////////////////////////////////////////
void CPagePeople::OnActiveMail()
{
HTREEITEM hCurrItem = m_ServerTree.GetSelectedItem();
if((m_ServerTree.GetItemState(hCurrItem, TVIS_STATEIMAGEMASK) & TVIS_STATEIMAGEMASK) == INDEXTOSTATEIMAGEMASK(ICON_MAIL))
m_ServerTree.SetItemState(hCurrItem, INDEXTOSTATEIMAGEMASK(ICON_EMPTY), TVIS_STATEIMAGEMASK);
else
m_ServerTree.SetItemState(hCurrItem, INDEXTOSTATEIMAGEMASK(ICON_MAIL), TVIS_STATEIMAGEMASK);
IfCanCheckAll();
}
/////////////////////////////////////////////////////////////////////////////
void CPagePeople::OnDblclkServertree(NMHDR* pNMHDR, LRESULT* pResult)
{
HTREEITEM hParentItem;
HTREEITEM hCurrItem = m_ServerTree.GetSelectedItem();
CString sServer;
CString sUser;
sUser = m_ServerTree.GetItemText(hCurrItem);
if(hParentItem = m_ServerTree.GetParentItem(hCurrItem))
{
sServer = m_ServerTree.GetItemText(hParentItem);
if((m_ServerTree.GetItemState(hParentItem, TVIS_STATEIMAGEMASK) & TVIS_STATEIMAGEMASK) == INDEXTOSTATEIMAGEMASK(ICON_MANUAL))
FingerManual(sServer, sUser); // manual finger
else
{
CStringArray* pasFinger = new CStringArray;
pasFinger->Add(sServer);
pasFinger->Add(sUser);
AfxBeginThread(g_FingerThread, pasFinger);
}
}
*pResult = 0;
}
/////////////////////////////////////////////////////////////////////////////
void CPagePeople::OnFingerManual()
{
UpdateData();
if(m_sServer == "" || m_sUser == "")
AfxMessageBox("You must enter a server and a user!");
else
{
CString sUserFind = m_sUser;
if(sUserFind.GetAt(0) == '"')
sUserFind = sUserFind.Mid(1, sUserFind.GetLength()-2);
FingerManual(m_sServer, sUserFind);
}
}
/////////////////////////////////////////////////////////////////////////////
void CPagePeople::FingerManual(CString sServer, CString sUser)
{
CString sFingerText;
if(g_Finger(sServer, sUser, sFingerText))
{
CString sUserFind = sUser;
if(sUserFind.GetAt(0) == '"')
sUserFind = sUserFind.Mid(1, sUserFind.GetLength()-2);
sUserFind.MakeUpper();
sFingerText.MakeUpper();
CString sOutput;
if(sFingerText.Find(sUserFind) != -1)
sOutput = "[People] User " + sUser + " is ON-Line!";
else
sOutput = "[People] User " + sUser + " is OFF-Line!";
g_WriteToHistory(TRUE, sOutput);
}
else
{
CString sOutputText = g_MakeWindowsTextLines(sFingerText);
g_WriteToHistory(TRUE, sOutputText);
}
}
/////////////////////////////////////////////////////////////////////////////
void CPagePeople::OnCheckAll()
{
ResetServersAndUsers();
CString sOutput;
CheckAll(sOutput);
g_WriteToOutput(TRUE, sOutput);
}
/////////////////////////////////////////////////////////////////////////////
void CPagePeople::OnEvery()
{
if(m_Every.GetCheck())
{
UINT nSpeed = m_nPeopleMinutes * TIMER_DELAY;
if(nSpeed == 0)
nSpeed = 10*1000;
ResetServersAndUsers();
GetParentOwner()->SetTimer(TIMER_PEOPLE_ID, nSpeed, NULL);
g_AnimatePeople->Play(0, -1, -1);
g_WriteToHistory(TRUE, "[People] Monitoring started...");
g_pMainWnd->GetMenu()->CheckMenuItem(IDM_PEOPLEMONITOR, MF_CHECKED | MF_BYCOMMAND);
}
else
{
g_AnimatePeople->Play(0, 0, 0);
GetParentOwner()->KillTimer(TIMER_PEOPLE_ID);
g_WriteToHistory(TRUE, "[People] Monitoring stopped...");
g_pMainWnd->GetMenu()->CheckMenuItem(IDM_PEOPLEMONITOR, MF_UNCHECKED | MF_BYCOMMAND);
}
}
/////////////////////////////////////////////////////////////////////////////
void CPagePeople::OnKillfocusMinutes()
{
UpdateData();
if(m_Every.GetCheck())
{
UINT nSpeed = m_nPeopleMinutes * TIMER_DELAY;
if(nSpeed == 0)
nSpeed = 10*1000;
GetParentOwner()->SetTimer(TIMER_PEOPLE_ID, nSpeed, NULL);
}
}
/////////////////////////////////////////////////////////////////////////////
void CPagePeople::ResetServersAndUsers()
{
HTREEITEM hServerItem = m_ServerTree.GetRootItem();
HTREEITEM hUserItem;
CString sItem;
do
{
sItem = m_ServerTree.GetItemText(hServerItem);
m_ServerTree.SetItemData(hServerItem, 0);
if(hUserItem = m_ServerTree.GetChildItem(hServerItem))
{
do
{
sItem = m_ServerTree.GetItemText(hUserItem);
m_ServerTree.SetItemData(hUserItem, 0);
hUserItem = m_ServerTree.GetNextSiblingItem(hUserItem);
}
while(hUserItem);
}
hServerItem = m_ServerTree.GetNextSiblingItem(hServerItem);
}
while(hServerItem);
}
/////////////////////////////////////////////////////////////////////////////
bool CPagePeople::IfCanCheckAll()
{
bool bResult = FALSE;
bool bServer;
HTREEITEM hServerItem = m_ServerTree.GetRootItem();
HTREEITEM hUserItem;
CString sItem;
do
{
bServer = FALSE;
if(m_ServerTree.GetItemState(hServerItem, TVIF_STATE) & TVIS_BOLD)
bServer = TRUE;
if(hUserItem = m_ServerTree.GetChildItem(hServerItem))
{
do
{
if(bServer == TRUE)
{
if(m_ServerTree.GetItemState(hUserItem, TVIF_STATE) & TVIS_BOLD)
bResult = TRUE;
if((m_ServerTree.GetItemState(hUserItem, TVIS_STATEIMAGEMASK) & TVIS_STATEIMAGEMASK) == INDEXTOSTATEIMAGEMASK(ICON_MAIL))
bResult = TRUE;
}
hUserItem = m_ServerTree.GetNextSiblingItem(hUserItem);
}
while(hUserItem);
}
hServerItem = m_ServerTree.GetNextSiblingItem(hServerItem);
}
while(hServerItem);
if(bResult)
{
m_CheckAll.EnableWindow(TRUE);
m_Every.EnableWindow(TRUE);
g_pMainWnd->GetMenu()->EnableMenuItem(IDM_PEOPLEMONITOR, MF_ENABLED);
}
else
{
m_CheckAll.EnableWindow(FALSE);
m_Every.EnableWindow(FALSE);
g_pMainWnd->GetMenu()->CheckMenuItem(IDM_PEOPLEMONITOR, MF_UNCHECKED | MF_BYCOMMAND);
g_pMainWnd->GetMenu()->EnableMenuItem(IDM_PEOPLEMONITOR, MF_GRAYED);
m_Every.SetCheck(0);
g_AnimatePeople->Play(0, 0, 0);
GetParentOwner()->KillTimer(TIMER_PEOPLE_ID);
}
return bResult;
}
/////////////////////////////////////////////////////////////////////////////
bool CPagePeople::CheckAll(CString& sOutputText)
{
#define USER_CHECKED_ACTIVE 1
#define USER_CHECKED_MAIL 2
bool bCheckStatus = false;
if(IfCanCheckAll())
{
HTREEITEM hServerItem = m_ServerTree.GetRootItem();
HTREEITEM hUserItem;
CString sServer, sUser, sUserFind;
CString sFingerText, sFingerTextNM;
DWORD dwUserData;
int n;
bool bFingerStatus;
do
{
if(m_ServerTree.GetItemState(hServerItem, TVIF_STATE) & TVIS_BOLD) // is the server active?
{
bFingerStatus = false;
sFingerText = "";
sFingerTextNM = "";
if(hUserItem = m_ServerTree.GetChildItem(hServerItem))
{
do
{
dwUserData = m_ServerTree.GetItemData(hUserItem); // get the data
// login or logout ------------------------------------------------
if((m_ServerTree.GetItemState(hUserItem, TVIF_STATE) & TVIS_BOLD)) // is the user active?
{
if(!bFingerStatus)
{
bFingerStatus = true;
sServer = m_ServerTree.GetItemText(hServerItem);
if(!g_Finger(sServer, "", sFingerText))
{
sOutputText += g_MakeWindowsTextLines(sFingerText);
sOutputText += "\r\n\0";
bCheckStatus = true;
}
else
sFingerText.MakeUpper();
}
sUser = m_ServerTree.GetItemText(hUserItem);
if((n = sUser.Find('.')) != -1)
sUser.SetAt(n, ' ');
if((n = sUser.Find('_')) != -1)
sUser.SetAt(n, ' ');
sUserFind = sUser;
sUserFind.MakeUpper();
if(sUserFind.GetAt(0) == '"')
sUserFind = sUserFind.Mid(1, sUserFind.GetLength() - 2);
if(sFingerText.Find(sUserFind) != -1)
{
if(!(dwUserData & USER_CHECKED_ACTIVE))
{
dwUserData |= USER_CHECKED_ACTIVE;
sOutputText += ("[People] User " + sUser + " is ON-Line! (" + sServer +")\r\n");
bCheckStatus = true;
}
}
else
{
if(dwUserData & USER_CHECKED_ACTIVE)
{
dwUserData ^= USER_CHECKED_ACTIVE;
sOutputText += ("[People] User " + sUser + " is OFF-Line! (" + sServer + ")\r\n");
bCheckStatus = true;
}
}
}
// new mail -------------------------------------------------------
if((m_ServerTree.GetItemState(hUserItem, TVIS_STATEIMAGEMASK) & TVIS_STATEIMAGEMASK) == INDEXTOSTATEIMAGEMASK(ICON_MAIL)) // kontrolovat mail?
{
sServer = m_ServerTree.GetItemText(hServerItem);
sUser = m_ServerTree.GetItemText(hUserItem);
if(!g_Finger(sServer, sUser, sFingerTextNM))
{
sOutputText += g_MakeWindowsTextLines(sFingerTextNM);
sOutputText += "\r\n\0";
bCheckStatus = true;
}
else
{
sFingerTextNM.MakeUpper();
if(!(sFingerTextNM.Find("NO MAIL") != -1 || sFingerTextNM.Find("NO UNREAD") != -1))
if(!(dwUserData & USER_CHECKED_MAIL))
{
dwUserData |= USER_CHECKED_MAIL;
sOutputText += ("[People] User " + sUser + " has New Mail! (" + sServer + ")\r\n");
bCheckStatus = true;
}
}
}
// ----------------------------------------------------------------
m_ServerTree.SetItemData(hUserItem, dwUserData);
hUserItem = m_ServerTree.GetNextSiblingItem(hUserItem);
}
while(hUserItem);
}
}
hServerItem = m_ServerTree.GetNextSiblingItem(hServerItem);
}
while(hServerItem);
if(!bCheckStatus)
sOutputText = "[People] - No changes, Nobody Online\r\n";
}
else
sOutputText = "[People] - Nothing to check\r\n";
return bCheckStatus;
}
/////////////////////////////////////////////////////////////////////////////
UINT g_LocalNet(LPVOID pParam)
{
CPagePeople* pOwner = (CPagePeople*)pParam;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -