📄 clientthread.cpp
字号:
// ClientThread.cpp : implementation file
//
#include "stdafx.h"
#include "CFileClient.h"
#include "ClientThread.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CClientThread
IMPLEMENT_DYNCREATE(CClientThread, CWinThread)
CClientThread::CClientThread()
{
m_pClient = NULL;
m_bDataReceived = TRUE;
}
CClientThread::~CClientThread()
{
}
BOOL CClientThread::InitInstance()
{
// TODO: perform and per-thread initialization here
m_nTimerID = SetTimer(NULL, 0, 4000, NULL);
return TRUE;
}
int CClientThread::ExitInstance()
{
// TODO: perform any per-thread cleanup here
if(m_nTimerID != 0)
KillTimer(NULL, m_nTimerID);
if(m_pClient)
{
m_pClient->AttemptToDisconnect();
delete m_pClient;
m_pClient = NULL;
}
return CWinThread::ExitInstance();
}
BEGIN_MESSAGE_MAP(CClientThread, CWinThread)
//{{AFX_MSG_MAP(CClientThread)
// NOTE - the ClassWizard will add and remove mapping macros here.
ON_THREAD_MESSAGE(WM_CLIENT_CMD, OnClientCmd)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CClientThread message handlers
BOOL CClientThread::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message == WM_TIMER && pMsg->wParam == m_nTimerID)
ProcessTimer();
return CWinThread::PreTranslateMessage(pMsg);
}
void CClientThread::ProcessTimer()
{
/*
if(m_bDataReceived)
{
m_bDataReceived = FALSE;
ASSERT(m_pClient);
TRY
{
*m_pClient << (BYTE)TF_CHECKSERVER;
m_pClient->Flush();
}
CATCH(CUserException, e)
{
e->Delete();
ExitClientThread();
}
END_CATCH
}
else//连接超时,被强迫关闭
ExitClientThread();
*/
}
void CClientThread::ExitClientThread()
{
/*
PostQuitMessage(0);
if(m_pClient && m_pClient->m_pParent)
m_pClient->m_pParent->PostMessage(WM_CLIENT_CLOSE, 0, 0);
*/
}
void CClientThread::OnConnect()
{
if(m_pClient == NULL)
{
VERIFY(m_pClient = new CClient);
m_pClient->SetParent(m_pParentWnd);
}
if(m_pClient->m_hSocket != INVALID_SOCKET)
m_pClient->AttemptToDisconnect();
m_pClient->AttemptToConnect(m_strServerIP, 2000);
}
void CClientThread::OnDisconnect()
{
ASSERT(m_pClient);
if(m_pClient->m_hSocket != INVALID_SOCKET)
m_pClient->AttemptToDisconnect();
}
void CClientThread::OnBrowse()
{
ASSERT(m_pClient);
ASSERT(m_pClient->m_hSocket != INVALID_SOCKET);
m_pClient->RequestBrowse();
}
void CClientThread::OnDownload()
{
if(m_pClient && m_pClient->m_hSocket != INVALID_SOCKET
&& m_pClient->InitDownload())
m_pClient->RequestDownloadNext();
}
void CClientThread::OnCancelDownload()
{
if(m_pClient && m_pClient->m_hSocket != INVALID_SOCKET)
m_pClient->CancelTransfer();
}
/*
void CClientThread::OnDataReady(UINT wParam, LONG lParam)
{
m_bDataReceived = TRUE;
ASSERT(m_pClient);
TRY
{
m_pClient->ReceiveData();
}
CATCH(CUserException, e)
{
e->Delete();
ExitClientThread();
}
END_CATCH
}
*/
void CClientThread::OnClientCmd(UINT wParam, LONG lParam)
{
switch(wParam)
{
case CMD_CONNECT:
OnConnect();
break;
case CMD_DISCONNECT:
OnDisconnect();
break;
case CMD_BROWSE:
OnBrowse();
break;
case CMD_DOWNLOAD:
OnDownload();
break;
case CMD_CANCELDOWNLOAD:
OnCancelDownload();
break;
case CMD_TERMINATE:
OnTerminate();
break;
default:
break;
}
}
void CClientThread::OnTerminate()
{
if(m_pClient)
{
m_pClient->CloseSocket();
delete m_pClient;
m_pClient = NULL;
}
PostQuitMessage(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -