Files correlati : Ricompilazione Demo : [ ] Commento : Migliorati controlli sulla chiusura del progrqamma Aggiunti facciotti e pallotoliere git-svn-id: svn://10.65.10.50/trunk@7687 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			163 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			163 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| // ConnDlg.cpp : implementation file
 | |
| //
 | |
| 
 | |
| #include "stdafx.h"
 | |
| #include "FrontEnd.h"
 | |
| 
 | |
| #include "Connect.h"
 | |
| #include "StatDlg.h"
 | |
| #include "Server.h"
 | |
| 
 | |
| #ifdef _DEBUG
 | |
| #define new DEBUG_NEW
 | |
| #undef THIS_FILE
 | |
| static char THIS_FILE[] = __FILE__;
 | |
| #endif
 | |
| 
 | |
| /////////////////////////////////////////////////////////////////////////////
 | |
| // TConnectionsDlg dialog
 | |
| 
 | |
| 
 | |
| TConnectionsDlg::TConnectionsDlg(CWnd* pParent /*=NULL*/)
 | |
| 	: CDialog(TConnectionsDlg::IDD, pParent)
 | |
| {
 | |
| 	//{{AFX_DATA_INIT(TConnectionsDlg)
 | |
| 		// NOTE: the ClassWizard will add member initialization here
 | |
| 	//}}AFX_DATA_INIT
 | |
| }
 | |
| 
 | |
| 
 | |
| void TConnectionsDlg::DoDataExchange(CDataExchange* pDX)
 | |
| {
 | |
| 	CDialog::DoDataExchange(pDX);
 | |
| 	//{{AFX_DATA_MAP(TConnectionsDlg)
 | |
| 	DDX_Control(pDX, IDC_TREE, m_tree);
 | |
| 	//}}AFX_DATA_MAP
 | |
| }
 | |
| 
 | |
| 
 | |
| BEGIN_MESSAGE_MAP(TConnectionsDlg, CDialog)
 | |
| 	//{{AFX_MSG_MAP(TConnectionsDlg)
 | |
| 	ON_WM_CLOSE()
 | |
| 	ON_WM_TIMER()
 | |
| 	ON_BN_CLICKED(IDC_UPDATE, OnUpdateNow)
 | |
| 	ON_NOTIFY(TVN_KEYDOWN, IDC_TREE, OnKeydownUsers)
 | |
| 	//}}AFX_MSG_MAP
 | |
| END_MESSAGE_MAP()
 | |
| 
 | |
| /////////////////////////////////////////////////////////////////////////////
 | |
| // TConnectionsDlg message handlers
 | |
| 
 | |
| static int add_to_tree(TConnection& rConnection, void* pJolly)
 | |
| {
 | |
|   const TPrassiConnection& conn = (const TPrassiConnection&)rConnection;
 | |
|   CTreeCtrl& tree = *(CTreeCtrl*)pJolly;
 | |
| 
 | |
|   for (HTREEITEM hPeer = tree.GetRootItem(); hPeer; 
 | |
|        hPeer = tree.GetNextSiblingItem(hPeer))
 | |
|   {
 | |
|     if (tree.GetItemText(hPeer) == conn.PeerName())
 | |
|       break;
 | |
|   }
 | |
| 
 | |
|   if (!hPeer)
 | |
|     hPeer = tree.InsertItem(conn.PeerName(), 0, 0);
 | |
| 
 | |
|   for (HTREEITEM hUser = tree.GetChildItem(hPeer); hUser; 
 | |
|        hUser = tree.GetNextSiblingItem(hUser))
 | |
|   {
 | |
|     if (tree.GetItemText(hUser) == conn.User())
 | |
|       break;
 | |
|   }
 | |
|   if (!hUser)
 | |
|   {
 | |
|     BOOL bNewPeer = !tree.ItemHasChildren(hPeer);
 | |
|     hUser = tree.InsertItem(conn.User(), 1, 1, hPeer);
 | |
|     if (bNewPeer)
 | |
|       tree.Expand(hPeer, TVE_EXPAND);
 | |
|   }
 | |
| 
 | |
|   BOOL bNewUser = !tree.ItemHasChildren(hUser);
 | |
|   HTREEITEM hApp = tree.InsertItem(conn.Application(), 2, 2, hUser);
 | |
|   if (hApp) tree.SetItemData(hApp, conn.Id());
 | |
| 
 | |
|   if (bNewUser)
 | |
|     tree.Expand(hUser, TVE_EXPAND);
 | |
| 
 | |
|   return 1;
 | |
| }
 | |
