www.pudn.com > ChatSystem_src.zip > Clntsock.cpp


// clntsock.cpp : implementation of the CClientSocket class 
// 
// This is a part of the Microsoft Foundation Classes C++ library. 
// Copyright (C) 1992-1998 Microsoft Corporation 
// All rights reserved. 
// 
// This source code is only intended as a supplement to the 
// Microsoft Foundation Classes Reference and related 
// electronic documentation provided with the library. 
// See these sources for detailed information regarding the 
// Microsoft Foundation Classes product. 
 
#include "stdafx.h" 
#include "clntsock.h" 
//#include "srvrdoc.h" 
#include "ChatServerDoc.h" 
 
#include "msg.h" 
 
///////////////////////////////////////////////////////////////////////////// 
// CClientSocket Construction 
 
CClientSocket::CClientSocket(CChatServerDoc* pDoc) 
{ 
	m_pDoc = pDoc; 
	m_nMsgCount = 0; 
	m_pFile = NULL; 
	m_pArchiveIn = NULL; 
	m_pArchiveOut = NULL; 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CClientSocket Operations 
 
void CClientSocket::Init() 
{ 
	m_pFile = new CSocketFile(this); 
	m_pArchiveIn = new CArchive(m_pFile,CArchive::load); 
	m_pArchiveOut = new CArchive(m_pFile,CArchive::store); 
} 
 
void CClientSocket::Abort() 
{ 
	if (m_pArchiveOut != NULL) 
	{ 
		m_pArchiveOut->Abort(); 
		delete m_pArchiveOut; 
		m_pArchiveOut = NULL; 
	} 
} 
 
void CClientSocket::SendMsg(CMsg* pMsg) 
{ 
	if (m_pArchiveOut != NULL) 
	{ 
		pMsg->Serialize(*m_pArchiveOut); 
		m_pArchiveOut->Flush(); 
	} 
} 
 
void CClientSocket::ReceiveMsg(CMsg* pMsg) 
{ 
	pMsg->Serialize(*m_pArchiveIn); 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CClientSocket Overridable callbacks 
 
void CClientSocket::OnReceive(int nErrorCode) 
{ 
	CSocket::OnReceive(nErrorCode); 
 
	m_pDoc->ProcessPendingRead(this); 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CSocket Implementation 
 
CClientSocket::~CClientSocket() 
{ 
	if (m_pArchiveOut != NULL) 
		delete m_pArchiveOut; 
 
	if (m_pArchiveIn != NULL) 
		delete m_pArchiveIn; 
 
	if (m_pFile != NULL) 
		delete m_pFile; 
} 
 
#ifdef _DEBUG 
void CClientSocket::AssertValid() const 
{ 
	CSocket::AssertValid(); 
} 
 
void CClientSocket::Dump(CDumpContext& dc) const 
{ 
	CSocket::Dump(dc); 
} 
#endif //_DEBUG 
 
IMPLEMENT_DYNAMIC(CClientSocket, CSocket)