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

📄 admindlg.cpp

📁 网络游戏龙族服务器端管理工具 rmtool 源代码
💻 CPP
字号:
// AdminDlg.cpp : implementation file
//

#include "stdafx.h"
#include "rmtool.h"
#include "AdminDlg.h"

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

#include "AccountAuthority.h"
/////////////////////////////////////////////////////////////////////////////
// CAdminDlg dialog
CAdminDlg cAdmindlg;

CAdminDlg::CAdminDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CAdminDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CAdminDlg)
	m_ID = _T("");
	m_IP = _T("");
	m_Name = _T("");
	m_Password = _T("");
	m_ToDay = 0;
	m_ToMonth = 0;
	m_ToYear = 0;
	m_FromDay = 0;
	m_FromMonth = 0;
	m_FromYear = 0;
	m_Type = 0;
	m_szAuthorityType = _T("");
	//}}AFX_DATA_INIT
}


void CAdminDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAdminDlg)
	DDX_Control(pDX, IDC_LIST_LOG, c_Log);
	DDX_Control(pDX, IDC_LIST_ACCOUNT, c_Account);
	DDX_Text(pDX, IDC_ID, m_ID);
	DDX_Text(pDX, IDC_IP, m_IP);
	DDX_Text(pDX, IDC_NAME, m_Name);
	DDX_Text(pDX, IDC_PASSWORD, m_Password);
	DDX_Text(pDX, IDC_TO_DAY, m_ToDay);
	DDX_Text(pDX, IDC_TO_MONTH, m_ToMonth);
	DDX_Text(pDX, IDC_TO_YEAR, m_ToYear);
	DDX_Text(pDX, IDC_FROM_DAY, m_FromDay);
	DDX_Text(pDX, IDC_FROM_MONTH, m_FromMonth);
	DDX_Text(pDX, IDC_FROM_YEAR, m_FromYear);
	DDX_Text(pDX, IDC_TYPE, m_Type);
	DDV_MinMaxUInt(pDX, m_Type, 0, 4294967295);
	DDX_Text(pDX, IDC_AUTHORITY_TYPE, m_szAuthorityType);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CAdminDlg, CDialog)
	//{{AFX_MSG_MAP(CAdminDlg)
	ON_BN_CLICKED(IDC_NEW_ACCOUNT, OnNewAccount)
	ON_BN_CLICKED(IDC_DELETE, OnDelete)
	ON_BN_CLICKED(IDC_SEARCH, OnSearch)
	ON_BN_CLICKED(IDC_OK, OnOk)
	ON_NOTIFY(NM_CLICK, IDC_LIST_ACCOUNT, OnClickListAccount)
	ON_BN_CLICKED(IDC_BTN_SET_AUTHORITY, OnBtnSetAuthority)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CAdminDlg message handlers

