ClientSocket.cpp
资源名称:xcchat.rar [点击查看]
上传用户:posgewe
上传日期:2013-05-17
资源大小:69k
文件大小:2k
源码类别:
Telnet服务器
开发平台:
Visual C++
- // ClientSocket.cpp : implementation file
- //
- #include "stdafx.h"
- #include "ChatServer.h"
- #include "ClientSocket.h"
- #include "tagHeader.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // CClientSocket
- CClientSocket::CClientSocket(CPtrList *list) : m_dlgServer(NULL)
- {
- clist = list;
- }
- CClientSocket::~CClientSocket()
- {
- }
- // 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)
- {
- // TODO: Add your specialized code here and/or call the base class
- char buff1[sizeof(Header)];
- memset(buff1, 0, sizeof(buff1));
- Receive(buff1,sizeof(buff1));
- Header *header = (Header*)buff1;
- int length = header->len;
- char type = header->type;
- if(type == LOGIN_IO)
- {
- char buff[1000];
- memset(buff,0,sizeof(buff));
- Receive(buff,length);
- CTime time = CTime::GetCurrentTime();
- CString t = time.Format("%Y-%m-%d %H:%M:%S");
- CEdit *p_Edit = (CEdit *)::AfxGetMainWnd()->GetDlgItem(IDC_EDIT_INFO);
- CString strTemp = t + ": " + CString(buff) + " 进入聊天室rn";
- p_Edit->ReplaceSel(strTemp);
- m_strName = buff;
- m_dlgServer->UpdateUser(this);
- }
- if(type == SEND_MESSAGE)
- {
- char buff[1000];
- memset(buff,0,sizeof(buff));
- Receive(buff,sizeof(buff));
- CClientSocket *curr = NULL;
- POSITION pos = clist->GetHeadPosition();
- while (pos != NULL)
- {
- curr = (CClientSocket *)clist->GetNext(pos);
- curr->Send((char *)header,sizeof(Header));
- curr->Send(buff, sizeof(buff));
- }
- }
- CSocket::OnReceive(nErrorCode);
- }
- void CClientSocket::OnClose(int nErrorCode)
- {
- // TODO: Add your specialized code here and/or call the base class
- POSITION pos = clist->Find(this);
- if(pos != NULL)
- {
- clist->RemoveAt(pos);
- CTime time = CTime::GetCurrentTime();
- CString t = time.Format("%Y-%m-%d %H:%M:%S");
- CEdit *p_Edit = (CEdit *)m_dlgServer->GetDlgItem(IDC_EDIT_INFO);
- CString strTemp = t + ": " + this->m_strName + " 离开聊天室rn";
- p_Edit->ReplaceSel(strTemp);
- m_dlgServer->UpdateUser(this);
- this->Close();
- delete this;
- }
- CSocket::OnClose(nErrorCode);
- }