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

📄 onlineuserspage.cpp

📁 It can also accept a number of ftp connection (multithreaded), and with most of the commercial ftp s
💻 CPP
字号:
/****************************************************************/
/*																*/
/*  OnlineUsersPage.cpp											*/
/*																*/
/*  Implementation of the COnlineUsersPage class.				*/
/*	This class is a part of the FTP Server Application			*/
/*																*/
/*  Programmed by Pablo van der Meer							*/
/*  Copyright Pablo Software Solutions 2002						*/
/*	http://www.pablovandermeer.nl								*/
/*																*/
/*  Last updated: 10 july 2002									*/
/*																*/
/****************************************************************/


#include "stdafx.h"
#include "FTPServerApp.h"
#include "FTPServer.h"
#include "OnlineUsersPage.h"
#include "UserAccountsDlg.h"
#include "ApplicationDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

extern CFTPServer theServer;

IMPLEMENT_DYNCREATE(COnlineUsersPage, CDialog)

COnlineUsersPage::COnlineUsersPage() : CDialog(COnlineUsersPage::IDD)
{
	//{{AFX_DATA_INIT(COnlineUsersPage)
	//}}AFX_DATA_INIT
}

COnlineUsersPage::~COnlineUsersPage()
{
}

void COnlineUsersPage::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(COnlineUsersPage)
	DDX_Control(pDX, IDC_ONLINE_USERS, m_OnlineUsers);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(COnlineUsersPage, CDialog)
	//{{AFX_MSG_MAP(COnlineUsersPage)
	ON_WM_SIZE()
	ON_WM_CONTEXTMENU()
	ON_COMMAND(IDC_KICK_USER, OnKickUser)
	ON_COMMAND(IDC_EDIT_USER, OnEditUserAccount)
	ON_COMMAND(IDC_BLOCK_IP, OnBlockIp)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()



/********************************************************************/
/*																	*/
/* Function name : OnInitDialog										*/		
/* Description   : Called by the framework in response to the		*/
/*				   WM_INITDIALOG message.							*/
/*																	*/
/********************************************************************/
BOOL COnlineUsersPage::OnInitDialog() 
{
	CDialog::OnInitDialog();

	m_OnlineUsers.InsertColumn(0, "ThreadID");		
	m_OnlineUsers.InsertColumn(1, "Username");	
	m_OnlineUsers.InsertColumn(2, "IP Adress");	
	m_OnlineUsers.InsertColumn(3, "Login Time");
	
	DWORD dwStyle = m_OnlineUsers.GetExtendedStyle();
	dwStyle |= LVS_EX_FULLROWSELECT;
    m_OnlineUsers.SetExtendedStyle(dwStyle);
	return TRUE;
}


/********************************************************************/
/*																	*/
/* Function name : OnSize											*/		
/* Description   : Handle WM_SIZE message							*/
/*																	*/
/********************************************************************/
void COnlineUsersPage::OnSize(UINT nType, int cx, int cy) 
{
	CDialog::OnSize(nType, cx, cy);
	
	if (IsWindow(::GetDlgItem(m_hWnd, IDC_ONLINE_USERS)))
	{
		CRect rect;
		GetClientRect(rect);
		m_OnlineUsers.MoveWindow(rect);
		m_OnlineUsers.SetColumnWidth(0, 0);
		m_OnlineUsers.SetColumnWidth(1, rect.Width()/3-2);
		m_OnlineUsers.SetColumnWidth(2, rect.Width()/3-2);
		m_OnlineUsers.SetColumnWidth(3, rect.Width()/3-2);
	}	
}


