📄 net.cpp
字号:
/*
* name: Net.cpp
*
* desc: 实现文件,这里没有实现加密解密函数,是在子类那里实现的
*
*/
#include "stdafx.h"
//#include "..\TurboMir.h"
#include "..\ZhanGuoClient.h"
#include "Net.h"
#include ".\net.h"
//#include "..\MainFrm.h"
#include "..\ZhanGuoClientDlg.h"
#define _FrameWnd ((CZhanGuoClientDlg*)AfxGetMainWnd())
IMPLEMENT_DYNAMIC(CNet,CAsyncSocket);
// CNet
/*
=======================================================================
函数名 : CNet
功能描述 :
参数 : void
返回值 : NULL
=======================================================================
*/
CNet::CNet() :
m_RecvLen(0)
, m_PacketIndex('1')
{
}
/*
=======================================================================
函数名 : ~CNet
功能描述 :
参数 : void
返回值 : NULL
=======================================================================
*/
CNet::~CNet()
{
}
/*
=======================================================================
函数名 : OnReceive
功能描述 : 接受函数
参数 : void
返回值 : NULL
=======================================================================
*/
void CNet::OnReceive(int nErrorCode)
{
int retval=Receive(m_RecvBuf+m_RecvLen,sizeof(m_RecvBuf)-m_RecvLen);
m_RecvLen+=retval;
m_RecvBuf[m_RecvLen]=static_cast<char>(0);
char*start=m_RecvBuf;
while((start=strchr(start,'*'))!=NULL)
{
Send(start,1);
*start=' ';
start++;
}
start=strchr(m_RecvBuf,'#');
char*end;
while(start!=NULL)
{
end=strchr(start+1,'!');
if(end!=NULL)
{
*end=static_cast<char>(0);
if(start[1]=='+')
{
OnResult(start+2);
}
else
{
MMSG msg;
ZeroMemory(&msg,sizeof(msg));
//char buf[0x10000];
//ZeroMemory(buf,sizeof(buf));
int dl=fnDecode6BitBufA(start+1,(char*)&msg,sizeof(msg));
//MMSG*msg=static_cast<MMSG*>(static_cast<void*>(&buf[0]));
OnMessage(msg,start+1+16);
}
start=strchr(end+1,'#');
}
else
break;
}
if(start==NULL)
{
m_RecvLen=0;
m_RecvBuf[0]=static_cast<char>(0);
}
else if(end==NULL)
{
m_RecvLen=(m_RecvBuf+m_RecvLen)-start;
memcpy(m_RecvBuf,start,m_RecvLen);
}
CAsyncSocket::OnReceive(nErrorCode);
}
/*
=======================================================================
函数名 : SendMsg
功能描述 :
参数 : void
返回值 : NULL
=======================================================================
*/
int CNet::SendMsg(const MMSG& msg,const char* data)
{
char buf[0x1000];
int retval=2;
buf[0]='#';
buf[1]=m_PacketIndex;
m_PacketIndex++;
if(m_PacketIndex>'9')m_PacketIndex='1';
retval+=fnEncode6BitBufA((unsigned char*)&msg,&buf[retval],sizeof(MMSG),sizeof(buf));
if(data)
retval+=fnEncode6BitBufA((unsigned char*)data,&buf[retval],strlen(data),sizeof(buf)-retval);
buf[retval]='!';
retval++;
buf[retval]=static_cast<char>(0);
int ret = Send(buf,retval);
return SOCKET_ERROR == ret ? -1 : 0;
}
/*
=======================================================================
函数名 : SendMsg
功能描述 :
参数 : void
返回值 : NULL
=======================================================================
*/
int CNet::SendMsg( WORD wCmd, DWORD dwFlag, WORD w1, WORD w2, WORD w3, const char* data)
{
MMSG msg;
msg.dwFlag=dwFlag;
msg.wCmd=wCmd;
msg.w1=w1;
msg.w2=w2;
msg.w3=w3;
char buf[0x1000];
int retval=2;
buf[0]='#';
buf[1]=m_PacketIndex;
m_PacketIndex++;
if(m_PacketIndex>'9')m_PacketIndex='1';
retval+=fnEncode6BitBufA((unsigned char*)&msg,&buf[retval],sizeof(MMSG),sizeof(buf));
if(data)
retval+=fnEncode6BitBufA((unsigned char*)data,&buf[retval],strlen(data),sizeof(buf)-retval);
buf[retval]='!';
retval++;
buf[retval]=static_cast<char>(0);
Send(buf,retval);
int ret = Send(buf,retval);
return SOCKET_ERROR == ret ? -1 : 0;
}
/*
=======================================================================
函数名 : SplitString
功能描述 :
参数 : void
返回值 : NULL
=======================================================================
*/
void CNet::SplitString(const char* str, const char* split, std::vector<std::string>& sl)
{
// const boost::regex reSplite(split,boost::regbase::normal|boost::regbase::icase);
// boost::regex_split(std::back_inserter(sl),std::string(str),reSplite);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -