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;
 | 
						|
}
 |