| 
 | |
| void TConnectionsDlg::UpdateStatus()
 | |
| {
 | |
|  	TDongleServer& srv = GetServer();
 | |
| 	const int nPeers = srv.Peers();
 | |
| 	const int nUsers = srv.Users();
 | |
| 	const int nConnections = srv.Connections();
 | |
|   SetDlgItemInt(IDC_PEERS, nPeers);
 | |
|   SetDlgItemInt(IDC_USERS, nUsers);
 | |
|   SetDlgItemInt(IDC_CONNECTIONS, nConnections);
 | |
| 
 | |
|   m_tree.DeleteAllItems();
 | |
|   srv.ForEachConnection(add_to_tree, &m_tree);
 | |
| }
 | |
| 
 | |
| BOOL TConnectionsDlg::OnInitDialog() 
 | |
| {
 | |
| 	CDialog::OnInitDialog();
 | |
| 
 | |
|   HINSTANCE hInst = AfxGetResourceHandle();
 | |
|   m_Images.Create(24, 24, ILC_MASK, 3, 0);
 | |
|   m_Images.Add(::LoadIcon(hInst, "Tree_Computer"));
 | |
|   m_Images.Add(::LoadIcon(hInst, "Tree_User"));
 | |
|   m_Images.Add(::LoadIcon(hInst, "Tree_Program"));
 | |
|   m_tree.SetImageList(&m_Images,TVSIL_NORMAL);
 | |
| 
 | |
|   UpdateStatus();
 | |
| 	m_nTimerId = SetTimer(1, 10000, NULL);  // Ogni dieci secondi
 | |
| 	
 | |
| 	return TRUE;	            
 | |
| }
 | |
| 
 | |
| void TConnectionsDlg::OnClose() 
 | |
| {
 | |
| 	KillTimer(m_nTimerId);
 | |
| 	CDialog::OnClose();
 | |
| }
 | |
| 
 | |
| void TConnectionsDlg::OnTimer(UINT nIDEvent) 
 | |
| {
 | |
| 	if (m_nTimerId == nIDEvent)
 | |
|   {
 | |
|     UpdateStatus();
 | |
|   }
 | |
| 	CDialog::OnTimer(nIDEvent);
 | |
| }
 | |
| 
 | |
| void TConnectionsDlg::OnUpdateNow() 
 | |
| {
 | |
|   UpdateStatus();
 | |
| }
 | |
| 
 | |
| void TConnectionsDlg::OnKeydownUsers(NMHDR* pNMHDR, LRESULT* pResult) 
 | |
| {
 | |
| 	TV_KEYDOWN* pTVKeyDown = (TV_KEYDOWN*)pNMHDR;
 | |
| 	
 | |
|   if (pTVKeyDown->wVKey == VK_DELETE)
 | |
|   {
 | |
| 	  HTREEITEM hCurrent = m_tree.GetSelectedItem();
 | |
|     if (hCurrent && !m_tree.ItemHasChildren(hCurrent))
 | |
|     { 
 | |
|       DWORD nId = m_tree.GetItemData(hCurrent);
 | |
|    		int nCode = AfxMessageBox("Confermate la chiusura della connessione?",
 | |
| 								                MB_YESNO | MB_ICONQUESTION);
 | |
| 		  if (nCode == IDYES)
 | |
|       {
 | |
|         GetServer().RemoveConnection(nId);
 | |
|         UpdateStatus();
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| 	
 | |
| 	*pResult = 0;
 | |
| }
 |