📄 progressdialog.cpp
字号:
// ProgressDialog.cpp : implementation file
//
#include "stdafx.h"
#include "ZNetServer.h"
#include "ProgressDialog.h"
#include "ZNetServerDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CProgressDialog dialog
CProgressDialog::CProgressDialog(CWnd* pParent /*=NULL*/)
: CDialog(CProgressDialog::IDD, pParent)
{
//{{AFX_DATA_INIT(CProgressDialog)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CProgressDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CProgressDialog)
DDX_Control(pDX, IDC_LIST_PACKET, m_lcPacket);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CProgressDialog, CDialog)
//{{AFX_MSG_MAP(CProgressDialog)
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CProgressDialog message handlers
void CProgressDialog::OnOK()
{
// TODO: Add extra validation here
ShowWindow(SW_HIDE);
CDialog::OnOK();
}
BOOL CProgressDialog::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
m_lcPacket.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
m_lcPacket.InsertColumn(0, _T("socket"), LVCFMT_LEFT, 50);
m_lcPacket.InsertColumn(1, _T("key"), LVCFMT_LEFT, 50);
m_lcPacket.InsertColumn(2, _T("flag"), LVCFMT_LEFT, 50);
m_lcPacket.InsertColumn(3, _T("progress"), LVCFMT_LEFT, 100);
m_lcPacket.InsertColumn(4, _T("desc"), LVCFMT_LEFT, 200);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
int CProgressDialog::FindPacketItem(SOCKET soSocket, ULONG ulKey)
{
int nRet=-1;
CString strSocket, strKey;
strSocket.Format(_T("%d"), soSocket);
strKey.Format(_T("%d"), ulKey);
for (int i=0; i<m_lcPacket.GetItemCount(); i++)
{
if (strSocket.CompareNoCase(m_lcPacket.GetItemText(i, 0))==0 &&
strKey.CompareNoCase(m_lcPacket.GetItemText(i, 1))==0)
{
nRet = i;
break;
}
}
return nRet;
}
void CProgressDialog::ProcessPacketBegin(SOCKET soSocket, CIocpPacket* pPacket)
{
if (soSocket==INVALID_SOCKET || pPacket==NULL) return;
LoggingX(_T("Enter ProcessPacketBegin"));
int i=FindPacketItem(soSocket, pPacket->m_ulKey);
if (i<0)
{
CString strSocket, strKey;
strSocket.Format(_T("%d"), soSocket);
strKey.Format(_T("%d"), pPacket->m_ulKey);
CString strFlag=(pPacket->m_wType==PACKETTYPE_WRITE)?_T("send"):_T("recv");
i = m_lcPacket.InsertItem(m_lcPacket.GetItemCount(), _T(""));
m_lcPacket.SetItemText(i, 0, strSocket);
m_lcPacket.SetItemText(i, 1, strKey);
m_lcPacket.SetItemText(i, 2, strFlag);
m_lcPacket.SetItemText(i, 3, _T("0%"));
if (pPacket->m_wType==PACKETTYPE_WRITE)
{
CString strTest1, strTest2;
CIocpPacketHeader& pkHeader=pPacket->GetPacketHeader();
CArchive ar(&pPacket->GetPacketMem(), CArchive::load|CArchive::bNoFlushOnDelete);
ar >> strTest1;
ar >> strTest2;
ar.Close();
CString strFileList;
for (int j=0; j<pPacket->GetPacketFileCount(); j++)
{
CString strFileName;
pPacket->GetPacketFile(j, strFileName);
strFileList += strFileName + _T(";");
}
CString strData;
strData.Format(_T("cmd: %d, wparam: %d, lparam: %d, %s, %s, ""%s"""),
pkHeader.m_nCmd, pkHeader.m_wParam, pkHeader.m_lParam,
strTest1, strTest2, strFileList);
CString strSendData=_T("senddata - ")+strData;
Logging4(ERRORLEVEL_INFO, strSendData, DOMAIN_NAME, CLASS_NAME_ZNETSERVERDLG);
m_lcPacket.SetItemText(i, 4, strSendData);
}
}
LoggingX(_T("Leave ProcessPacketBegin"));
}
void CProgressDialog::ProcessPacketProgress(SOCKET soSocket, ULONG ulKey, WPARAM wParam, LPARAM lParam)
{
LoggingX(_T("Enter ProcessPacketProgress"));
int i=FindPacketItem(soSocket, ulKey);
if (i<0)
{
LoggingX(_T("Leave ProcessPacketProgress"));
return;
}
CString strProgress=m_lcPacket.GetItemText(i, 3);
if (strProgress.CompareNoCase(_T("cancelled"))!=0)
{
DOUBLE dProgress=(wParam>0)?((DOUBLE)lParam/(DOUBLE)wParam*100):0;
DOUBLE dOldProgress=atof(strProgress);
if (dProgress>dOldProgress)
{
strProgress.Format(_T("%d%%"), (int)dProgress);
m_lcPacket.SetItemText(i, 3, strProgress);
}
}
LoggingX(_T("Leave ProcessPacketProgress"));
}
void CProgressDialog::ProcessPacketEnd(SOCKET soSocket, CIocpPacket* pPacket)
{
if (soSocket==INVALID_SOCKET || pPacket==NULL) return;
int i=FindPacketItem(soSocket, pPacket->m_ulKey);
if (i<0) return;
LoggingX(_T("Enter ProcessPacketEnd"));
m_lcPacket.SetItemText(i, 3, _T("100%"));
if (m_lcPacket.GetItemText(i, 4).IsEmpty())
{
CString strTest1, strTest2;
CIocpPacketHeader& pkHeader=pPacket->GetPacketHeader();
CArchive ar(&pPacket->GetPacketMem(), CArchive::load|CArchive::bNoFlushOnDelete);
ar >> strTest1;
ar >> strTest2;
ar.Close();
CString strFileList;
for (int j=0; j<pPacket->GetPacketFileCount(); j++)
{
CString strFileName;
pPacket->GetPacketFile(j, strFileName);
strFileList += strFileName + _T(";");
}
CString strData;
strData.Format(_T("cmd: %d, wparam: %d, lparam: %d, %s, %s, ""%s"""),
pkHeader.m_nCmd, pkHeader.m_wParam, pkHeader.m_lParam,
strTest1, strTest2, strFileList);
CString strRecvData=_T("recvdata - ")+strData;
m_lcPacket.SetItemText(i, 4, strRecvData);
Logging4(ERRORLEVEL_INFO, strRecvData, DOMAIN_NAME, CLASS_NAME_ZNETSERVERDLG);
}
LoggingX(_T("Leave ProcessPacketEnd"));
}
void CProgressDialog::ProcessPacketCancel(SOCKET soSocket, ULONG ulKey)
{
if (soSocket==INVALID_SOCKET) return;
CString strSocket, strKey;
strSocket.Format(_T("%d"), soSocket);
strKey.Format(_T("%d"), ulKey);
for (int i=0; i<m_lcPacket.GetItemCount(); i++)
{
if (strSocket.CompareNoCase(m_lcPacket.GetItemText(i, 0))!=0 ||
m_lcPacket.GetItemText(i, 3).CompareNoCase(_T("100%"))==0)
continue;
if (ulKey>0)
{
if (strKey.CompareNoCase(m_lcPacket.GetItemText(i, 1))==0)
m_lcPacket.SetItemText(i, 3, _T("cancelled"));
}
else
{
m_lcPacket.SetItemText(i, 3, _T("cancelled"));
}
}
}
void CProgressDialog::OnButton1()
{
// TODO: Add your control notification handler code here
m_lcPacket.DeleteAllItems();
}
void CProgressDialog::OnButton2()
{
// TODO: Add your control notification handler code here
CZNetServerDlg* pDlg=(CZNetServerDlg*)AfxGetMainWnd();
int i=m_lcPacket.GetNextItem(-1, LVNI_SELECTED);
if (i>=0 && pDlg!=NULL)
{
int nSocket=atoi(m_lcPacket.GetItemText(i, 0));
ULONG ulKey=atoi(m_lcPacket.GetItemText(i, 1));
pDlg->m_IocpMngr.CancelSendData(nSocket, ulKey);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -