PageNet.cpp
上传用户:geanq888
上传日期:2007-01-03
资源大小:316k
文件大小:11k
源码类别:

Ftp客户端

开发平台:

Visual C++

  1. // PageNet.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "NetManager.h"
  5. #include "PageNet.h"
  6. #include "GlobalsExtern.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CPageNet property page
  14. IMPLEMENT_DYNCREATE(CPageNet, CPropertyPage)
  15. CPageNet::CPageNet() : CPropertyPage(CPageNet::IDD)
  16. {
  17. //{{AFX_DATA_INIT(CPageNet)
  18. m_sURL = _T("");
  19. m_sName = _T("");
  20. m_nNetMinutes = 0;
  21. m_bOnEnd = FALSE;
  22. m_bOnStart = FALSE;
  23. //}}AFX_DATA_INIT
  24. }
  25. CPageNet::~CPageNet()
  26. {
  27. }
  28. void CPageNet::DoDataExchange(CDataExchange* pDX)
  29. {
  30. CPropertyPage::DoDataExchange(pDX);
  31. //{{AFX_DATA_MAP(CPageNet)
  32. DDX_Control(pDX, IDC_STATUSLINE, m_StatusLine);
  33. DDX_Control(pDX, IDC_SPIN_NET, m_NetSpin);
  34. DDX_Control(pDX, IDB_EVERY2, m_Every);
  35. DDX_Control(pDX, IDC_URL, m_URL);
  36. DDX_Control(pDX, IDC_NAME, m_Name);
  37. DDX_Text(pDX, IDC_URL, m_sURL);
  38. DDV_MaxChars(pDX, m_sURL, 128);
  39. DDX_Text(pDX, IDC_NAME, m_sName);
  40. DDV_MaxChars(pDX, m_sName, 64);
  41. DDX_Text(pDX, IDC_MINUTES2, m_nNetMinutes);
  42. DDV_MinMaxInt(pDX, m_nNetMinutes, 0, 10000);
  43. DDX_Check(pDX, IDB_ONEND2, m_bOnEnd);
  44. DDX_Check(pDX, IDB_ONSTART2, m_bOnStart);
  45. //}}AFX_DATA_MAP
  46. }
  47. BEGIN_MESSAGE_MAP(CPageNet, CPropertyPage)
  48. //{{AFX_MSG_MAP(CPageNet)
  49. ON_LBN_SELCHANGE(IDC_LIST, OnSelChangeList)
  50. ON_LBN_DBLCLK(IDC_LIST, OnDblclkList)
  51. ON_BN_CLICKED(IDB_CHECK, OnCheckAll)
  52. ON_BN_CLICKED(IDB_REMOVE, OnRemove)
  53. ON_EN_KILLFOCUS(IDC_MINUTES2, OnKillfocusMinutes2)
  54. ON_BN_CLICKED(IDB_EVERY2, OnEvery2)
  55. ON_BN_CLICKED(IDB_EDIT, OnEdit)
  56. ON_EN_SETFOCUS(IDC_URL, OnSetfocusUrl)
  57. //}}AFX_MSG_MAP
  58. END_MESSAGE_MAP()
  59. /////////////////////////////////////////////////////////////////////////////
  60. // CPageNet message handlers
  61. BOOL CPageNet::OnInitDialog() 
  62. {
  63. CPropertyPage::OnInitDialog();
  64.   m_ToolTip.Create(this);
  65.   m_ToolTip.Activate(TRUE);
  66.   CWnd* pWnd = GetWindow(GW_CHILD);
  67.   while(pWnd)
  68.   {
  69.     int nID = pWnd->GetDlgCtrlID();
  70.     if (nID != -1)
  71.       m_ToolTip.AddTool(pWnd, pWnd->GetDlgCtrlID());
  72.     pWnd = pWnd->GetWindow(GW_HWNDNEXT);
  73.   }
  74.   m_URL.SetWindowText("http://");
  75.   m_NetSpin.SetRange(0, 10000);
  76.   m_List.SubclassDlgItem(IDC_LIST, this);
  77.   if(g_bNetMonitoring)
  78.   {
  79.     m_Every.SetCheck(1);
  80.     OnEvery2();
  81.   }
  82. return TRUE;  // return TRUE unless you set the focus to a control
  83.               // EXCEPTION: OCX Property Pages should return FALSE
  84. }
  85. /////////////////////////////////////////////////////////////////////////////
  86. void CPageNet::OnSelChangeList() 
  87. {
  88.   int nItem = m_List.GetCurSel();
  89.   m_StatusLine.SetWindowText(m_aNetItems[nItem].sUrl);
  90. }
  91. /////////////////////////////////////////////////////////////////////////////
  92. void CPageNet::Add() 
  93. {
  94.   UpdateData();
  95.   if(m_sName != "" && m_sURL.GetLength() > 7)
  96.   {
  97.     DWORD dwServiceType;
  98.     CString sServer;
  99.     CString sObject;
  100.     INTERNET_PORT nNetPort;
  101.     NETITEM netitem;
  102.     AfxParseURL(m_sURL, dwServiceType, sServer, sObject, nNetPort);
  103.     if(dwServiceType == AFX_INET_SERVICE_HTTP)
  104.     {
  105.       m_List.AddString(m_sName);
  106.       netitem.sName = m_sName;
  107.       netitem.sUrl = m_sURL;
  108.       netitem.sLastModified = "never checked";
  109.       m_aNetItems.Add(netitem);
  110.       m_Name.SetWindowText("");
  111.       m_URL.SetWindowText("");
  112.       m_List.SetCheck(m_List.GetCount() - 1, 1);
  113.       g_WriteToHistory(TRUE, "[Net] Added " + m_sName);
  114.     }
  115.     else
  116.       AfxMessageBox("Sorry, only http:// services supported");
  117.   }
  118.   else
  119.     AfxMessageBox("Enter Name and URL");
  120. }
  121. /////////////////////////////////////////////////////////////////////////////
  122. void CPageNet::OnRemove() 
  123. {
  124.   UpdateData();
  125.   int nCurSel = m_List.GetCurSel();
  126.   if(nCurSel != LB_ERR)
  127.   {
  128.     if(MessageBox("Remove this item???", NULL, MB_ICONQUESTION | MB_YESNO) == IDYES)
  129.     {
  130.       g_WriteToHistory(TRUE, "[Net] Removed " + m_aNetItems[nCurSel].sName);
  131.       m_List.DeleteString(nCurSel);
  132.       m_aNetItems.RemoveAt(nCurSel);
  133.       m_StatusLine.SetWindowText("");
  134.     }
  135.   }
  136. }
  137. /////////////////////////////////////////////////////////////////////////////
  138. void CPageNet::OnEdit() 
  139. {
  140.   UpdateData();
  141.   int nCurSel = m_List.GetCurSel();
  142.   if(nCurSel != LB_ERR)
  143.   {
  144.     int nCurSel = m_List.GetCurSel(); 
  145.     m_Name.SetWindowText(m_aNetItems[nCurSel].sName);
  146.     m_URL.SetWindowText(m_aNetItems[nCurSel].sUrl);
  147.   }
  148. }
  149. /////////////////////////////////////////////////////////////////////////////
  150. void CPageNet::OnDblclkList() 
  151. {
  152.   UpdateData();
  153.   int nCurSel = m_List.GetCurSel(); 
  154.   CString sOutput;
  155.   Check(nCurSel, sOutput);
  156.   g_WriteToOutput(TRUE, sOutput);
  157. }
  158. /////////////////////////////////////////////////////////////////////////////
  159. void CPageNet::OnKillfocusMinutes2() 
  160. {
  161.   UpdateData(); 
  162.   if(m_Every.GetCheck())
  163.   {
  164.     UINT nSpeed = m_nNetMinutes * TIMER_DELAY;
  165.     if(nSpeed == 0)
  166.       nSpeed = 10 * 1000;
  167.     GetParentOwner()->SetTimer(TIMER_NET_ID, nSpeed, NULL);
  168.   }
  169. }
  170. /////////////////////////////////////////////////////////////////////////////
  171. void CPageNet::OnEvery2() 
  172. {
  173.   if(m_Every.GetCheck())
  174.   {
  175.     UINT nSpeed = m_nNetMinutes * TIMER_DELAY;
  176.     if(nSpeed == 0)
  177.       nSpeed = 10 * 1000;
  178.     GetParentOwner()->SetTimer(TIMER_NET_ID, nSpeed, NULL);
  179.     g_AnimateNet->Play(0, -1, -1);
  180.     g_WriteToHistory(TRUE, "[Net] Monitoring started...");
  181.     g_pMainWnd->GetMenu()->CheckMenuItem(IDM_NETMONITOR, MF_CHECKED | MF_BYCOMMAND);
  182.   }
  183.   else
  184.   {
  185.     GetParentOwner()->KillTimer(TIMER_NET_ID);
  186.     g_AnimateNet->Play(0, 0, 0);
  187.     g_WriteToHistory(TRUE, "[Net] Monitoring stopped...");
  188.     g_pMainWnd->GetMenu()->CheckMenuItem(IDM_NETMONITOR, MF_UNCHECKED | MF_BYCOMMAND);
  189.   }
  190. }
  191. /////////////////////////////////////////////////////////////////////////////
  192. void CPageNet::OnCheckAll()
  193. {
  194.   CString sOutput;
  195.   CheckAll(sOutput);
  196.   g_WriteToHistory(TRUE, sOutput);
  197. }
  198. /////////////////////////////////////////////////////////////////////////////
  199. bool CPageNet::CheckAll(CString& sOutput)
  200. {
  201.   UpdateData();
  202.   bool bResult = false;
  203.   int nItemNum = m_List.GetCount();
  204.   for(int nItem = 0; nItem < nItemNum; nItem++)
  205.   {
  206.     if(m_List.GetCheck(nItem))
  207.       if(Check(nItem, sOutput))
  208.         bResult = true;
  209.   }
  210.   return bResult;
  211. }
  212. /////////////////////////////////////////////////////////////////////////////
  213. bool CPageNet::Check(int nItem, CString& sOutputText)
  214. {
  215.   bool bResult = false;
  216.   CString sOldModified = m_aNetItems[nItem].sLastModified;
  217.   DWORD dwServiceType;
  218.   CString sServer;
  219.   CString sObject;
  220.   INTERNET_PORT nNetPort;
  221.   AfxParseURL(m_aNetItems[nItem].sUrl, dwServiceType, sServer, sObject, nNetPort);
  222.   // http service -----------------------------------------------------------
  223.   if(dwServiceType == AFX_INET_SERVICE_HTTP)
  224.   {
  225.     sOutputText += "[Net] Checking " + m_aNetItems[nItem].sName + ' ';
  226.     HINTERNET m_Session;
  227.     m_Session = ::InternetOpen(AfxGetAppName(), INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
  228.     if(!m_Session)
  229.     {
  230.       sOutputText += "Error - HTTP Session";
  231.       bResult = true;
  232.     }
  233.     else
  234.     {
  235.       HINTERNET hHttpFile;
  236.       char szLastModified[32];
  237.       DWORD dwLengthLastModified = sizeof(szLastModified); 
  238.       hHttpFile = InternetOpenUrl(m_Session, (const char*) m_aNetItems[nItem].sUrl, NULL, 0, 0, 0); // Opening the Url and getting a Handle for HTTP file
  239.       if(hHttpFile)
  240.       {    
  241.         if(::HttpQueryInfo(hHttpFile, HTTP_QUERY_LAST_MODIFIED, szLastModified, &dwLengthLastModified, NULL))  // Getting the size of HTTP Files
  242.         {
  243.           sOutputText += szLastModified;
  244.           if(sOldModified.CompareNoCase(szLastModified) != 0)
  245.           {
  246.             m_aNetItems[nItem].sLastModified = szLastModified;
  247.             sOutputText += "- File updated!";
  248.             bResult = true;
  249.           }
  250.         }
  251.         ::InternetCloseHandle(hHttpFile);           // Close the connection.
  252.       }
  253.       else
  254.       {
  255.         sOutputText += "Error - HTTP File " + m_aNetItems[nItem].sUrl;
  256.         bResult = true;
  257.       }
  258.       ::InternetCloseHandle(m_Session);
  259.     }
  260.   }
  261.   else
  262.     sOutputText += "[Net] Sorry, only http:// services supported";
  263.   return bResult;
  264. }
  265. /////////////////////////////////////////////////////////////////////////////
  266. BOOL CPageNet::PreTranslateMessage(MSG* pMsg) 
  267. {
  268.   // transate the message based on TTM_WINDOWFROMPOINT
  269.   MSG msg = *pMsg;
  270.   msg.hwnd = (HWND)m_ToolTip.SendMessage(TTM_WINDOWFROMPOINT, 0, (LPARAM)&msg.pt);
  271.   CPoint pt = pMsg->pt;
  272.   if (msg.message >= WM_MOUSEFIRST && msg.message <= WM_MOUSELAST)
  273.           ::ScreenToClient(msg.hwnd, &pt);
  274.   msg.lParam = MAKELONG(pt.x, pt.y);
  275.   // Let the ToolTip process this message.
  276.   m_ToolTip.RelayEvent(&msg);
  277.   if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)
  278.   {
  279.     switch(GetFocus()->GetDlgCtrlID())
  280.     {
  281.       case IDC_NAME:
  282.         m_URL.SetFocus();
  283.         break;
  284.       case IDC_URL:
  285.         Add();
  286.         m_Name.SetFocus();
  287.         break;
  288.       case IDC_MINUTES2:
  289.         m_Every.SetFocus();
  290.         break;
  291.     }
  292.   }
  293. return CPropertyPage::PreTranslateMessage(pMsg);
  294. }
  295. /////////////////////////////////////////////////////////////////////////////
  296. void CPageNet::OnSetfocusUrl() 
  297. {
  298.   CString sOldText;
  299.   m_URL.GetWindowText(sOldText);
  300.   DWORD dwServiceType;
  301.   CString sServer;
  302.   CString sObject;
  303.   INTERNET_PORT nNetPort;
  304.   AfxParseURL(sOldText, dwServiceType, sServer, sObject, nNetPort);
  305.   if(dwServiceType == AFX_INET_SERVICE_HTTP)
  306.     m_URL.SetWindowText(sOldText);
  307.   else
  308.   {
  309.     if(sOldText.GetLength() <= 7)
  310.       m_URL.SetWindowText("http://");
  311.     else
  312.       m_URL.SetWindowText("http://" + sOldText);
  313.   }
  314.   m_URL.SetSel(7, -1);
  315. }
  316. /////////////////////////////////////////////////////////////////////////////
  317. void CPageNet::Serialize(CArchive& ar) 
  318. {
  319. if (ar.IsStoring())
  320. { // storing code
  321.   
  322.     ar << m_bOnStart;
  323.     ar << m_bOnEnd;
  324.     ar << m_nNetMinutes;
  325.     int j = m_aNetItems.GetSize();
  326.     ar << j;
  327.     for(int i = 0; i < j; i++)
  328.     {
  329.       ar << m_aNetItems[i].sName;
  330.       ar << m_aNetItems[i].sUrl;
  331.       ar << m_aNetItems[i].sLastModified;
  332.       ar << m_List.GetCheck(i);
  333.     }
  334. }
  335. else
  336. { // loading code
  337.     ar >> m_bOnStart;
  338.     ar >> m_bOnEnd;
  339.     ar >> m_nNetMinutes;
  340.     NETITEM netitem;
  341.     int j, k;
  342.     ar >> j;
  343.     for(int i = 0; i < j; i++)
  344.     {
  345.       ar >> netitem.sName;
  346.       ar >> netitem.sUrl;
  347.       ar >> netitem.sLastModified;
  348.       ar >> k;
  349.       m_aNetItems.Add(netitem);
  350.       m_List.AddString(m_aNetItems[i].sName);
  351.       m_List.SetCheck(i, k);
  352.     }
  353. }
  354. }
  355. /////////////////////////////////////////////////////////////////////////////