www.pudn.com > agentnet.zip > LoginDlg.cpp


// LoginDlg.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "AgentNetClient.h" 
#include "LoginDlg.h" 
#include "toserversocket.h" 
#include "msg.h" 
#include "setupsheet.h" 
#include "setupagentpage.h" 
#include "setupserverpage.h" 
#include "setupmail.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
 
///////////////////////////////////////////////////////////////////////////// 
// CLoginDlg dialog 
 
 
CLoginDlg::CLoginDlg(CWnd* pParent /*=NULL*/) 
	: CDialog(CLoginDlg::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(CLoginDlg) 
	m_strUserName = _T(""); 
	m_strUserPassword = _T(""); 
	m_bPass=FALSE; 
	//}}AFX_DATA_INIT 
} 
 
 
void CLoginDlg::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CLoginDlg) 
	DDX_Text(pDX, IDC_EDIT_USER_NAME, m_strUserName); 
	DDX_Text(pDX, IDC_EDIT_USER_PASSWORD, m_strUserPassword); 
	//}}AFX_DATA_MAP 
} 
 
 
BEGIN_MESSAGE_MAP(CLoginDlg, CDialog) 
	//{{AFX_MSG_MAP(CLoginDlg) 
	ON_BN_CLICKED(IDC_BUTTON_LOGIN, OnButtonLogin) 
	ON_BN_CLICKED(IDC_BUTTON_PROPERTY, OnButtonProperty) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CLoginDlg message handlers 
 
void CLoginDlg::OnButtonLogin()  
{ 
	// TODO: Add your control notification handler code here 
	InitSetup(); 
 
	if (!ConnectSocket(m_stuSetup.strServerIpAddress,SERVER_TCP_PORT)) 
	{ 
		//登陆失败,关闭登陆对话框 
		m_bPass=FALSE; 
		OnOK(); 
		return; 
	} 
 
	//测试登陆 
	LogIn(); 
	Sleep(1000); 
	InitSetup(); 
 
	return; 
	 
	 
} 
 
BOOL CLoginDlg::ConnectSocket(LPCTSTR lpszAddress, UINT nPort) 
{ 
	//创建套接字对象 
	m_pSocket=new CToServerSocket(this); 
	if (!m_pSocket->Create()) 
	{ 
		//错误处理 
		delete m_pSocket; 
		m_pSocket=NULL; 
		AfxMessageBox("套接字创建错误!"); 
		return FALSE; 
	} 
	//发送连接请求 
	while (!m_pSocket->Connect(lpszAddress,nPort)) 
	{ 
		//无法连接 
		if (AfxMessageBox("无法连接服务器!\n重试?",MB_YESNO)==IDNO) 
		{ 
			//错误处理 
			delete m_pSocket; 
			m_pSocket=NULL; 
			return FALSE; 
		} 
	} 
 
	//创建CSocketFile类对象 
	m_pFile=new CSocketFile(m_pSocket); 
	//创建CArchive类对象 
	m_pArchiveIn=new CArchive(m_pFile,CArchive::load); 
	m_pArchiveOut=new CArchive(m_pFile,CArchive::store); 
 
	return TRUE; 
 
} 
 
void CLoginDlg::OnReceive() 
{ 
	do 
	{ 
		//接收消息 
		ReceiveMsg(); 
		if (m_pSocket==NULL) 
			return; 
	} 
	while (!m_pArchiveIn->IsBufferEmpty()); 
 
} 
 
void CLoginDlg::ReceiveMsg() 
{ 
	CMsg msg; 
	TRY 
	{ 
		//接收消息 
		msg.Serialize(*m_pArchiveIn); 
		if (msg.m_strCommand!="") 
		{ 
 
			if (msg.m_strUser=="agent_net_server") 
			{ 
				if (msg.m_strCommand=="login_pass") 
				{ 
					//成功登陆 
					m_bPass=TRUE; 
					OnOK(); 
					return; 
				} 
				else if (msg.m_strCommand=="login_failed") 
				{ 
					//登陆失败 
					m_bPass=FALSE; 
					AfxMessageBox("登陆失败"); 
					return; 
				} 
 
			} 
 
		} 
	} 
	CATCH(CFileException,e) 
	{ 
		//错误处理 
		m_pArchiveOut->Abort(); 
		CString strTemp; 
		strTemp="连接关闭!"; 
		AfxMessageBox(strTemp); 
	} 
	END_CATCH 
} 
 
void CLoginDlg::SendMsg(CMsg *pMsg) 
{ 
	if (m_pArchiveOut!=NULL) 
	{ 
		TRY 
		{ 
			//发送消息 
			pMsg->Serialize(*m_pArchiveOut); 
			//将CArchive对象中数据强制存储到CSocketFile对象中 
			m_pArchiveOut->Flush(); 
		} 
		CATCH(CFileException,e) 
		{ 
			//错误处理 
			m_pArchiveOut->Abort(); 
			delete m_pArchiveOut; 
			m_pArchiveOut=NULL; 
			CString strTemp; 
			strTemp="服务器重置连接!"; 
			AfxMessageBox(strTemp); 
		} 
		END_CATCH 
	} 
} 
 
void CLoginDlg::LogIn() 
{ 
	UpdateData(TRUE); 
	CMsg* pMsg=new CMsg; 
	pMsg->m_strCommand="login_agent_net"; 
	pMsg->m_strUser=m_strUserName; 
	pMsg->m_strPassword=m_strUserPassword; 
 
	SendMsg(pMsg); 
 
} 
 
void CLoginDlg::OnButtonProperty()  
{ 
	// TODO: Add your control notification handler code here 
	CSetupSheet MainSheet("设置"); 
 
	CSetupAgentPage AgentPage; 
	CSetupServerPage ServerPage; 
	CSetupMail MailPage; 
 
	AgentPage.m_strAgentCharPath = m_stuSetup.strAgentCharPath; 
	ServerPage.m_strServerIpAddress=m_stuSetup.strServerIpAddress; 
	MailPage.m_strMailServer=m_stuSetup.strMailServer; 
	MailPage.m_strMailAccount=m_stuSetup.strMailAccount; 
	MailPage.m_strMailPassword=m_stuSetup.strMailPassword; 
 
 
	MainSheet.AddPage(&AgentPage); 
	MainSheet.AddPage(&ServerPage); 
	MainSheet.AddPage(&MailPage); 
 
	if (MainSheet.DoModal()==IDCANCEL) 
		return; 
 
	//写注册表 
	CWinApp* pApp = AfxGetApp(); 
    CString strAgentSection  = "AgentSetting"; 
	CString strServerSection  = "ServerSetting"; 
	CString strMailSection  = "MailSetting"; 
 
	pApp->WriteProfileString(strAgentSection,"AgentCharPath",AgentPage.m_strAgentCharPath); 
 
	pApp->WriteProfileString(strServerSection,"ServerIpAddress",ServerPage.m_strServerIpAddress); 
 
	pApp->WriteProfileString(strMailSection,"MailServer",MailPage.m_strMailServer); 
	pApp->WriteProfileString(strMailSection,"MailAccount",MailPage.m_strMailAccount); 
	pApp->WriteProfileString(strMailSection,"MailPassword",MailPage.m_strMailPassword); 
 
 
 
	AfxMessageBox("新设置要重新开启服务器才能生效!"); 
	 
} 
 
BOOL CLoginDlg::OnInitDialog()  
{ 
	CDialog::OnInitDialog(); 
	 
	// TODO: Add extra initialization here 
 
	InitSetup(); 
	 
	return TRUE;  // return TRUE unless you set the focus to a control 
	              // EXCEPTION: OCX Property Pages should return FALSE 
} 
 
void CLoginDlg::InitSetup() 
{ 
	//读注册表 
	CWinApp* pApp = AfxGetApp(); 
    CString strAgentCharPathSection  = "AgentSetting"; 
	CString strServerSection  = "ServerSetting"; 
	CString strMailSection  = "MailSetting"; 
 
	m_stuSetup.strAgentCharPath = pApp->GetProfileString(strAgentCharPathSection,"AgentCharPath"); 
	m_stuSetup.strServerIpAddress = pApp->GetProfileString(strServerSection,"ServerIpAddress"); 
	m_stuSetup.strMailServer = pApp->GetProfileString(strMailSection,"MailServer"); 
	m_stuSetup.strMailAccount = pApp->GetProfileString(strMailSection,"MailAccount"); 
	m_stuSetup.strMailPassword = pApp->GetProfileString(strMailSection,"MailPassword"); 
 
}