⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pagepeople.cpp

📁 网络管理器源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
{
  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 + -