// ClientSocket.cpp : implementation file // #include "stdafx.h" #include "HookMsg.h" #include "ClientSocket.h" #include "..\\Common\\ComData.h" #include "HookMsgDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CClientSocket CClientSocket::CClientSocket(CHookMsgDlg* pMain, CString szSignInName) { ASSERT(pMain); m_pMain = pMain; m_szSignInName = szSignInName; Create(); m_pSocketFile = new CSocketFile(this); m_pArchiveIn = new CArchive(m_pSocketFile,CArchive::load); m_pArchiveOut = new CArchive(m_pSocketFile,CArchive::store); } CClientSocket::~CClientSocket() { Finalize(); } 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(); } // 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 void 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(); } catch(...) { m_pArchiveOut->Abort(); } } ///////////////////////////////////////////////////////////////////////////// // CClientSocket member functions void CClientSocket::OnReceive(int nErrorCode) { CSocket::OnReceive(nErrorCode); ProcessServerCom(); } void CClientSocket::ProcessServerCom() { CComData ComData; try { do { ComData.Serialize(*m_pArchiveIn); } while(!m_pArchiveIn->IsBufferEmpty()); } catch(CFileException* e) { e->Delete(); m_pArchiveIn->Abort(); } if(ComData.m_ComDataType == CComData::COM_SIGN_IN) { try { //send the connection confirmation CComData ComData; ComData.m_ComDataType = CComData::COM_SIGN_IN; ComData.m_FromID = m_szSignInName; SendCom(&ComData); } catch(CFileException* e) { TCHAR csError[CHAR_BUFFER_SIZE]; e->GetErrorMessage(csError, CHAR_BUFFER_SIZE); AfxMessageBox(csError); } } else if(ComData.m_ComDataType == CComData::COM_SIGN_CHANGE) { m_szSignInName = m_pMain->m_strName = ComData.m_StringBody; m_pMain->AddClientsCom(ComData.m_FromID, " ¼­¹ö¿¡ Á¢¼ÓÇÏ¿´½À´Ï´Ù. : " + ComData.m_StringBody ); m_pMain->UpdateData(FALSE); } else if(ComData.m_ComDataType == CComData::COM_MESSAGE) { m_pMain->AddClientsCom(ComData.m_FromID, ComData.m_StringBody); } else if(ComData.m_ComDataType == CComData::COM_CLOSE) { m_pMain->AddClientsCom(ComData.m_FromID, ComData.m_StringBody); m_pMain->ClientClosed(); } } ////////////////////////////////////////////////////////////////////////// void CClientSocket::ClientSignOut() { try { CComData ComData; ComData.m_ComDataType = CComData::COM_SIGN_OUT; ComData.m_FromID = m_szSignInName; ComData.m_StringBody = "Á¢¼ÓÀ» Á¾·áÇÕ´Ï´Ù."; SendCom(&ComData); m_pMain->AddClientsCom(ComData.m_FromID,ComData.m_StringBody); } catch(CFileException* e){ TCHAR csError[CHAR_BUFFER_SIZE]; e->GetErrorMessage(csError, CHAR_BUFFER_SIZE); AfxMessageBox(csError); } } void CClientSocket::SendClientMessage(CString szMessage) { try { CComData ComData; ComData.m_ComDataType = CComData::COM_MESSAGE; ComData.m_FromID = m_szSignInName; ComData.m_StringBody = szMessage; SendCom(&ComData); m_pMain->AddClientsCom(ComData.m_FromID,ComData.m_StringBody); } catch(CFileException* e){ TCHAR csError[CHAR_BUFFER_SIZE]; e->GetErrorMessage(csError, CHAR_BUFFER_SIZE); AfxMessageBox(csError); } }