Restructure repository to include all source folders

Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-29 20:17:20 +09:00
parent 5d3cd64a25
commit dd97ddec92
11602 changed files with 1446576 additions and 0 deletions

View File

@@ -0,0 +1,729 @@
// ManageSetupDlg.cpp : 구현 파일
//
#include "stdafx.h"
#include "ManageSetup.h"
#include "ManageSetupDlg.h"
#include "ManageSetupClient.h"
#include "ServerToolUserManagementDlg.h"
#include "RunInfoEditDlg.h"
#include <ServerManage/ManageClientManager.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 응용 프로그램 정보에 사용되는 CAboutDlg 대화 상자입니다.
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// 대화 상자 데이터
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원
// 구현
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
// CManageSetupDlg 대화 상자
CManageSetupDlg::CManageSetupDlg(CWnd* pParent /*=NULL*/)
: CDialog(CManageSetupDlg::IDD, pParent)
, m_strNewServerIP(_T(""))
, m_strNewServerName(_T(""))
, m_strNewExePath(_T(""))
, m_strSelExePath(_T(""))
, m_strSelServerName(_T(""))
, m_strNewOption(_T(""))
, m_strSelOption(_T(""))
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CManageSetupDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control (pDX, IDC_MACHINE_LIST, m_ctrlMachine);
DDX_Control (pDX, IDC_EXECUTEPATH_LIST, m_ctrlExecutePath);
DDX_Text (pDX, IDC_NEWMACHINEIP_EDIT, m_strNewServerIP);
DDX_Text (pDX, IDC_NEWMACHINENAME_EDIT, m_strNewServerName);
DDX_Text (pDX, IDC_EXEPATH_EDIT, m_strNewExePath);
DDX_Text (pDX, IDC_SELEXEPATH_EDIT, m_strSelExePath);
DDX_Text (pDX, IDC_SELSERVERNAME_EDIT, m_strSelServerName);
DDX_Text(pDX, IDC_NEWOPTION_EDIT, m_strNewOption);
DDX_Text(pDX, IDC_SELOPTION_EDIT, m_strSelOption);
DDX_Control(pDX, IDC_OPTION_LIST, m_ctrlOption);
}
BEGIN_MESSAGE_MAP(CManageSetupDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_MACHINEADD_BTN, OnBnClickedMachineaddBtn)
ON_BN_CLICKED(IDC_MACHINEMODIFY_BTN, OnBnClickedMachinemodifyBtn)
ON_BN_CLICKED(IDC_MACHINEDEL_BTN, OnBnClickedMachinedelBtn)
ON_BN_CLICKED(IDC_ADDEXEPATH_BTN, OnBnClickedAddexepathBtn)
ON_BN_CLICKED(IDC_DELEXEPATH_BTN, OnBnClickedDelexepathBtn)
ON_BN_CLICKED(IDC_MODIFYEXEPATH_BTN, OnBnClickedModifyexepathBtn)
ON_NOTIFY(LVN_ITEMCHANGED, IDC_EXECUTEPATH_LIST, OnLvnItemchangedExecutepathList)
ON_NOTIFY(LVN_ITEMCHANGED, IDC_MACHINE_LIST, OnLvnItemchangedMachineList)
ON_COMMAND(ID_FUNCTIONS_RUNINFOEDIT, OnFunctionsRuninfoedit)
ON_COMMAND(ID_FUNCTIONS_USERMANAGEMENT, OnFunctionsUsermanagement)
ON_BN_CLICKED(IDC_ADDOPTION_BTN, OnBnClickedAddoptionBtn)
ON_BN_CLICKED(IDC_MODIFYOPTION_BTN, OnBnClickedModifyoptionBtn)
ON_BN_CLICKED(IDC_DELOPTION_BTN, OnBnClickedDeloptionBtn)
ON_NOTIFY(LVN_ITEMCHANGED, IDC_OPTION_LIST, OnLvnItemchangedOptionList)
ON_COMMAND(ID_FUNCTIONS_MANAGESETUPCLIENT, OnFunctionsManagesetupclient)
ON_COMMAND(ID_FUNCTIONS_EXIT, OnFunctionsExit)
END_MESSAGE_MAP()
// CManageSetupDlg 메시지 처리기
BOOL CManageSetupDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 시스템 메뉴에 "정보..." 메뉴 항목을 추가합니다.
// IDM_ABOUTBOX는 시스템 명령 범위에 있어야 합니다.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 이 대화 상자의 아이콘을 설정합니다. 응용 프로그램의 주 창이 대화 상자가 아닐 경우에는
// 프레임워크가 이 작업을 자동으로 수행합니다.
SetIcon(m_hIcon, TRUE); // 큰 아이콘을 설정합니다.
SetIcon(m_hIcon, FALSE); // 작은 아이콘을 설정합니다.
// 각종 컨트롤 초기화 및 설정
m_ctrlMachine.SetExtendedStyle ( LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_FLATSB );
m_ctrlMachine.SetBkColor ( COLORREF RGB( 255, 170, 170) );
m_ctrlMachine.SetTextBkColor ( COLORREF RGB( 255, 170, 170) );
m_ctrlMachine.InsertColumn ( 0, _T("IP"), LVCFMT_LEFT, 105 );
m_ctrlMachine.InsertColumn ( 1, _T("Name"), LVCFMT_LEFT, 80 );
m_ctrlExecutePath.SetExtendedStyle ( LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_FLATSB );
m_ctrlExecutePath.SetBkColor ( COLORREF RGB( 230, 243, 254) );
m_ctrlExecutePath.SetTextBkColor ( COLORREF RGB( 230, 243, 254) );
m_ctrlExecutePath.InsertColumn ( 0, _T("Index"), LVCFMT_LEFT, 55 );
m_ctrlExecutePath.InsertColumn ( 1, _T("Full Path"), LVCFMT_LEFT, 510 );
m_ctrlOption.SetExtendedStyle ( LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_FLATSB );
m_ctrlOption.SetBkColor ( COLORREF RGB( 255, 255, 193) );
m_ctrlOption.SetTextBkColor ( COLORREF RGB( 255, 255, 193) );
m_ctrlOption.InsertColumn ( 0, _T("Index"), LVCFMT_LEFT, 55 );
m_ctrlOption.InsertColumn ( 1, _T("Run Option"), LVCFMT_LEFT, 510 );
ServerListSet();
ExecutePathListSet();
OptionListSet();
return TRUE; // 컨트롤에 대한 포커스를 설정하지 않을 경우 TRUE를 반환합니다.
}
void CManageSetupDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// 대화 상자에 최소화 단추를 추가할 경우 아이콘을 그리려면
// 아래 코드가 필요합니다. 문서/뷰 모델을 사용하는 MFC 응용 프로그램의 경우에는
// 프레임워크에서 이 작업을 자동으로 수행합니다.
void CManageSetupDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 그리기를 위한 디바이스 컨텍스트
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 클라이언트 사각형에서 아이콘을 가운데에 맞춥니다.
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 아이콘을 그립니다.
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// 사용자가 최소화된 창을 끄는 동안에 커서가 표시되도록 시스템에서
// 이 함수를 호출합니다.
HCURSOR CManageSetupDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
// -----------------------------------------------------------------------------------
// 리스트 컨트롤 갱신
void CManageSetupDlg::ServerListSet()
{
m_ctrlMachine.DeleteAllItems();
CManageClientManager::RunTable runTable;
CManageClientManager::GetInstance().Get(CManageClientManager::SERVER_INFO, runTable);
CManageClientManager::RunTable::iterator pos = runTable.begin();
CManageClientManager::RunTable::iterator end = runTable.end();
unsigned int nIndex = 0;
in_addr addr;
for(; pos != end; ++pos, ++nIndex)
{
ServerManage::RunInfo& runInfo = pos->second;
addr.S_un.S_addr = runInfo.m_dwServerIP;
m_ctrlMachine.InsertItem(nIndex, inet_ntoa(addr));
m_ctrlMachine.SetItemText(nIndex, 1, runInfo.m_szServerName);
}
}
void CManageSetupDlg::ExecutePathListSet()
{
m_ctrlExecutePath.DeleteAllItems();
CManageClientManager::RunTable runTable;
CManageClientManager::GetInstance().Get(CManageClientManager::RUN_PATH_INFO, runTable);
CManageClientManager::RunTable::iterator pos = runTable.begin();
CManageClientManager::RunTable::iterator end = runTable.end();
const int MIN_BUFFER = 64;
char szPathID[MIN_BUFFER];
unsigned int nIndex = 0;
for(; pos != end; ++pos, ++nIndex)
{
ServerManage::RunInfo& runInfo = pos->second;
_snprintf(szPathID, MIN_BUFFER - 1, "%lu", runInfo.m_dwPathID);
szPathID[MIN_BUFFER - 1] = 0;
m_ctrlExecutePath.InsertItem(nIndex, szPathID);
m_ctrlExecutePath.SetItemText(nIndex, 1, runInfo.m_szPath);
}
}
void CManageSetupDlg::OptionListSet()
{
m_ctrlOption.DeleteAllItems();
CManageClientManager::RunTable runTable;
CManageClientManager::GetInstance().Get(CManageClientManager::OPTION_INFO, runTable);
CManageClientManager::RunTable::iterator pos = runTable.begin();
CManageClientManager::RunTable::iterator end = runTable.end();
const int MIN_BUFFER = 64;
char szOptionID[MIN_BUFFER];
unsigned int nIndex = 0;
for(; pos != end; ++pos, ++nIndex)
{
ServerManage::RunInfo& runInfo = pos->second;
_snprintf(szOptionID, MIN_BUFFER - 1, "%lu", runInfo.m_dwOptionID);
szOptionID[MIN_BUFFER - 1] = 0;
m_ctrlOption.InsertItem(nIndex, szOptionID);
m_ctrlOption.SetItemText(nIndex, 1, runInfo.m_szOption);
}
}
//-----------------------------------------------------------------------------
// 서버 정보 추가, 수정, 삭제
void CManageSetupDlg::OnBnClickedMachineaddBtn()
{
UpdateData(true);
if( (m_strNewServerIP != "") && (m_strNewServerName != "") )
{
unsigned long dwServerID = 0;
ServerManage::RunInfo runInfo;
memset(&runInfo, 0, sizeof(ServerManage::RunInfo));
runInfo.m_dwServerIP = inet_addr(m_strNewServerIP);
_snprintf(runInfo.m_szServerName, ServerManage::RunInfo::MAX_SERVER_NAME - 1,
"%s", m_strNewServerName);
runInfo.m_szServerName[ServerManage::RunInfo::MAX_SERVER_NAME - 1] = 0;
if(CManageClientManager::GetInstance().Add(
CManageClientManager::SERVER_INFO, runInfo, dwServerID))
{
m_strNewServerIP = _T("");
m_strNewServerName = _T("");
ServerListSet();
UpdateData(false);
GetDlgItem(IDC_NEWMACHINEIP_EDIT)->SetFocus();
}
else
{
AfxMessageBox( _T("Add server failed"), MB_OK | MB_ICONINFORMATION );
}
}
else
{
AfxMessageBox( _T("Empty value"), MB_OK | MB_ICONINFORMATION );
}
}
void CManageSetupDlg::OnBnClickedMachinemodifyBtn()
{
UpdateData(true);
// 서버 이름 수정
int nSelIndex = m_ctrlMachine.GetNextItem( -1, LVNI_SELECTED );
if(-1 != nSelIndex)
{
unsigned long dwServerIP = inet_addr(m_ctrlMachine.GetItemText(nSelIndex, 0));
if(0 != dwServerIP)
{
UpdateData(true);
unsigned long dwServerID = 0;
ServerManage::RunInfo runInfo;
memset(&runInfo, 0, sizeof(ServerManage::RunInfo));
runInfo.m_dwServerIP = dwServerIP;
_snprintf(runInfo.m_szServerName, ServerManage::RunInfo::MAX_SERVER_NAME - 1,
"%s", m_strSelServerName);
runInfo.m_szServerName[ServerManage::RunInfo::MAX_SERVER_NAME - 1] = 0;
if(CManageClientManager::GetInstance().Modify(
CManageClientManager::SERVER_INFO, runInfo))
{
ServerListSet();
return;
}
}
AfxMessageBox( _T("Add server failed"), MB_OK | MB_ICONINFORMATION );
}
}
void CManageSetupDlg::OnBnClickedMachinedelBtn()
{
int nSelIndex = m_ctrlMachine.GetNextItem( -1, LVNI_SELECTED );
if( -1 != nSelIndex )
{
unsigned long dwServerIP = inet_addr(m_ctrlMachine.GetItemText(nSelIndex, 0));
if(0 != dwServerIP)
{
if(CManageClientManager::GetInstance().Remove(
CManageClientManager::SERVER_INFO, dwServerIP, true))
{
ServerListSet();
return;
}
}
AfxMessageBox( _T("Remove machine failed"), MB_OK | MB_ICONINFORMATION );
}
}
void CManageSetupDlg::OnLvnItemchangedMachineList(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
int nSelIndex = m_ctrlMachine.GetNextItem(-1, LVNI_SELECTED);
if( -1 != nSelIndex )
{
m_strSelServerName.SetString(m_ctrlMachine.GetItemText(nSelIndex, 1));
UpdateData(false);
}
*pResult = 0;
}
//-----------------------------------------------------------------------------
// 실행 경로 추가, 수정, 삭제
void CManageSetupDlg::OnBnClickedAddexepathBtn()
{
UpdateData(true);
if(m_strNewExePath != _T(""))
{
unsigned long dwPathID = 0;
ServerManage::RunInfo runInfo;
memset(&runInfo, 0, sizeof(ServerManage::RunInfo));
_snprintf(runInfo.m_szPath, ServerManage::RunInfo::MAX_PATH_LEN - 1, "%s", m_strNewExePath);
runInfo.m_szPath[ServerManage::RunInfo::MAX_PATH_LEN - 1] = 0;
if(CManageClientManager::GetInstance().Add(
CManageClientManager::RUN_PATH_INFO, runInfo, dwPathID))
{
m_strNewExePath = _T("");
ExecutePathListSet();
UpdateData(false);
GetDlgItem(IDC_EXEPATH_EDIT)->SetFocus();
}
else
{
AfxMessageBox( _T("Add run path failed"), MB_OK | MB_ICONINFORMATION );
}
}
else
{
AfxMessageBox( _T("Empty value"), MB_OK | MB_ICONINFORMATION );
}
}
void CManageSetupDlg::OnBnClickedModifyexepathBtn()
{
UpdateData(true);
int nSelIndex = m_ctrlExecutePath.GetNextItem( -1, LVNI_SELECTED );
if( -1 != nSelIndex )
{
unsigned long dwPathID = 0;
ServerManage::RunInfo runInfo;
memset(&runInfo, 0, sizeof(ServerManage::RunInfo));
runInfo.m_dwPathID = atol(m_ctrlExecutePath.GetItemText(nSelIndex, 0));
_snprintf(runInfo.m_szPath, ServerManage::RunInfo::MAX_PATH_LEN - 1, "%s", m_strSelExePath);
runInfo.m_szPath[ServerManage::RunInfo::MAX_PATH_LEN - 1] = 0;
if(CManageClientManager::GetInstance().Modify(
CManageClientManager::RUN_PATH_INFO, runInfo))
{
ExecutePathListSet();
}
else
{
AfxMessageBox( _T("Modify run path failed"), MB_OK | MB_ICONINFORMATION );
}
}
}
void CManageSetupDlg::OnBnClickedDelexepathBtn()
{
int nSelIndex = m_ctrlExecutePath.GetNextItem( -1, LVNI_SELECTED );
if( -1 != nSelIndex )
{
if(CManageClientManager::GetInstance().Remove(
CManageClientManager::RUN_PATH_INFO,
atol(m_ctrlExecutePath.GetItemText(nSelIndex, 0)), true))
{
ExecutePathListSet();
}
else
{
AfxMessageBox( _T("Remove run path failed"), MB_OK | MB_ICONINFORMATION );
}
}
}
void CManageSetupDlg::OnLvnItemchangedExecutepathList(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
int nSelIndex = m_ctrlExecutePath.GetNextItem(-1, LVNI_SELECTED);
if( -1 != nSelIndex )
{
m_strSelExePath = m_ctrlExecutePath.GetItemText(nSelIndex, 1);
UpdateData(false);
}
*pResult = 0;
}
// -------------------------------------------------------------------------
// 옵션 관련 처리 함수들
void CManageSetupDlg::OnBnClickedAddoptionBtn()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
UpdateData(true);
if(m_strNewOption != _T(""))
{
unsigned long dwOptionID = 0;
ServerManage::RunInfo runInfo;
memset(&runInfo, 0, sizeof(ServerManage::RunInfo));
_snprintf(runInfo.m_szOption, ServerManage::RunInfo::MAX_PATH_LEN - 1, "%s", m_strNewOption);
runInfo.m_szOption[ServerManage::RunInfo::MAX_PATH_LEN - 1] = 0;
if(CManageClientManager::GetInstance().Add(
CManageClientManager::OPTION_INFO, runInfo, dwOptionID))
{
m_strNewOption = _T("");
OptionListSet();
UpdateData(false);
GetDlgItem(IDC_NEWOPTION_EDIT)->SetFocus();
}
else
{
AfxMessageBox( _T("Add option failed"), MB_OK | MB_ICONINFORMATION );
}
}
else
{
AfxMessageBox( _T("Empty value"), MB_OK | MB_ICONINFORMATION );
}
}
void CManageSetupDlg::OnBnClickedModifyoptionBtn()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
UpdateData(true);
int nSelIndex = m_ctrlOption.GetNextItem( -1, LVNI_SELECTED );
if( -1 != nSelIndex )
{
ServerManage::RunInfo runInfo;
memset(&runInfo, 0, sizeof(ServerManage::RunInfo));
runInfo.m_dwOptionID = atol(m_ctrlOption.GetItemText(nSelIndex, 0));
_snprintf(runInfo.m_szOption, ServerManage::RunInfo::MAX_PATH_LEN - 1, "%s", m_strSelOption);
runInfo.m_szOption[ServerManage::RunInfo::MAX_PATH_LEN - 1] = 0;
if(CManageClientManager::GetInstance().Modify(
CManageClientManager::OPTION_INFO, runInfo))
{
OptionListSet();
}
else
{
AfxMessageBox( _T("Modify option failed"), MB_OK | MB_ICONINFORMATION );
}
}
}
void CManageSetupDlg::OnBnClickedDeloptionBtn()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
int nSelIndex = m_ctrlOption.GetNextItem( -1, LVNI_SELECTED );
if( -1 != nSelIndex )
{
if(CManageClientManager::GetInstance().Remove(
CManageClientManager::OPTION_INFO,
atol(m_ctrlOption.GetItemText(nSelIndex, 0)), true))
{
OptionListSet();
}
else
{
AfxMessageBox( _T("Remove option failed"), MB_OK | MB_ICONINFORMATION );
}
}
}
void CManageSetupDlg::OnLvnItemchangedOptionList(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
int nSelIndex = m_ctrlOption.GetNextItem(-1, LVNI_SELECTED);
if( -1 != nSelIndex )
{
m_strSelOption = m_ctrlOption.GetItemText(nSelIndex, 1);
UpdateData(false);
}
*pResult = 0;
}
// ---------------------------------------------------------------------------
BOOL CManageSetupDlg::PreTranslateMessage(MSG* pMsg)
{
// Enter키 눌렀을때
if( ( pMsg->message == WM_KEYDOWN ) && ( pMsg->wParam == VK_RETURN ) )
{
UpdateData( true );
if( ( GetFocus() == GetDlgItem(IDC_NEWMACHINENAME_EDIT) )
&& (m_strNewServerIP != "") && (m_strNewServerName != "") )
OnBnClickedMachineaddBtn();
else if( ( GetFocus() == GetDlgItem(IDC_EXEPATH_EDIT) ) && (m_strNewExePath != _T("")) )
OnBnClickedAddexepathBtn();
else if( ( GetFocus() == GetDlgItem(IDC_NEWEXEINFO_EDIT) ) && (m_strNewOption != _T("")) )
OnBnClickedAddoptionBtn();
else if( GetFocus() == GetDlgItem(IDC_SELSERVERNAME_EDIT) )
OnBnClickedMachinemodifyBtn();
else if( GetFocus() == GetDlgItem(IDC_SELEXEPATH_EDIT) )
OnBnClickedModifyexepathBtn();
else if( GetFocus() == GetDlgItem(IDC_SELOPTION_EDIT) )
OnBnClickedModifyoptionBtn();
}
return CDialog::PreTranslateMessage(pMsg);
}
void CManageSetupDlg::GetMachineList(CComboBox& cbCombo)
{
int nMaxItemCount = m_ctrlMachine.GetItemCount();
CString szString;
TCHAR szIP[MAX_PATH];
TCHAR szServerName[MAX_PATH];
for(int nItemCount = 0; nItemCount < nMaxItemCount; ++nItemCount)
{
m_ctrlMachine.GetItemText(nItemCount, 0, szIP, MAX_PATH);
m_ctrlMachine.GetItemText(nItemCount, 1, szServerName, MAX_PATH);
szString.Format("%s : %s", szIP, szServerName);
cbCombo.InsertString(nItemCount, szString);
cbCombo.SetItemData(nItemCount, inet_addr(szIP));
}
}
void CManageSetupDlg::GetPathList(CComboBox& cbCombo)
{
int nMaxItemCount = m_ctrlExecutePath.GetItemCount();
CString szString;
TCHAR szID[MAX_PATH];
TCHAR szValue[MAX_PATH];
for(int nItemCount = 0; nItemCount < nMaxItemCount; ++nItemCount)
{
m_ctrlExecutePath.GetItemText(nItemCount, 0, szID, MAX_PATH);
m_ctrlExecutePath.GetItemText(nItemCount, 1, szValue, MAX_PATH);
szString.Format("%s", szValue);
cbCombo.InsertString(nItemCount, szString);
cbCombo.SetItemData(nItemCount, atol(szID));
}
}
void CManageSetupDlg::GetOptionList(CComboBox& cbCombo)
{
int nMaxItemCount = m_ctrlOption.GetItemCount();
CString szString;
TCHAR szID[MAX_PATH];
TCHAR szValue[MAX_PATH];
for(int nItemCount = 0; nItemCount < nMaxItemCount; ++nItemCount)
{
m_ctrlOption.GetItemText(nItemCount, 0, szID, MAX_PATH);
m_ctrlOption.GetItemText(nItemCount, 1, szValue, MAX_PATH);
szString.Format("%s", szValue);
cbCombo.InsertString(nItemCount, szString);
cbCombo.SetItemData(nItemCount, atol(szID));
}
}
void CManageSetupDlg::OnFunctionsRuninfoedit()
{
CRunInfoEditDlg dlg;
dlg.DoModal();
}
void CManageSetupDlg::OnFunctionsUsermanagement()
{
CServerToolUserManagementDlg dlg;
dlg.DoModal();
}
void CManageSetupDlg::OnOK()
{
//CDialog::OnOK();
}
void CManageSetupDlg::OnFunctionsManagesetupclient()
{
// TODO: 여기에 명령 처리기 코드를 추가합니다.
CManageSetupClient dlg;
dlg.DoModal();
}
void CManageSetupDlg::OnFunctionsExit()
{
// TODO: 여기에 명령 처리기 코드를 추가합니다.
PostQuitMessage(0);
}

View File

@@ -0,0 +1,86 @@
// ManageSetupDlg.h : 헤더 파일
//
#pragma once
#include "afxcmn.h"
#include "afxwin.h"
// CManageSetupDlg 대화 상자
class CManageSetupDlg : public CDialog
{
// 생성
public:
CManageSetupDlg(CWnd* pParent = NULL); // 표준 생성자
void GetMachineList(CComboBox& cbCombo);
void GetPathList(CComboBox& cbCombo);
void GetOptionList(CComboBox& cbCombo);
// 대화 상자 데이터
enum { IDD = IDD_MANAGECLIENTSETUPDLG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원
// 구현
protected:
HICON m_hIcon;
// 메시지 맵 함수를 생성했습니다.
virtual BOOL OnInitDialog();
virtual BOOL PreTranslateMessage(MSG* pMsg);
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
virtual void OnOK();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
afx_msg void OnBnClickedMachineaddBtn(); // 서버 정보 추가
afx_msg void OnBnClickedMachinemodifyBtn(); // 서버 이름 수정
afx_msg void OnBnClickedMachinedelBtn(); // 서버 정보 삭제
afx_msg void OnBnClickedAddexepathBtn(); // 실행 경로 추가
afx_msg void OnBnClickedModifyexepathBtn(); // 실행 경로 수정
afx_msg void OnBnClickedDelexepathBtn(); // 실행 경로 삭제
afx_msg void OnBnClickedAddoptionBtn(); // 옵션 추가
afx_msg void OnBnClickedModifyoptionBtn(); // 옵션 수정
afx_msg void OnBnClickedDeloptionBtn(); // 옵션 삭제
afx_msg void OnLvnItemchangedMachineList(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnLvnItemchangedExecutepathList(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnLvnItemchangedOptionList(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnFunctionsRuninfoedit();
afx_msg void OnFunctionsUsermanagement();
afx_msg void OnFunctionsManagesetupclient();
afx_msg void OnFunctionsExit();
private:
CString m_strNewServerIP;
CString m_strNewServerName;
CString m_strSelServerName;
CString m_strNewExePath;
CString m_strSelExePath;
CString m_strNewOption;
CString m_strSelOption;
CListCtrl m_ctrlMachine; // 서버 정보 리스트
CListCtrl m_ctrlExecutePath; // 실행 경로 리스트
CListCtrl m_ctrlOption; // 옵션 리스트
// 리스트 컨트롤 갱신 함수
void ServerListSet(); // 서버 정보 리스트 갱신
void ExecutePathListSet(); // 실행 경로 리스트 갱신
void OptionListSet(); // 옵션 리스트 갱신
};

View File

@@ -0,0 +1,279 @@
// RunInfoEditDlg.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "ManageSetup.h"
#include "RuninfoEditDlg.h"
#include "ManageSetupDlg.h"
#include <ServerManage/ManageClientManager.h>
// CRunInfoEditDlg 대화 상자입니다.
IMPLEMENT_DYNAMIC(CRunInfoEditDlg, CDialog)
CRunInfoEditDlg::CRunInfoEditDlg(CWnd* pParent /*=NULL*/)
: CDialog(CRunInfoEditDlg::IDD, pParent)
, m_strSelRunInfoIndex(_T(""))
, m_strSelRunInfoIP(_T(""))
, m_strSelRunInfoPath(_T(""))
, m_strSelRunInfoOPT(_T(""))
{
}
CRunInfoEditDlg::~CRunInfoEditDlg()
{
}
void CRunInfoEditDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_SERVERIP_CB, m_ctrlServerIPCb);
DDX_Control(pDX, IDC_EXEPATH_CB, m_ctrlExePathCb);
DDX_Control(pDX, IDC_EXEOPT_CB, m_ctrlExeOptCb);
DDX_Control(pDX, IDC_RUNINFO_LIST, m_ctrlRunInfoListCtrl);
DDX_Text(pDX, IDC_SELRUNINFOINDEX_EDIT, m_strSelRunInfoIndex);
DDX_Text(pDX, IDC_SELRUNINFOIP_EDIT, m_strSelRunInfoIP);
DDX_Text(pDX, IDC_SELRUNINFOPATH_EDIT, m_strSelRunInfoPath);
DDX_Text(pDX, IDC_SELRUNINFOOPT_EDIT, m_strSelRunInfoOPT);
}
BEGIN_MESSAGE_MAP(CRunInfoEditDlg, CDialog)
ON_BN_CLICKED(IDC_BIND_BTN, OnBnClickedBindBtn)
ON_NOTIFY(LVN_ITEMCHANGED, IDC_RUNINFO_LIST, OnLvnItemchangedRuninfoList)
ON_CBN_SELCHANGE(IDC_SERVERIP_CB, OnCbnSelchangeServeripCb)
ON_CBN_SELCHANGE(IDC_EXEPATH_CB, OnCbnSelchangeExepathCb)
ON_CBN_SELCHANGE(IDC_EXEOPT_CB, OnCbnSelchangeExeoptCb)
ON_BN_CLICKED(IDC_MODIFYRUNINFO_BTN, OnBnClickedModifyruninfoBtn)
ON_BN_CLICKED(IDC_DELETERUNINFO_BTN, OnBnClickedDeleteruninfoBtn)
END_MESSAGE_MAP()
// CRunInfoEditDlg 메시지 처리기입니다.
BOOL CRunInfoEditDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 메인 다이얼로그 핸들 얻어오기
CManageSetupDlg* lpMainDlg = static_cast<CManageSetupDlg*>(this->GetParent());
lpMainDlg->GetMachineList(m_ctrlServerIPCb);
lpMainDlg->GetPathList(m_ctrlExePathCb);
lpMainDlg->GetOptionList(m_ctrlExeOptCb);
m_ctrlServerIPCb.SetCurSel(0);
m_ctrlExePathCb.SetCurSel(0);
m_ctrlExeOptCb.SetCurSel(0);
m_ctrlRunInfoListCtrl.SetExtendedStyle ( LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_FLATSB );
//m_ctrlRunInfoListCtrl.SetBkColor ( COLORREF RGB( 255, 190, 125) );
//m_ctrlRunInfoListCtrl.SetTextBkColor ( COLORREF RGB( 255, 190, 125) );
m_ctrlRunInfoListCtrl.InsertColumn ( 0, _T("RunID"), LVCFMT_LEFT, 50 );
m_ctrlRunInfoListCtrl.InsertColumn ( 1, _T("IP"), LVCFMT_LEFT, 105 );
m_ctrlRunInfoListCtrl.InsertColumn ( 2, _T("Name"), LVCFMT_LEFT, 100 );
m_ctrlRunInfoListCtrl.InsertColumn ( 3, _T("Path"), LVCFMT_LEFT, 400 );
m_ctrlRunInfoListCtrl.InsertColumn ( 4, _T("Option"), LVCFMT_LEFT, 140 );
RunInfoListSet();
return TRUE; // return TRUE unless you set the focus to a control
// 예외: OCX 속성 페이지는 FALSE를 반환해야 합니다.
}
class CRefreshRunInfoList
{
public:
CRefreshRunInfoList(CListCtrl& ctrlList) : m_ctrlList(ctrlList) { }
bool operator () (const ServerManage::RunInfo& runInfo)
{
const int MIN_BUFFER = 32;
char szRunID[MIN_BUFFER];
int nPosition = m_ctrlList.GetItemCount();
in_addr addr;
addr.S_un.S_addr = runInfo.m_dwServerIP;
_snprintf(szRunID, MIN_BUFFER - 1, "%d", runInfo.m_dwRunID);
szRunID[MIN_BUFFER - 1] = 0;
m_ctrlList.InsertItem (nPosition, "");
m_ctrlList.SetItemText (nPosition, 0, szRunID);
m_ctrlList.SetItemText (nPosition, 1, inet_ntoa(addr));
m_ctrlList.SetItemText (nPosition, 2, runInfo.m_szServerName);
m_ctrlList.SetItemText (nPosition, 3, runInfo.m_szPath);
m_ctrlList.SetItemText (nPosition, 4, runInfo.m_szOption);
m_ctrlList.SetItemData(nPosition, runInfo.m_dwRunID);
return true;
}
private:
CListCtrl& m_ctrlList;
};
void CRunInfoEditDlg::RunInfoListSet()
{
// RunInfo 리스트 컨트롤 갱신
m_ctrlRunInfoListCtrl.DeleteAllItems();
CManageClientManager::GetInstance().EnumRunInfo(CRefreshRunInfoList(m_ctrlRunInfoListCtrl));
}
// ( RunInfo 추가, 수정, 삭제 )____________________________________________________________________________
void CRunInfoEditDlg::OnBnClickedBindBtn()
{
// RunInfo 추가
if((-1 != m_ctrlServerIPCb.GetCurSel())
&& (-1 != m_ctrlExePathCb.GetCurSel())
&& (-1 != m_ctrlExeOptCb.GetCurSel()))
{
unsigned long dwRunID = 0;
ServerManage::RunInfo runInfo;
memset(&runInfo, 0, sizeof(ServerManage::RunInfo));
runInfo.m_dwPathID = static_cast<unsigned long>(m_ctrlExePathCb.GetItemData(m_ctrlExePathCb.GetCurSel()));
runInfo.m_dwOptionID = static_cast<unsigned long>(m_ctrlExeOptCb.GetItemData(m_ctrlExeOptCb.GetCurSel()));
runInfo.m_dwServerIP = static_cast<unsigned long>(m_ctrlServerIPCb.GetItemData(m_ctrlServerIPCb.GetCurSel()));
if(CManageClientManager::GetInstance().Add(
CManageClientManager::RUN_INFO, runInfo, dwRunID))
{
RunInfoListSet();
}
else
{
AfxMessageBox("Add run info failed");
}
}
}
void CRunInfoEditDlg::OnBnClickedModifyruninfoBtn()
{
// RunInfo 수정
UpdateData( true );
int nSelIndex = m_ctrlRunInfoListCtrl.GetNextItem( -1, LVNI_SELECTED );
if( -1 != nSelIndex )
{
ServerManage::RunInfo runInfo;
memset(&runInfo, 0, sizeof(ServerManage::RunInfo));
runInfo.m_dwServerIP = static_cast<unsigned long>(m_ctrlServerIPCb.GetItemData(m_ctrlServerIPCb.GetCurSel()));
runInfo.m_dwPathID = static_cast<unsigned long>(m_ctrlExePathCb.GetItemData(m_ctrlExePathCb.GetCurSel()));
runInfo.m_dwOptionID = static_cast<unsigned long>(m_ctrlExeOptCb.GetItemData(m_ctrlExeOptCb.GetCurSel()));
if( CManageClientManager::GetInstance().Modify( CManageClientManager::RUN_INFO, runInfo) )
{
RunInfoListSet();
}
else
{
AfxMessageBox( "Modify run info failed" );
}
}
}
void CRunInfoEditDlg::OnBnClickedDeleteruninfoBtn()
{
// RunInfo 삭제
UpdateData( true );
int nSelIndex = m_ctrlRunInfoListCtrl.GetNextItem( -1, LVNI_SELECTED );
if( -1 != nSelIndex )
{
if(CManageClientManager::GetInstance().Remove(CManageClientManager::RUN_INFO,
static_cast<unsigned long>(m_ctrlRunInfoListCtrl.GetItemData(nSelIndex)), true))
{
m_strSelRunInfoIndex = _T("");
m_strSelRunInfoIP = _T("");
m_strSelRunInfoPath = _T("");
m_strSelRunInfoOPT = _T("");
RunInfoListSet();
UpdateData(false);
}
else
{
AfxMessageBox( "Remove run info failed" );
}
}
}
//_________________________________________________________________________________________________________
void CRunInfoEditDlg::OnLvnItemchangedRuninfoList(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
CString strSelRunInfoName;
int nSelIndex = m_ctrlRunInfoListCtrl.GetNextItem(-1, LVNI_SELECTED);
if( -1 != nSelIndex )
{
m_strSelRunInfoIndex = m_ctrlRunInfoListCtrl.GetItemText( nSelIndex, 0 );
m_strSelRunInfoIP = m_ctrlRunInfoListCtrl.GetItemText( nSelIndex, 1 );
strSelRunInfoName = m_ctrlRunInfoListCtrl.GetItemText( nSelIndex, 2 );
m_strSelRunInfoPath = m_ctrlRunInfoListCtrl.GetItemText( nSelIndex, 3 );
m_strSelRunInfoOPT = m_ctrlRunInfoListCtrl.GetItemText( nSelIndex, 4 );
}
CString strFindingKey;
strFindingKey.Format( "%s : %s", m_strSelRunInfoIP, strSelRunInfoName );
m_ctrlServerIPCb.SetCurSel ( m_ctrlServerIPCb.FindString ( 0, strFindingKey ) );
m_ctrlExePathCb.SetCurSel ( m_ctrlExePathCb.FindString ( 0, m_strSelRunInfoPath ) );
m_ctrlExeOptCb.SetCurSel ( m_ctrlExeOptCb.FindString ( 0, m_strSelRunInfoOPT ) );
UpdateData(false);
*pResult = 0;
}
void CRunInfoEditDlg::OnCbnSelchangeServeripCb()
{
if( m_strSelRunInfoIndex != "" )
{
m_ctrlServerIPCb.GetLBText(m_ctrlServerIPCb.GetCurSel(), m_strSelRunInfoIP);
UpdateData(false);
}
}
void CRunInfoEditDlg::OnCbnSelchangeExepathCb()
{
if( m_strSelRunInfoIndex != "" )
{
m_ctrlExePathCb.GetLBText(m_ctrlExePathCb.GetCurSel(), m_strSelRunInfoPath);
UpdateData(false);
}
}
void CRunInfoEditDlg::OnCbnSelchangeExeoptCb()
{
if( m_strSelRunInfoIndex != "" )
{
m_ctrlExeOptCb.GetLBText(m_ctrlExeOptCb.GetCurSel(), m_strSelRunInfoOPT);
UpdateData(false);
}
}
void CRunInfoEditDlg::OnOK()
{
// CDialog::OnOK();
}

View File

@@ -0,0 +1,49 @@
#pragma once
#include "afxwin.h"
#include "afxcmn.h"
// CRunInfoEditDlg 대화 상자입니다.
class CRunInfoEditDlg : public CDialog
{
DECLARE_DYNAMIC(CRunInfoEditDlg)
public:
CRunInfoEditDlg(CWnd* pParent = NULL); // 표준 생성자입니다.
virtual ~CRunInfoEditDlg();
// 대화 상자 데이터입니다.
enum { IDD = IDD_RUNINFOEDITDLG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다.
DECLARE_MESSAGE_MAP()
virtual BOOL OnInitDialog();
afx_msg void OnBnClickedBindBtn();
afx_msg void OnLvnItemchangedRuninfoList(NMHDR *pNMHDR, LRESULT *pResult);
virtual void OnOK();
afx_msg void OnCbnSelchangeServeripCb();
afx_msg void OnCbnSelchangeExepathCb();
afx_msg void OnCbnSelchangeExeoptCb();
afx_msg void OnBnClickedModifyruninfoBtn();
afx_msg void OnBnClickedDeleteruninfoBtn();
private:
CComboBox m_ctrlServerIPCb;
CComboBox m_ctrlExePathCb;
CComboBox m_ctrlExeOptCb;
CListCtrl m_ctrlRunInfoListCtrl;
CString m_strSelRunInfoIndex;
CString m_strSelRunInfoIP;
CString m_strSelRunInfoPath;
CString m_strSelRunInfoOPT;
void RunInfoListSet(); // RunInfo 리스트 컨트롤 갱신
};

View File

@@ -0,0 +1,160 @@
// ServerToolUserManagementDlg.cpp : 구현 파일
//
#include "stdafx.h"
#include "ManageSetup.h"
#include "ServerToolUserManagementDlg.h"
#include "UserRegEditDlg.h"
#include <UserManage/ToolUserManageTable.h>
const TCHAR* GetLVString( int nLVIndex )
{
switch( nLVIndex )
{
case CToolUserManager::MASTER: return _T("MASTER");
case CToolUserManager::GENERAL: return _T("GENERAL");
case CToolUserManager::MONITORING: return _T("MONITORING");
}
return _T("UNKNOWN");
}
// CServerToolUserManagementDlg 대화 상자
CServerToolUserManagementDlg::CServerToolUserManagementDlg(CWnd* pParent /*=NULL*/)
: CDialog(CServerToolUserManagementDlg::IDD, pParent)
{
}
void CServerToolUserManagementDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_USERINFO_LIST, m_ctrlUserInfoList);
}
BEGIN_MESSAGE_MAP(CServerToolUserManagementDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_USER_REG, OnBnClickedUserReg)
ON_BN_CLICKED(IDC_USER_EDIT, OnBnClickedUserEdit)
ON_BN_CLICKED(IDC_USER_DEL, OnBnClickedUserDel)
END_MESSAGE_MAP()
// CServerToolUserManagementDlg 메시지 처리기
BOOL CServerToolUserManagementDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_ctrlUserInfoList.SetExtendedStyle ( LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_FLATSB );
//m_ctrlUserInfoList.SetBkColor ( COLORREF RGB( 255, 190, 125) );
//m_ctrlUserInfoList.SetTextBkColor ( COLORREF RGB( 255, 190, 125) );
m_ctrlUserInfoList.InsertColumn ( 0, _T("ID"), LVCFMT_LEFT, 100 );
m_ctrlUserInfoList.InsertColumn ( 1, _T("NAME"), LVCFMT_LEFT, 80 );
m_ctrlUserInfoList.InsertColumn ( 2, _T("IP"), LVCFMT_LEFT, 110 );
m_ctrlUserInfoList.InsertColumn ( 3, _T("ADMIN LV"), LVCFMT_LEFT, 100 );
UserListSet(); // 운영자 정보 DB를 읽어서 리스트에 표시
return true;
}
struct SORT_BY_ID
{
bool operator () (const ServerManage::UserInfo& lhs, const ServerManage::UserInfo& rhs)
{
return std::lexicographical_compare(lhs.szID, lhs.szID + strlen(lhs.szID),
rhs.szID, rhs.szID + strlen(rhs.szID));
}
};
bool CServerToolUserManagementDlg::UserListSet()
{
// 리스트 컨트롤 클리어
m_ctrlUserInfoList.DeleteAllItems();
CToolUserManager::UserList userList;
// DB를 읽어서 리스트 컨트롤에 셋팅
CToolUserManager::GetInstance().GetUserInfo(userList);
userList.sort(SORT_BY_ID());
CToolUserManager::UserList::iterator pos = userList.begin();
CToolUserManager::UserList::iterator end = userList.end();
in_addr userIP;
int nCount = 0;
for(;pos != end; ++pos, ++nCount)
{
ServerManage::UserInfo& userInfo = *pos;
m_ctrlUserInfoList.InsertItem(nCount, userInfo.szID );
m_ctrlUserInfoList.SetItemText(nCount, 1, userInfo.szFullName );
userIP.S_un.S_addr = userInfo.dwIP;
m_ctrlUserInfoList.SetItemText(nCount, 2, inet_ntoa(userIP));
m_ctrlUserInfoList.SetItemText(nCount, 3, GetLVString(userInfo.usAdminLevel));
}
return true;
}
void CServerToolUserManagementDlg::OnBnClickedUserReg()
{
CUserRegEditDlg RegDlg(0);
RegDlg.DoModal();
UserListSet();
}
void CServerToolUserManagementDlg::OnBnClickedUserEdit()
{
int nSelectedIndex = m_ctrlUserInfoList.GetNextItem(-1, LVIS_SELECTED);
if(-1 != nSelectedIndex)
{
char szID[ServerManage::UserInfo::ID_LEN];
m_ctrlUserInfoList.GetItemText(nSelectedIndex, 0, szID, ServerManage::UserInfo::ID_LEN);
ServerManage::UserInfo userInfo;
if(CToolUserManager::GetInstance().GetUserInfo(szID, userInfo))
{
CUserRegEditDlg EditDlg(&userInfo);
EditDlg.DoModal();
UserListSet();
}
}
}
void CServerToolUserManagementDlg::OnBnClickedUserDel()
{
int nSelectedIndex = m_ctrlUserInfoList.GetNextItem( -1, LVIS_SELECTED );
if( -1 != nSelectedIndex )
{
// 계정 삭제시에는 ID만 채워서 보냄
ServerManage::UserInfo stDelUserInfo;
m_ctrlUserInfoList.GetItemText(nSelectedIndex, 0,
stDelUserInfo.szID, ServerManage::UserInfo::ID_LEN);
CToolUserManager::GetInstance().DelUser(stDelUserInfo.szID);
UserListSet();
}
}

View File

@@ -0,0 +1,34 @@
// ServerToolUserManagementDlg.h : 헤더 파일
//
#pragma once
#include "afxwin.h"
// CServerToolUserManagementDlg 대화 상자
class CServerToolUserManagementDlg : public CDialog
{
// 생성
public:
CServerToolUserManagementDlg(CWnd* pParent = NULL); // 표준 생성자
// 대화 상자 데이터
enum { IDD = IDD_USERMANAGEMENTDLG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원
// 구현
protected:
DECLARE_MESSAGE_MAP()
virtual BOOL OnInitDialog();
afx_msg void OnBnClickedUserReg();
afx_msg void OnBnClickedUserEdit();
afx_msg void OnBnClickedUserDel();
private:
CListCtrl m_ctrlUserInfoList;
bool UserListSet();
};

View File

@@ -0,0 +1,152 @@
// AdminRegEditDlg.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "ManageSetup.h"
#include "UserRegEditDlg.h"
#include "ServerToolUserManagementDlg.h"
#include <UserManage/ToolUserManageTable.h>
#include ".\userregeditdlg.h"
// AdminRegEditDlg 대화 상자입니다.
enum UserRegEditConst
{
REGISTER,
EDIT
};
IMPLEMENT_DYNAMIC(CUserRegEditDlg, CDialog)
CUserRegEditDlg::CUserRegEditDlg(ServerManage::UserInfo* lpUserInfo,
CWnd* pParent /*=NULL*/)
: CDialog(CUserRegEditDlg::IDD, pParent)
, m_szTitleName( _T("") )
, m_szGroupName( _T("") )
, m_strTempUserID(_T(""))
, m_strUserName(_T(""))
, m_strUserPass(_T(""))
, m_strUserIP(_T(""))
, m_usUserLevel(CToolUserManager::MONITORING)
, m_usMode(REGISTER)
{
if(0 != lpUserInfo)
{
in_addr addr;
addr.S_un.S_addr = lpUserInfo->dwIP;
m_strTempUserID.SetString(lpUserInfo->szID);
m_strUserName.SetString(lpUserInfo->szFullName);
m_strUserPass.SetString(lpUserInfo->szPassword);
m_strUserIP.SetString(inet_ntoa(addr));
m_usUserLevel = lpUserInfo->usAdminLevel;
m_usMode = EDIT;
}
}
CUserRegEditDlg::~CUserRegEditDlg()
{
}
void CUserRegEditDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_GROUPNAME_EDIT, m_szGroupName);
DDX_Text(pDX, IDC_USERNAME, m_strUserName);
DDX_Text(pDX, IDC_USERPASS, m_strUserPass);
DDX_Text(pDX, IDC_USERIP, m_strUserIP);
DDX_Control(pDX, IDC_USERLV, m_ctrlUserLV);
DDX_Control(pDX, IDC_USERID, m_strUserID);
}
BEGIN_MESSAGE_MAP(CUserRegEditDlg, CDialog)
ON_BN_CLICKED(IDC_REGEDITOK_BTN, OnBnClickedRegeditokBtn)
ON_BN_CLICKED(IDC_CANCEL, OnBnClickedCancel)
END_MESSAGE_MAP()
// AdminRegEditDlg 메시지 처리기입니다.
BOOL CUserRegEditDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_ctrlUserLV.InsertString( CToolUserManager::MASTER, _T("MASTER") );
m_ctrlUserLV.InsertString( CToolUserManager::GENERAL, _T("GENERAL") );
m_ctrlUserLV.InsertString( CToolUserManager::MONITORING, _T("MONITORING") );
m_ctrlUserLV.SetCurSel(m_usUserLevel);
if(m_strTempUserID.IsEmpty())
{
SetWindowText( _T("Admin Registaration") );
m_szGroupName = _T("New Admin Info");
}
else
{
m_strUserID.SetWindowText(m_strTempUserID);
m_strUserID.SetReadOnly();
SetWindowText( _T("Admin Edit") );
m_szGroupName = _T("Edit Admin Info");
}
UpdateData( false );
return true;
}
void CUserRegEditDlg::OnBnClickedRegeditokBtn()
{
UpdateData( true );
ServerManage::UserInfo stNewUserInfo;
m_strUserID.GetWindowText(m_strTempUserID);
// 수정 또는 등록 할 운영자 정보 수집
_snprintf(stNewUserInfo.szID,
ServerManage::UserInfo::ID_LEN - 1, "%s", m_strTempUserID); // 운영자 ID
stNewUserInfo.szID[ServerManage::UserInfo::ID_LEN - 1] = 0;
_snprintf(stNewUserInfo.szFullName,
ServerManage::UserInfo::NAME_LEN - 1, "%s", m_strUserName ); // 운영자 이름
stNewUserInfo.szFullName[ServerManage::UserInfo::NAME_LEN - 1] = 0;
stNewUserInfo.dwIP = inet_addr(m_strUserIP); // 운영자 IP
stNewUserInfo.usAdminLevel = m_ctrlUserLV.GetCurSel(); // 운영자 레벨
_snprintf(stNewUserInfo.szPassword,
ServerManage::UserInfo::PASS_LEN - 1, "%s", m_strUserPass ); // 운영자 패스워드
stNewUserInfo.szPassword[ServerManage::UserInfo::PASS_LEN - 1] = 0;
if( m_usMode == REGISTER)
{
if(!CToolUserManager::GetInstance().AddUser(stNewUserInfo))
{
AfxMessageBox("Add user error!");
}
}
else if( m_usMode == EDIT )
{
if(!CToolUserManager::GetInstance().ModifyUser(stNewUserInfo))
{
AfxMessageBox("Modify user error!");
}
}
OnOK();
}
void CUserRegEditDlg::OnBnClickedCancel()
{
OnCancel();
}

View File

@@ -0,0 +1,53 @@
#pragma once
#include "afxcmn.h"
#include "afxwin.h"
// forward decl.
namespace ServerManage
{
struct UserInfo;
};
// AdminRegEditDlg 대화 상자입니다.
class CUserRegEditDlg : public CDialog
{
DECLARE_DYNAMIC(CUserRegEditDlg)
public:
CUserRegEditDlg(ServerManage::UserInfo* lpUserInfo,
CWnd* pParent = NULL); // 표준 생성자입니다.
virtual ~CUserRegEditDlg();
// 대화 상자 데이터입니다.
enum { IDD = IDD_USERREGEDITDLG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다.
DECLARE_MESSAGE_MAP()
virtual BOOL OnInitDialog();
private:
afx_msg void OnBnClickedRegeditokBtn();
afx_msg void OnBnClickedCancel();
CString m_szTitleName; // 다이얼로그 타이틀 바 캡션
CString m_szGroupName; // 다이얼로그 내 그룹박스 캡션
CEdit m_strUserID;
CString m_strTempUserID;
CString m_strUserName;
CString m_strUserIP;
CComboBox m_ctrlUserLV;
CString m_strUserPass;
unsigned short m_usUserLevel;
unsigned short m_usMode;
};