BOOL CAdminDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	char *Column[4]  = {"ID", "Name", "Authority", "IP"};
	int	 ColumnSize[4] = {100, 70, 50, 100};
	
	c_Log.SetExtendedStyle(LVS_EX_FULLROWSELECT); 
	c_Account.SetExtendedStyle(LVS_EX_FULLROWSELECT); 
	LV_COLUMN col;
	for(int i=0 ; i<4 ; i++)
	{
		//ListView 牧飘费 檬扁拳..  漠烦汲沥 	
		col.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM | LVCF_FMT;
		col.fmt = LVCFMT_LEFT;
		col.cx = ColumnSize[i];
		col.pszText = Column[i];
		col.cchTextMax = 100;
		col.iSubItem = i;

		c_Account.InsertColumn(i, &col);
	}

	char *Column2[6]  = {"No", "ID", "Type", "Date", "ClientIP", "Log"};
	int	 ColumnSize2[6] = {50, 70, 50, 100, 100, 1000};
	for(i=0 ; i<6 ; i++)
	{
		//ListView 牧飘费 檬扁拳..  漠烦汲沥 	
		col.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM | LVCF_FMT;
		col.fmt = LVCFMT_LEFT;
		col.cx = ColumnSize2[i];
		col.pszText = Column2[i];
		col.cchTextMax = 100;
		col.iSubItem = i;

		c_Log.InsertColumn(i, &col);
	}


	//拌沥 孽府..
	WCHAR wszQuery[ 0xff ];
	swprintf(wszQuery, L"select * from rm_log_info");

	LoginAccount account[ 50 ];
	int ret = g_pDb->OpenRecord(wszQuery, account, (DWORD)(50), (BYTE)TOTAL_DB);

	if(ret <0)
	{
		MessageBox("Fail to query RM_LOG_INFO","Error");
		goto lb_exit;
	}
	else if(ret == 50)
		MessageBox("MAX 50","Error");	//kyo 020314
		//MessageBox("弥措 50俺鳖瘤狼 拌沥沥焊父 免仿邓聪促.","Error"); 

	
	LVITEM item;
	char temp[ 64 ];
	for(i=0; i<ret ; i++)
	{
		
		//id 
		item.mask = LVIF_TEXT | LVIF_PARAM;
		item.pszText = account[i].id;
		item.iItem = i;					//青锅龋 
		item.iSubItem = 0;				//凯锅龋 
		//item.lParam = account[i].;
		c_Account.InsertItem(&item);

		
		//捞抚 
		item.mask = LVIF_TEXT;
		item.iSubItem = 1;
		item.pszText = account[i].name;
		c_Account.SetItem(&item);

		//鼻茄
		item.mask = LVIF_TEXT;
		item.iSubItem = 2;
		item.pszText = _itoa(account[i].logintype, temp, 10);
		c_Account.SetItem(&item);

		//IP
		item.mask = LVIF_TEXT;
		item.iSubItem = 3;
		item.pszText = account[i].ip;
		c_Account.SetItem(&item);

	}


	m_IP = "0"; //kyo 020725 ip甫 汲沥窍瘤 臼绰促. 

lb_exit:
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

BOOL CAdminDlg::IsExistedAccout( LPSTR szAccountName)
{
	char szQuery[ 0xff ];
	WCHAR wszQuery[ 0xff ];

	sprintf(szQuery, "select [ID] from RM_LOG_INFO where [ID] = '%s'", szAccountName );
	g_pDb->KSCToUnicode(szQuery,wszQuery);
	char tmp[CHARACTER_NAME_SIZE];
	int ret = g_pDb->OpenRecord(wszQuery, tmp, CHARACTER_NAME_SIZE, (BYTE)TOTAL_DB);

	if ( ret > 0 )
		return TRUE;
	else
		return FALSE;
}

void CAdminDlg::OnNewAccount() 
{
	// TODO: Add your control notification handler code here
	UpdateData();

	if( m_ID.GetLength() <= 0 ) { AfxMessageBox( "Writed ID" ); return; }
	else if( m_Name.GetLength() <= 0 ) { AfxMessageBox( "Writed Name" );return; }
	//else if( m_Password.GetLength() <= 0 ) AfxMessageBox( "Writed Password" );
	else if( m_Password.Compare("*********") ==0 ) { AfxMessageBox( "Change Password" );return; }
	

	if( TRUE == IsExistedAccout( m_ID.GetBuffer(0) ) )
	{
		AfxMessageBox( "Allready Existed Same ID!!" );
		return;
	}

	char szQuery[ 0xff ];
	WCHAR wszQuery[ 0xff ];

	sprintf(szQuery, "insert into RM_LOG_INFO ([ID],[Password],[Name],LoginType,IP) values ('%s',"
						"'%s','%s',%d,'%s')", m_ID, m_Password, m_Name, m_Type, m_IP);
	g_pDb->KSCToUnicode(szQuery,wszQuery);

	int ret = g_pDb->ExecuteSQL(wszQuery, (BYTE)TOTAL_DB);

	if(ret <= 0)
		MessageBox("Fail to insert new account!","Error");
	else
	{
		int i = c_Account.GetItemCount();	char temp[64];
		LVITEM item;
		//id 
		item.mask = LVIF_TEXT | LVIF_PARAM;
		item.pszText = m_ID.GetBuffer( m_ID.GetLength() );
		item.iItem = i;					//青锅龋 
		item.iSubItem = 0;				//凯锅龋 
		//item.lParam = account[i].;
		c_Account.InsertItem(&item);

		
		//捞抚 
		item.mask = LVIF_TEXT;
		item.iSubItem = 1;
		item.pszText = m_Name.GetBuffer( m_Name.GetLength() );
		c_Account.SetItem(&item);

		//鼻茄
		item.mask = LVIF_TEXT;
		item.iSubItem = 2;
		item.pszText = _itoa(m_Type,temp,10);
		c_Account.SetItem(&item);

		//IP
		item.mask = LVIF_TEXT;
		item.iSubItem = 3;
		item.pszText = m_IP.GetBuffer( m_IP.GetLength() );
		c_Account.SetItem(&item);

		//MessageBox("货肺款 拌沥捞 眠啊登菌嚼聪促!","Success");
		MessageBox("Added New Account!","Success"); //kyo 020314
	}


}

void CAdminDlg::OnDelete() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);

	char szQuery[ 0xff ];
	WCHAR wszQuery[ 0xff ];

	sprintf(szQuery, "delete from RM_LOG_INFO where [ID]='%s'", m_ID);

	g_pDb->KSCToUnicode(szQuery,wszQuery);

	int ret = g_pDb->ExecuteSQL(wszQuery, (BYTE)TOTAL_DB);

	if(ret > 0)
	{
		//MessageBox("拌沥捞 昏力登菌嚼聪促!","Success");
		MessageBox("Deleted Account!","Success");//kyo 020314

		c_Account.DeleteAllItems();

		
		//货肺 孽府~
		swprintf(wszQuery, L"select * from rm_log_info");
		LoginAccount account[ 50 ];
		int ret = g_pDb->OpenRecord(wszQuery, account, 50, (BYTE)TOTAL_DB);

		if(ret <0)
		{
			MessageBox("Fail to query RM_LOG_INFO","Error");
			return;
		}
		else if(ret == 50)
			MessageBox("MAX 50","Error");

		
		LVITEM item;
		char temp[ 64 ];
		for(int i=0; i<ret ; i++)
		{
			
			//id 
			item.mask = LVIF_TEXT | LVIF_PARAM;
			item.pszText = account[i].id;
			item.iItem = i;					//青锅龋 
			item.iSubItem = 0;				//凯锅龋 
			//item.lParam = account[i].;
			c_Account.InsertItem(&item);

			
			//捞抚 
			item.mask = LVIF_TEXT;
			item.iSubItem = 1;
			item.pszText = account[i].name;
			c_Account.SetItem(&item);

			//鼻茄
			item.mask = LVIF_TEXT;
			item.iSubItem = 2;
			item.pszText = _itoa(account[i].logintype, temp, 10);
			c_Account.SetItem(&item);

			//IP
			item.mask = LVIF_TEXT;
			item.iSubItem = 3;
			item.pszText = account[i].ip;
			c_Account.SetItem(&item);

		}
	}

}

void CAdminDlg::OnSearch() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
//	char szQuery[ 0xff ];
	WCHAR wszQuery[ 0xff ];

	swprintf(wszQuery, L"select * from rm_log where YEAR(Date) >= %d and YEAR(Date) <= %d "
							L"and MONTH(Date) >=%d and MONTH(Date) <=%d  and DAY(Date) >=%d "
							L"and DAY(Date) <=%d", m_FromYear, m_ToYear, m_FromMonth, m_ToMonth,
							m_FromDay, m_ToDay);

	LogData data[ 200 ];
	int ret = g_pDb->OpenRecord(wszQuery, data, 200, (BYTE)TOTAL_DB);

	if(ret <0)
	{
		MessageBox("Fail to query RM_LOG","Error");
		return;
	}
	else if(ret == 0)
	{
		//MessageBox("朝楼俊 秦寸窍绰 肺弊沥焊啊 绝嚼聪促.","Info");
		MessageBox("No Data Info.","Info");
		return;
	}
	else if(ret == 200)
		MessageBox("MAX 200","Error");

	c_Log.DeleteAllItems();
	LVITEM item;
	char temp[ 0xff ];
	for(int i=0; i<ret ; i++)
	{
		//No 
		item.mask = LVIF_TEXT | LVIF_PARAM;
		item.pszText = _itoa(data[i].index,temp,10);
		item.iItem = i;					//青锅龋 
		item.iSubItem = 0;				//凯锅龋 
		//item.lParam = account[i].;
		c_Log.InsertItem(&item);

		
		//ID 
		item.mask = LVIF_TEXT;
		item.iSubItem = 1;
		item.pszText = data[i].id;
		c_Log.SetItem(&item);

		//Type
		item.mask = LVIF_TEXT;
		item.iSubItem = 2;
		item.pszText = _itoa(data[i].type, temp, 10);
		c_Log.SetItem(&item);

		//Date
		sprintf(temp,"%dYear %dMon %dDay - %dO'clock %dMin %dSec",data[i].date.year, data[i].date.month, data[i].date.day,
							data[i].date.hour, data[i].date.minute, data[i].date.second);
		item.mask = LVIF_TEXT;
		item.iSubItem = 3;
		item.pszText = temp;
		c_Log.SetItem(&item);

		//ClientIp
		item.mask = LVIF_TEXT;
		item.iSubItem = 4;
		item.pszText = data[i].ip;
		c_Log.SetItem(&item);


		//Log
		item.mask = LVIF_TEXT;
		item.iSubItem = 5;
		item.pszText = data[i].log;
		c_Log.SetItem(&item);
	}

}

void CAdminDlg::OnOk() 
{
	// TODO: Add your control notification handler code here
	EndDialog(IDOK);
}

void CAdminDlg::OnClickListAccount(NMHDR* pNMHDR, LRESULT* pResult) 
{
	pNMHDR;
	// TODO: Add your control notification handler code here
	int nItem;
	POSITION pos = c_Account.GetFirstSelectedItemPosition();
	
	if (pos == NULL)
	{
	   MessageBox("No items were selected!");
	   ClearEdit();
	}
	else
	{
	   while (pos)
	   {
		  //急琶等 亲格甸阑 备茄促. 
		  nItem = c_Account.GetNextSelectedItem(pos);
	
		  m_ID = c_Account.GetItemText(nItem, 0);
		  m_Name = c_Account.GetItemText(nItem, 1);
		  m_Type = atoi(c_Account.GetItemText(nItem, 2));
		  m_IP = c_Account.GetItemText(nItem, 3);

		  GetAccountNameByValue( m_Type, m_szAuthorityType.GetBuffer(0) );
		  m_Password = "*********";
		  
	   }
	}
	UpdateData(FALSE);
	*pResult = 0;
}

void CAdminDlg::ClearEdit()
{
	//m_Item = "";
	m_ID = "";
	m_Name =  "";
	m_Type = 0;
	m_IP = "";
	m_Password = "";
	m_szAuthorityType = "";
}

void CAdminDlg::OnBtnSetAuthority() 
{
	// TODO: Add your control notification handler code here
	if( cAuthority.DoModal() == IDOK)
	{
		m_Type = cAuthority.m_dwAuthority;
	}
	else
		return;

	
	char szAuName[CHARACTER_NAME_SIZE];


	if( FALSE == GetAccountNameByValue( m_Type, szAuName ) ) return;

	GetDlgItem( IDC_AUTHORITY_TYPE )->SetWindowText( szAuName );
	//int zz = GetUserAuthority();
	
	//UpdateData(FALSE);
}

BOOL CAdminDlg::GetAccountNameByValue( UINT iType, LPSTR szAccountName )
{
	char Sql[ 0xff ];
	WCHAR wSql[ 0xff ];
	sprintf( Sql, "select type_name from RM_Authority_set where type_value = '%d'", iType);
	g_pDb->KSCToUnicode(Sql, wSql);

	char szAuName[CHARACTER_NAME_SIZE];
	int ret = g_pDb->OpenRecord(wSql, szAuName, CHARACTER_NAME_SIZE, (BYTE)TOTAL_DB);
	
	if( strlen( szAuName ) > 0 ) 
	if( ret == 1 )
	{
		strcpy( szAccountName, szAuName);
		return TRUE;
	}
	else if( ret < 0)
		AfxMessageBox( "Query Error : Select ~ RM_Authority_set" );
	else if( ret == 0 )
		AfxMessageBox( "Have no Authority Type ");

	strcpy( szAccountName, "");

	return FALSE;	
}

⌨️ 快捷键说明

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