From 9060d15d73cb4e62f871f413543e026d82bec4e0 Mon Sep 17 00:00:00 2001 From: mjjo Date: Sat, 20 Jul 2013 23:20:34 +0000 Subject: [PATCH] --- StockServer/ClientSocket.cpp | 117 +++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 StockServer/ClientSocket.cpp diff --git a/StockServer/ClientSocket.cpp b/StockServer/ClientSocket.cpp new file mode 100644 index 0000000..460e50e --- /dev/null +++ b/StockServer/ClientSocket.cpp @@ -0,0 +1,117 @@ +// ClientSocket.cpp : implementation file +// + +#include "stdafx.h" +#include "StockServer.h" +#include "ClientSocket.h" +#include "ServerSocket.h" +#include "..\\Common\\ComData.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#undef THIS_FILE +static char THIS_FILE[] = __FILE__; +#endif + +///////////////////////////////////////////////////////////////////////////// +// CClientSocket + +CClientSocket::CClientSocket(CServerSocket* pServerSocket) +{ + ASSERT(pServerSocket); + m_pServerSocket = pServerSocket; + m_pSocketFile = NULL; + m_pArchiveIn = NULL; + m_pArchiveOut = NULL; +} + +void CClientSocket::Init() +{ + m_pSocketFile = new CSocketFile(this); + m_pArchiveIn = new CArchive(m_pSocketFile,CArchive::load); + m_pArchiveOut = new CArchive(m_pSocketFile,CArchive::store); +} + +CClientSocket::~CClientSocket() +{ + Finalize(); +} + + +// Do not edit the following lines, which are needed by ClassWizard. +#if 0 +BEGIN_MESSAGE_MAP(CClientSocket, CSocket) + //{{AFX_MSG_MAP(CClientSocket) + //}}AFX_MSG_MAP +END_MESSAGE_MAP() +#endif // 0 + +///////////////////////////////////////////////////////////////////////////// +// CClientSocket member functions + + +void CClientSocket::OnReceive(int nErrorCode) +{ + CSocket::OnReceive(nErrorCode); + + ASSERT(m_pServerSocket); + m_pServerSocket->ProcessClientCom(this); +} + + +BOOL CClientSocket::SendCom(CComData* pComData) +{ + ASSERT(pComData); + try { + if(m_pArchiveOut != NULL) { + pComData->Serialize(*m_pArchiveOut); + m_pArchiveOut->Flush(); + } + } + catch(CFileException* e) { + e->Delete(); + m_pArchiveOut->Abort(); + return FALSE; + } + catch(...) + { + return FALSE; + } + + return TRUE; +} + +void CClientSocket::ReceiveCom(CComData* pComData) +{ + ASSERT(pComData); + try { + do { + pComData->Serialize(*m_pArchiveIn); + } + while(!m_pArchiveIn->IsBufferEmpty()); + } + catch(CFileException* e) { + e->Delete(); + m_pArchiveIn->Abort(); + } +} + +void CClientSocket::Finalize() +{ + if(m_pArchiveIn != NULL){ + delete m_pArchiveIn; + m_pArchiveIn = NULL; + } + if(m_pArchiveOut != NULL){ + delete m_pArchiveOut; + m_pArchiveOut = NULL; + } + if(m_pSocketFile != NULL){ + delete m_pSocketFile; + m_pSocketFile = NULL; + } + + Close(); + + m_pServerSocket = NULL; +} \ No newline at end of file