📄 talkcsock.cpp
字号:
// TalkCSock.cpp : implementation file
//
#include "stdafx.h"
#include "TalkC.h"
#include "TalkCSock.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CTalkCSock
CTalkCSock::CTalkCSock(CWnd *pWnd,CString& strIP)
{
Create();
Connect(strIP,5710);
m_pWnd=pWnd;
m_bData=FALSE;
dwPic=0;
}
CTalkCSock::~CTalkCSock()
{
Close();
}
// Do not edit the following lines, which are needed by ClassWizard.
#if 0
BEGIN_MESSAGE_MAP(CTalkCSock, CAsyncSocket)
//{{AFX_MSG_MAP(CTalkCSock)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
#endif // 0
/////////////////////////////////////////////////////////////////////////////
// CTalkCSock member functions
void CTalkCSock::OnReceive(int nErrorCode)
{
// TODO: Add your specialized code here and/or call the base class
if(m_bData)
{
Receive(m_strBuf.GetBuffer(m_Msg[1]),m_Msg[1]);
m_strBuf.ReleaseBuffer();
m_pWnd->SendMessage(WM_NETDATA,m_Msg[0],(LPARAM)this);
//由窗口响应函数调用GetBuf()或GetNewGuestName()
m_bData=FALSE;
}
else
{
Receive(m_Msg,12);
switch(m_Msg[0])
{
case NET_DATA:
case NET_REDAY:
case NET_DELETE:
case NET_GUEST: m_bData=TRUE;
break;
}
}
CAsyncSocket::OnReceive(nErrorCode);
}
//由窗口响应函数调用时m_Msg[0]必须是NET_GUEST
CString& CTalkCSock::GetNewGuestName()
{
return m_strBuf;
}
DWORD CTalkCSock::GetPicture()
{
return m_Msg[2];
}
//由窗口响应函数调用时m_Msg[0]必须是NET_DATA
CString& CTalkCSock::GetObjectName()
{
m_strTemp=m_strBuf.Left(m_strBuf.Find('\n'));
return m_strTemp;
}
CString& CTalkCSock::GetSourceName()
{
int i,j;
i=m_strBuf.Find('\n')+1;
j=m_strBuf.Find('\n',i);
m_strTemp=m_strBuf.Mid(i,j-i);
return m_strTemp;
}
BOOL CTalkCSock::IsPublic()
{
if(m_Msg[2])return TRUE;
return FALSE;
}
CString& CTalkCSock::GetBuf()
{
// m_strTemp=m_strBuf.ReverseFind('\n');
return m_strBuf;
}
void CTalkCSock::SendMsg(DWORD dwMsg1,DWORD dwMsg2,DWORD dwMsg3)
{
m_Msg[0]=dwMsg1;
m_Msg[1]=dwMsg2;
m_Msg[2]=dwMsg3;
Send(&m_Msg,12);
}
void CTalkCSock::SendData(DWORD dwMsg, DWORD dwLength,
DWORD dwAddtion, CString &strBuf)
{
SendMsg(dwMsg,dwLength,dwAddtion);
Send(strBuf.GetBuffer(dwLength),dwLength);
strBuf.ReleaseBuffer();
}
void CTalkCSock::Talk(CString &strBuf, DWORD dwState)
{
SendData(NET_DATA,strBuf.GetLength()+1,dwState,strBuf);
strBuf.ReleaseBuffer();
}
void CTalkCSock::Logon(CString &strName)
{
SendData(NET_GUEST,strName.GetLength()+1,dwPic,strName);
}
void CTalkCSock::OnClose(int nErrorCode)
{
// TODO: Add your specialized code here and/or call the base class
m_pWnd->SendMessage(WM_NETDELETE);
TRACE(_T("OnClose() return %d\n"),nErrorCode);
CAsyncSocket::OnClose(nErrorCode);
}
void CTalkCSock::OnConnect(int nErrorCode)
{
// TODO: Add your specialized code here and/or call the base class
if(nErrorCode)m_pWnd->SendMessage(WM_NETERROR);
CAsyncSocket::OnConnect(nErrorCode);
}
CString CTalkCSock::GetTopic()
{
CString str;
int i;
i=m_strBuf.GetLength()-m_strBuf.ReverseFind('\n')-1;
str=m_strBuf.Right(i);
return str;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -