MonitorDetailWnd.cpp
上传用户:lds876
上传日期:2013-05-25
资源大小:567k
文件大小:16k
源码类别:

P2P编程

开发平台:

Visual C++

  1. // MonitorDetailWnd.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "testbt.h"
  5. #include "MonitorDetailWnd.h"
  6. #include "CategoryBarWnd.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. #define IDC_LIST_PEERS 56831
  13. #define IDC_LIST_INFOMATION 56832
  14. #define IDC_TREE_SUBFILES_MONITOR 56833
  15. #define IDC_EDIT_MSG 56834
  16. #define IDC_LIST_MSG 56834
  17. #define IDC_GRAPH_MSG 56835
  18. #define IDC_PEERINFO 56836
  19. /////////////////////////////////////////////////////////////////////////////
  20. // CMonitorDetailWnd
  21. CMonitorDetailWnd::CMonitorDetailWnd()
  22. {
  23. m_pFileDBItem = 0;
  24. m_pCategoryBarWnd = 0;
  25. m_pSetupRegister = 0;
  26. m_bShowSubFiles = false;
  27. m_bShowInfomation = false;
  28. m_iCurImageID = -1;
  29. m_bShowFileDBLog = false;
  30. }
  31. CMonitorDetailWnd::~CMonitorDetailWnd()
  32. {
  33. }
  34. BEGIN_MESSAGE_MAP(CMonitorDetailWnd, CWnd)
  35. //{{AFX_MSG_MAP(CMonitorDetailWnd)
  36. ON_WM_CREATE()
  37. ON_WM_SIZE()
  38. //}}AFX_MSG_MAP
  39. ON_MESSAGE(WM_FILE_TORRENT_OPENED, OnFileTorrentOpened)
  40. END_MESSAGE_MAP()
  41. /////////////////////////////////////////////////////////////////////////////
  42. // CMonitorDetailWnd message handlers
  43. void CMonitorDetailWnd::SetCateGoryBarWnd(CCategoryBarWnd* pCategoryBarWnd)
  44. {
  45. m_pCategoryBarWnd = pCategoryBarWnd;
  46. m_treeSubFiles.SetCateGoryBarWnd(pCategoryBarWnd);
  47. }
  48. BOOL CMonitorDetailWnd::CreateEx(CWnd *pParent, CRect rc, long lID, long lParam, CSetupRegister* pSetupRegister)
  49. {
  50. m_pSetupRegister = pSetupRegister;
  51. return Create(0, 0, WS_VISIBLE|WS_CHILD|WS_BORDER, rc, pParent, lID);
  52. }
  53. int CMonitorDetailWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  54. {
  55. if (CWnd::OnCreate(lpCreateStruct) == -1)
  56. return -1;
  57. m_listPeers.CreateEx(this, CRect(0, 0, 100, 100), IDC_LIST_PEERS, 0, m_pSetupRegister, (CMonitorWnd*)GetParent());
  58. m_listInfomation.CreateEx(this, CRect(0, 0, 100, 100), IDC_LIST_INFOMATION, 0, m_pSetupRegister, (CMonitorWnd*)GetParent());
  59. m_listMsg.CreateEx(this, CRect(0, 0, 100, 100), IDC_LIST_MSG, 0, (CMonitorWnd*)GetParent());
  60. m_treeSubFiles.CreateEx(this, CRect(0, 0, 100, 100), IDC_TREE_SUBFILES_MONITOR, true, (CMonitorWnd*)GetParent());
  61. m_graphWnd.CreateEx(this, CRect(0, 0, 100, 100), IDC_GRAPH_MSG, 0, (CMonitorWnd*)GetParent());
  62. m_listPeers.m_PeerInfoWnd.CreateEx(this, CRect(0,0, 100, 100),  &m_listPeers, IDC_PEERINFO, 0);
  63. /*
  64. m_listMsg.ShowWindow(false);
  65. m_listPeers.ShowWindow(false);
  66. m_listInfomation.ShowWindow(false);
  67. m_treeSubFiles.ShowWindow(false);
  68. m_graphWnd.ShowWindow(false);
  69. //*/
  70. m_listMsg.ShowWindow(false);
  71. m_listPeers.ShowWindow(false);
  72. m_treeSubFiles.ShowWindow(false);
  73. m_graphWnd.ShowWindow(false);
  74. m_listPeers.m_PeerInfoWnd.ShowWindow(false);
  75. return 0;
  76. }
  77. void CMonitorDetailWnd::OnSize(UINT nType, int cx, int cy) 
  78. {
  79. CWnd::OnSize(nType, cx, cy);
  80. m_listMsg.MoveWindow(CRect(0, 0, cx, cy));
  81. m_listPeers.MoveWindow(CRect(0, 0, cx, cy));
  82. m_listInfomation.MoveWindow(CRect(0, 0, cx, cy));
  83. m_treeSubFiles.MoveWindow(CRect(0, 0, cx, cy));
  84. m_graphWnd.MoveWindow(CRect(0, 0, cx, cy));
  85. m_listPeers.m_PeerInfoWnd.MoveWindow(CRect(0, 0, cx, cy));
  86. }
  87. /////////////////////////////////////////////////////////////////////////////
  88. // CMonitorDetailWnd function
  89. void CMonitorDetailWnd::Monitor(CFileDBItem* pFileDBItem)
  90. {
  91. m_pFileDBItem = pFileDBItem;
  92. if (pFileDBItem)
  93. {
  94. m_treeSubFiles.Monitor(pFileDBItem->m_strTorrentFileName, pFileDBItem->m_strFileName, pFileDBItem);
  95. // m_treeSubFiles.Monitor(&m_fileTorrent, pFileDBItem->m_strFileName);
  96. }
  97. else
  98. m_treeSubFiles.Monitor();
  99. m_listInfomation.Monitor(pFileDBItem);
  100. m_listPeers.Monitor(pFileDBItem);
  101. m_listMsg.Monitor(pFileDBItem);
  102. m_graphWnd.Monitor(pFileDBItem);
  103. m_fileTorrent.Close();
  104. m_bShowSubFiles = false;
  105. m_bShowInfomation = false;
  106. m_iCurImageID = -1;
  107. }
  108. void CMonitorDetailWnd::OnFileTorrentOpened(long lParam, long lwParam)
  109. {
  110. if (m_fileTorrent.GetOpenIndex() != lParam)
  111. return;
  112. if (!m_fileTorrent.IsOpen())
  113. {
  114. assert(false);
  115. if (m_fileTorrent.IsBad())
  116. {
  117. string strBad = m_fileTorrent.GetBadMsg();
  118. }
  119. return;
  120. }
  121. if (m_iCurImageID == IID_SUBFILES)
  122. {
  123. m_bShowSubFiles = true;
  124. m_treeSubFiles.ShowSubFiles();
  125. }
  126. else if (m_iCurImageID == IID_INFOMATION)
  127. {
  128. m_listInfomation.ShowInfomation(true);
  129. }
  130. }
  131. void CMonitorDetailWnd::ShowNode(CTreeCursor& cursor, bool bRefreshInfo)
  132. {
  133. assert(cursor);
  134. int iImageID = cursor.GetImageID();
  135. if (bRefreshInfo)
  136. {
  137. m_listMsg.ShowWindow(iImageID == IID_PEER || iImageID == IID_LOG);
  138. m_listPeers.ShowWindow(iImageID == IID_ALL_PEERS);
  139. m_listInfomation.ShowWindow(iImageID == IID_INFOMATION);
  140. m_treeSubFiles.ShowWindow(iImageID == IID_SUBFILES);
  141. m_graphWnd.ShowWindow(iImageID == IID_RUN_GRAPH);
  142. m_listPeers.m_PeerInfoWnd.ShowWindow(false);
  143. }
  144. switch (iImageID)
  145. {
  146. case IID_SUBFILES:
  147. {
  148. /*
  149. if (m_pFileDBItem && !m_fileTorrent.IsOpen() && !m_fileTorrent.IsBad())
  150. {
  151. m_fileTorrent.OpenFileEx(m_pCategoryBarWnd->GetDBSavePath() + 
  152. m_pFileDBItem->m_strTorrentFileName, string(), GetSafeHwnd());
  153. }
  154. else
  155. {
  156. //*/
  157. //*
  158. if (!m_bShowSubFiles)
  159. {
  160. m_bShowSubFiles = true;
  161. m_treeSubFiles.ShowSubFiles();
  162. }
  163. //*/
  164. // }
  165. }
  166. break;
  167. case IID_INFOMATION:
  168. {
  169. /*
  170. if (m_pFileDBItem && !m_fileTorrent.IsOpen() && !m_fileTorrent.IsBad())
  171. {
  172. m_fileTorrent.OpenFileEx(m_pCategoryBarWnd->GetDBSavePath() + 
  173. m_pFileDBItem->m_strTorrentFileName, string(), GetSafeHwnd());
  174. }
  175. else
  176. {
  177. //*/
  178. m_listInfomation.ShowInfomation(bRefreshInfo);
  179. // }
  180. // if (m_iCurImageID != iImageID)
  181. // ShowInfomation();
  182. }
  183. break;
  184. case IID_ALL_PEERS:
  185. {
  186. /*
  187. m_listPeers.SetRedraw(false);
  188. ShowAllPeers(bRefreshInfo);
  189. m_listPeers.SetRedraw(true);
  190. //*/
  191. m_listPeers.ShowAllPeers(bRefreshInfo);
  192. }
  193. break;
  194. case IID_PEER:
  195. {
  196. // ShowPeer(cursor, bRefreshInfo);
  197. }
  198. break;
  199. case IID_LOG:
  200. {
  201. m_listMsg.ShowLogs(bRefreshInfo);
  202. // ShowLogs(bRefreshInfo);
  203. }
  204. break;
  205. case IID_RUN_GRAPH:
  206. {
  207. m_graphWnd.ShowGraph(bRefreshInfo);
  208. }
  209. break;
  210. default:
  211. assert(false);
  212. }
  213. m_iCurImageID = iImageID;
  214. }
  215. /*
  216. void CMonitorDetailWnd::ShowInfomation()
  217. {
  218. m_listInfomation.DeleteAllItems();
  219. if (!m_pFileDBItem)
  220. return;
  221. m_listInfomation.InsertItem(0, "保存文件名", eASTERISK);
  222. m_listInfomation.SetItemText(0, 1, m_pFileDBItem->m_strFileName.data());
  223. m_listInfomation.InsertItem(1, "torrent文件名", eASTERISK);
  224. m_listInfomation.SetItemText(1, 1, m_pFileDBItem->m_strTorrentFileName.data());
  225. m_listInfomation.InsertItem(2, "认证码(hash)", eASTERISK);
  226. m_listInfomation.SetItemText(2, 1, m_pFileDBItem->m_strHash.data());
  227. m_listInfomation.InsertItem(3, "文件大小", eASTERISK);
  228. m_listInfomation.SetItemText(3, 1, FormatSize(m_pFileDBItem->m_lFileSize).data());
  229. CTime tCreatedTime(m_pFileDBItem->m_tTime);
  230. m_listInfomation.InsertItem(4, "创建时间", eASTERISK);
  231. m_listInfomation.SetItemText(4, 1, tCreatedTime.Format("%Y-%m-%d %H:%M"));
  232. CString strText;
  233. m_listInfomation.InsertItem(5, "已完成", eASTERISK);
  234. strText.Format("%d%%", (long)((m_pFileDBItem->m_fComplete)*100));
  235. m_listInfomation.SetItemText(5, 1, strText);
  236. m_listInfomation.InsertItem(6, "", -1);
  237. long lRunParamInx = 7;
  238. m_listInfomation.InsertItem(lRunParamInx, "绑定端口:", eASTERISK);
  239. m_listInfomation.InsertItem(lRunParamInx + 1, "最小下载者数:", eASTERISK);
  240. m_listInfomation.InsertItem(lRunParamInx + 2, "最大下载者数:", eASTERISK);
  241. m_listInfomation.InsertItem(lRunParamInx + 3, "显示间隔:", eASTERISK);
  242. m_listInfomation.InsertItem(lRunParamInx + 4, "文件安置模式:", eASTERISK);
  243. m_listInfomation.InsertItem(lRunParamInx + 5, "最大打开文件:", eASTERISK);
  244. m_listInfomation.InsertItem(lRunParamInx + 6, "最大上传速度:", eASTERISK);
  245. m_listInfomation.InsertItem(lRunParamInx + 7, "最大上传连接:", eASTERISK);
  246. if (m_pFileDBItem && m_pFileDBItem->m_pDownload && m_pFileDBItem->m_pDownload->IsDownloading())
  247. {
  248. CString strText;
  249. long lPort = 0, lPeerMin = 0, lPeerMax = 0, lDisplayItval = 0, lAllocType = 0, lFileOpenMax =0;
  250. m_pFileDBItem->m_pDownload->GetRunParameter(lPort,lPeerMin, lPeerMax, lDisplayItval, lAllocType, lFileOpenMax);
  251. strText.Format("%d", lPort);
  252. m_listInfomation.SetItemText(lRunParamInx, 1, strText);
  253. strText.Format("%d", lPeerMin);
  254. m_listInfomation.SetItemText(lRunParamInx + 1, 1, strText);
  255. strText.Format("%d", lPeerMax);
  256. m_listInfomation.SetItemText(lRunParamInx + 2, 1, strText);
  257. strText.Format("%d微秒", lDisplayItval);
  258. m_listInfomation.SetItemText(lRunParamInx + 3, 1, strText);
  259. switch (lAllocType)
  260. {
  261. case CStorageWrapperEx::eAllocNormal:
  262. strText = "普通分配";
  263. break;
  264. case CStorageWrapperEx::eAllocSparse:
  265. strText = "特殊分配";
  266. break;
  267. case CStorageWrapperEx::eAllocPreAllocate:
  268. strText = "预分配";
  269. break;
  270. case CStorageWrapperEx::eAllocBackGound:
  271. strText = "后台分配";
  272. break;
  273. }
  274. m_listInfomation.SetItemText(lRunParamInx + 4, 1, strText);
  275. strText.Format("%d", lFileOpenMax);
  276. m_listInfomation.SetItemText(lRunParamInx + 5, 1, strText);
  277. strText.Format("%d(K)", m_pFileDBItem->m_lUploadSpeedMax);
  278. m_listInfomation.SetItemText(lRunParamInx + 6, 1, strText);
  279. strText.Format("%d", m_pFileDBItem->m_lUploadPeerMax);
  280. m_listInfomation.SetItemText(lRunParamInx + 7, 1, strText);
  281. }
  282. }
  283. void CMonitorDetailWnd::ShowRunStatics()
  284. {
  285. m_listInfomation.DeleteAllItems();
  286. if (!m_pFileDBItem || !m_pFileDBItem->m_pDownload || !m_pFileDBItem->m_pDownload->IsDownloading())
  287. return;
  288. CString strText;
  289. long lPort = 0, lPeerMin = 0, lPeerMax = 0, lDisplayItval = 0, lAllocType = 0, lFileOpenMax =0;
  290. m_pFileDBItem->m_pDownload->GetRunParameter(lPort,lPeerMin, lPeerMax, lDisplayItval, lAllocType, lFileOpenMax);
  291. m_listInfomation.InsertItem(0, "绑定端口:", eASTERISK);
  292. strText.Format("%d", lPort);
  293. m_listInfomation.SetItemText(0, 1, strText);
  294. m_listInfomation.InsertItem(1, "最小下载者数:", eASTERISK);
  295. strText.Format("%d", lPeerMin);
  296. m_listInfomation.SetItemText(1, 1, strText);
  297. m_listInfomation.InsertItem(2, "最大下载者数:", eASTERISK);
  298. strText.Format("%d", lPeerMax);
  299. m_listInfomation.SetItemText(2, 1, strText);
  300. m_listInfomation.InsertItem(3, "显示间隔:", eASTERISK);
  301. strText.Format("%d微秒", lDisplayItval);
  302. m_listInfomation.SetItemText(3, 1, strText);
  303. m_listInfomation.InsertItem(4, "文件安置模式:", eASTERISK);
  304. switch (lAllocType)
  305. {
  306. case CStorageWrapperEx::eAllocNormal:
  307. strText = "普通分配";
  308. break;
  309. case CStorageWrapperEx::eAllocSparse:
  310. strText = "特殊分配";
  311. break;
  312. case CStorageWrapperEx::eAllocPreAllocate:
  313. strText = "预分配";
  314. break;
  315. case CStorageWrapperEx::eAllocBackGound:
  316. strText = "后台分配";
  317. break;
  318. }
  319. m_listInfomation.SetItemText(4, 1, strText);
  320. m_listInfomation.InsertItem(5, "最大打开文件:", eASTERISK);
  321. strText.Format("%d", lFileOpenMax);
  322. m_listInfomation.SetItemText(5, 1, strText);
  323. m_listInfomation.InsertItem(6, "最大上传速度:", eASTERISK);
  324. strText.Format("%d(K)", m_pFileDBItem->m_lUploadSpeedMax);
  325. m_listInfomation.SetItemText(6, 1, strText);
  326. m_listInfomation.InsertItem(7, "最大上传连接:", eASTERISK);
  327. strText.Format("%d", m_pFileDBItem->m_lUploadPeerMax);
  328. m_listInfomation.SetItemText(7, 1, strText);
  329. }
  330. void CMonitorDetailWnd::ShowPeer(CTreeCursor& cursor, bool bRefreshInfo)
  331. {
  332. m_listMsg.DeleteAllItems();
  333. if (m_pFileDBItem && m_pFileDBItem->m_pDownload && m_pFileDBItem->m_pDownload->IsDownloading())
  334. {
  335. CAddrPort* pData = (CAddrPort*)cursor.GetData();
  336. m_listMsg.InsertItem(m_listMsg.GetItemCount(), 
  337. m_pFileDBItem->m_pDownload->GetSocketMessage(pData->m_lAddr, pData->m_sPort).data());
  338. }
  339. else 
  340. assert(false);
  341. }
  342. void CMonitorDetailWnd::ShowLogs(bool bRefreshInfo)
  343. {
  344. if (bRefreshInfo)
  345. {
  346. m_bShowFileDBLog = false;
  347. m_listMsg.DeleteAllItems();
  348. }
  349. if (m_pFileDBItem )
  350. {
  351. if (m_pFileDBItem->m_pDownload)
  352. {
  353. vector<string> vSystemMsg;
  354. m_pFileDBItem->m_pDownload->GetSystemMessage(vSystemMsg);
  355. int iStart = 0;
  356. if (!bRefreshInfo)
  357. {
  358. iStart = m_listMsg.GetItemCount();
  359. if (m_bShowFileDBLog)
  360. {
  361. assert(iStart > 0);
  362. iStart -= 1;
  363. }
  364. }
  365. for (int i=iStart; i<vSystemMsg.size(); i++)
  366. {
  367. m_listMsg.InsertItem(i, vSystemMsg[i].data());
  368. }
  369. }
  370. else
  371. {
  372. if (!bRefreshInfo)
  373. {
  374. int iCount = m_listMsg.GetItemCount();
  375. if (m_bShowFileDBLog)
  376. iCount -= 1;
  377. for (int i=0; i<iCount; i++)
  378. m_listMsg.DeleteItem(0);
  379. }
  380. }
  381. if (!m_pFileDBItem->m_strBad.empty())
  382. {
  383. m_bShowFileDBLog = true;
  384. if (bRefreshInfo)
  385. m_listMsg.InsertItem(m_listMsg.GetItemCount(), m_pFileDBItem->m_strBad.data());
  386. }
  387. }
  388. }
  389. void CMonitorDetailWnd::OnRclickListInfomation(NMHDR* pNMHDR, LRESULT* pResult) 
  390. {
  391. CListCtrl* pListCtrl = 0;
  392. if (m_listInfomation.IsWindowVisible())
  393. pListCtrl = &m_listInfomation;
  394. // else if (m_listPeers.IsWindowVisible())
  395. // pListCtrl = &m_listPeers;
  396. // else if (m_listMsg.IsWindowVisible())
  397. // pListCtrl = &m_listMsg;
  398. if (!pListCtrl) return;
  399. bool bcopy = false;
  400. if (pListCtrl->GetSelectedCount())
  401. bcopy = true;
  402. CMenu menu_bar;
  403. menu_bar.CreatePopupMenu();
  404. if (bcopy)
  405. menu_bar.AppendMenu(MF_STRING, ID_EDIT_COPY, "复制(&C)t");
  406. /*
  407. if (pListCtrl == &m_listPeers)
  408. {
  409. menu_bar.AppendMenu(MF_STRING, ID_MENUITEM_PAUSE_PEERS, "暂停选中的连接(&P)t");
  410. menu_bar.AppendMenu(MF_STRING, ID_MENUITEM_STOP_PEERS, "关闭选中的连接(&P)t");
  411. }
  412. //*/
  413. /*
  414. menu_bar.AppendMenu(MF_STRING, ID_MENUITEM_SELECT_ALL, "全选(&A)t");
  415. CPoint posMouse;
  416. GetCursorPos(&posMouse);
  417. menu_bar.TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON,posMouse.x,posMouse.y,this);
  418. }
  419. //*/
  420. /*
  421. void CMonitorDetailWnd::OnMenuitemCopy()
  422. {
  423. CListCtrl* pListCtrl = 0;
  424. if (m_listInfomation.IsWindowVisible())
  425. pListCtrl = &m_listInfomation;
  426. // else if (m_listPeers.IsWindowVisible())
  427. // pListCtrl = &m_listPeers;
  428. // else if (m_listMsg.IsWindowVisible())
  429. // pListCtrl = &m_listMsg;
  430. if (!pListCtrl) return;
  431. CString strSource; 
  432. int nColumnCount = pListCtrl->GetHeaderCtrl()->GetItemCount();
  433. POSITION pos = pListCtrl->GetFirstSelectedItemPosition();
  434. while (pos)
  435. {
  436. int index = pListCtrl->GetNextSelectedItem(pos);
  437. for (int i=0; i<nColumnCount; i++)
  438. strSource += pListCtrl->GetItemText(index, i) + "  ";
  439. strSource += "rn";
  440. }
  441. if (!CopyTextToClipboard(strSource))
  442. AfxMessageBox("复制失败");
  443. }
  444. void CMonitorDetailWnd::OnMenuitemSelectAll()
  445. {
  446. CListCtrl* pListCtrl = 0;
  447. if (m_listInfomation.IsWindowVisible())
  448. pListCtrl = &m_listInfomation;
  449. // else if (m_listPeers.IsWindowVisible())
  450. // pListCtrl = &m_listPeers;
  451. // else if (m_listMsg.IsWindowVisible())
  452. // pListCtrl = &m_listMsg;
  453. if (!pListCtrl) return;
  454. for (int i=0; i<pListCtrl->GetItemCount(); i++)
  455. pListCtrl->SetItemState(i, LVIS_SELECTED, LVIS_SELECTED);
  456. pListCtrl->SetFocus();
  457. }
  458. //*/
  459. /*
  460. void CMonitorDetailWnd::OnMenuItemPeers(UINT uID)
  461. {
  462. if (!m_pFileDBItem || !m_pFileDBItem->m_pDownload || !m_pFileDBItem->m_pDownload->IsDownloading())
  463. {
  464. assert(false);
  465. return;
  466. }
  467. switch (uID)
  468. {
  469. case ID_MENUITEM_PAUSE_PEERS:
  470. {
  471. // m_pFileDBItem->m_pDownload->PausePeer
  472. }
  473. break;
  474. case ID_MENUITEM_STOP_PEERS:
  475. {
  476. POSITION pos = m_listPeers.GetFirstSelectedItemPosition();
  477. while (pos)
  478. {
  479. int nItem = m_listPeers.GetNextSelectedItem(pos);
  480. CAddrPort* pData = (CAddrPort*)m_listPeers.GetItemData(nItem);
  481. if (!pData)
  482. {
  483. assert(false);
  484. return;
  485. }
  486. m_pFileDBItem->m_pDownload->ClosePeer(pData);
  487. }
  488. }
  489. break;
  490. default:
  491. assert(false);
  492. }
  493. }
  494. //*/