/********************************************************************/
/*																	*/
/* Function name : AddUser											*/
/* Description   : Add new connected user to list					*/
/*																	*/
/********************************************************************/
void COnlineUsersPage::AddUser(DWORD nThreadID, LPCTSTR lpszName, LPCTSTR lpszAddress)
{
	CString strThreadID;
	strThreadID.Format("%d", nThreadID);

	LVFINDINFO info;
	
	info.flags = LVFI_PARTIAL|LVFI_STRING;
	info.psz = (LPCTSTR)strThreadID;

	int nIndex = m_OnlineUsers.FindItem(&info);
	if (nIndex == -1)
	{
		nIndex = m_OnlineUsers.InsertItem(0, strThreadID);
	}

	m_OnlineUsers.SetItemText(nIndex, 1, lpszName);
	m_OnlineUsers.SetItemText(nIndex, 2, lpszAddress);
	m_OnlineUsers.SetItemText(nIndex, 3, CTime::GetCurrentTime().Format("%H:%M:%S"));
	
}


/********************************************************************/
/*																	*/
/* Function name : RemoveUser										*/
/* Description   : Remove disconnected user from list				*/
/*																	*/
/********************************************************************/
void COnlineUsersPage::RemoveUser(DWORD nThreadID)
{
	LVFINDINFO info;
	
	CString strThreadID;
	strThreadID.Format("%d", nThreadID);

	info.flags = LVFI_PARTIAL|LVFI_STRING;
	info.psz = (LPCTSTR)strThreadID;

	int nIndex = m_OnlineUsers.FindItem(&info);
	if (nIndex != -1)
	{
		m_OnlineUsers.DeleteItem(nIndex);
	}
}


/********************************************************************/
/*																	*/
/* Function name : OnContextMenu									*/
/* Description   : Show context menu								*/
/*																	*/
/********************************************************************/
void COnlineUsersPage::OnContextMenu(CWnd* pWnd, CPoint point) 
{
	// get selected user
	int nIndex = m_OnlineUsers.GetNextItem(-1, LVNI_ALL | LVNI_SELECTED); 
    if(nIndex == -1)
        return;

	CMenu menu;
	menu.LoadMenu(MAKEINTRESOURCE(IDR_ONLINE_MENU));
	menu.GetSubMenu(0)->TrackPopupMenu(0, point.x, point.y, this, NULL);			

}


/********************************************************************/
/*																	*/
/* Function name : OnKickUser										*/
/* Description   : Close connection for this user(s)				*/
/*																	*/
/********************************************************************/
void COnlineUsersPage::OnKickUser() 
{
	int nIndex = m_OnlineUsers.GetNextItem(-1, LVNI_ALL | LVNI_SELECTED); 
	while (nIndex != -1)
	{
		CString strThreadID = m_OnlineUsers.GetItemText(nIndex, 0);
		PostThreadMessage(atoi(strThreadID), WM_QUIT, 0 ,0);
		nIndex = m_OnlineUsers.GetNextItem(nIndex, LVNI_ALL | LVNI_SELECTED);
	}
}


/********************************************************************/
/*																	*/
/* Function name : OnEditUserAccount								*/
/* Description   : Change user rights of selected user				*/
/*																	*/
/********************************************************************/
void COnlineUsersPage::OnEditUserAccount() 
{
	int nIndex = m_OnlineUsers.GetNextItem(-1, LVNI_ALL | LVNI_SELECTED); 
	if (nIndex != -1)	
	{
		CUserAccountsDlg dlg;

		theServer.m_UserManager.GetUserList(dlg.m_UserArray);
		dlg.m_strUserName = m_OnlineUsers.GetItemText(nIndex, 1);
		if (dlg.DoModal() == IDOK)
		{
			theServer.m_UserManager.UpdateUserList(dlg.m_UserArray);
		}	
	}
}


/********************************************************************/
/*																	*/
/* Function name : OnBlockIp										*/
/* Description   : Change user rights of selected user				*/
/*																	*/
/********************************************************************/
void COnlineUsersPage::OnBlockIp() 
{
	int nIndex = m_OnlineUsers.GetNextItem(-1, LVNI_ALL | LVNI_SELECTED); 
	if (nIndex == -1)
		return;

	while (nIndex != -1)
	{
		CString strIP = m_OnlineUsers.GetItemText(nIndex, 2);
		((CApplicationDlg *)GetParent())->m_SecurityPage.AddIPToBlockList(strIP);
		nIndex = m_OnlineUsers.GetNextItem(nIndex, LVNI_ALL | LVNI_SELECTED);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -