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