⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 client.cpp

📁 关于ACE的书籍,对于学习ACE很有帮助,这里只有上册,下册过些时候在传.
💻 CPP
字号:
#include "stdafx.h"
#include "Client.h"

bool CClient::CodingBuff(CMsg *ptrMsg){
	if(!ptrMsg)return FALSE;

	m_SendBuff.AddToBuffer((char*)(&(ptrMsg->MsgHead.dwLength)),sizeof DWORD);
	m_SendBuff.AddToBuffer((char*)(&(ptrMsg->MsgHead.eCmdID)),sizeof CMD_ID);
	m_SendBuff.AddToBuffer((char*)(&(ptrMsg->MsgHead.dwToken)),sizeof DWORD);
	
	if(ptrMsg->MsgHead.eCmdID == CMD_MSG_CHAT){
		m_SendBuff.AddToBuffer((char*)ptrMsg->MsgChat.szSender,sizeof ptrMsg->MsgChat.szSender);
		m_SendBuff.AddToBuffer((char*)(&(ptrMsg->MsgChat.dwLength)),sizeof DWORD);
		m_SendBuff.AddToBuffer((char*)ptrMsg->MsgChat.szContent,ptrMsg->MsgChat.dwLength);
	}
	else if(ptrMsg->MsgHead.eCmdID == CMD_NEW){
		m_SendBuff.AddToBuffer((char*)ptrMsg->MsgNew.szUsername,sizeof ptrMsg->MsgNew.szUsername);
	}
	else if(ptrMsg->MsgHead.eCmdID == CMD_LOGOUT){
		m_SendBuff.AddToBuffer((char*)ptrMsg->MsgNew.szUsername,sizeof ptrMsg->MsgNew.szUsername);
	}
	return TRUE;
}
bool CClient::DecodingBuff(CMsg *ptrMsg){
	if (!ptrMsg)return FALSE;
	DWORD dwPos = 0;

	m_RecvBuff.GetFromBuffer((char*)(&(ptrMsg->MsgHead.dwLength)),dwPos,sizeof DWORD);
	dwPos += sizeof DWORD;
	m_RecvBuff.GetFromBuffer((char*)(&(ptrMsg->MsgHead.eCmdID)),dwPos,sizeof CMD_ID);
	dwPos += sizeof CMD_ID;
	m_RecvBuff.GetFromBuffer((char*)(&(ptrMsg->MsgHead.dwToken)),dwPos,sizeof DWORD);
	dwPos += sizeof DWORD;

	if(ptrMsg->MsgHead.eCmdID == CMD_MSG_CHAT){
		m_RecvBuff.GetFromBuffer((char*)ptrMsg->MsgChat.szSender,dwPos,sizeof ptrMsg->MsgChat.szSender);
		dwPos += sizeof ptrMsg->MsgChat.szSender;
		m_RecvBuff.GetFromBuffer((char*)(&(ptrMsg->MsgChat.dwLength)),dwPos,sizeof DWORD);
		dwPos += sizeof DWORD;
		ptrMsg->MsgChat.szContent = new wchar_t [ptrMsg->MsgChat.dwLength/2];
		m_RecvBuff.GetFromBuffer((char*)ptrMsg->MsgChat.szContent,dwPos,ptrMsg->MsgChat.dwLength);
	}
	else if(ptrMsg->MsgHead.eCmdID == CMD_LOGIN){
		m_RecvBuff.GetFromBuffer((char*)ptrMsg->MsgLogin.szUsername,dwPos,sizeof ptrMsg->MsgLogin.szUsername);
		dwPos += sizeof ptrMsg->MsgLogin.szUsername;
		m_RecvBuff.GetFromBuffer((char*)ptrMsg->MsgLogin.szPassWord,dwPos,sizeof ptrMsg->MsgLogin.szPassWord);
	}
	return TRUE;
}

CClient::CClient(int nIncrement):m_RecvBuff(nIncrement),m_SendBuff(nIncrement){
	BytesRECV = 0;
	BytesSEND = 0;
	m_bWrite = FALSE;
	m_iMsgNum = 0;
	Next = NULL;
}
CClient::~CClient(){}

bool CClient::SendMsg(){
	WSABUF		wsaBuf;
	DWORD		SendBytes;

	wsaBuf.buf = m_SendBuff.GetBuffer();
	wsaBuf.len = m_SendBuff.GetLength();

	while(BytesSEND < wsaBuf.len){
		if (WSASend(m_Socket, &wsaBuf, 1, &SendBytes, 0,
			NULL, NULL) == SOCKET_ERROR)
		{
			if (WSAGetLastError() != WSAEWOULDBLOCK)return false;
		}
		BytesSEND += SendBytes;
	}
	BytesSEND = 0;
	m_SendBuff.ReSet();
	return true;
}

bool CClient::RecvMsg(){

	DWORD	Flags=0;
	char	szBuff[DATA_BUFSIZE];
	WSABUF  wsaBuf;
	DWORD	RecvBytes;

	while(BytesRECV != sizeof DWORD){
		wsaBuf.buf = szBuff;
		wsaBuf.len = sizeof DWORD-BytesRECV;
		if (WSARecv(m_Socket, &wsaBuf, 1, &RecvBytes,
			&Flags, NULL, NULL) == SOCKET_ERROR)
		{
			if (WSAGetLastError() != WSAEWOULDBLOCK)return FALSE;
		} 
		BytesRECV += RecvBytes;
		m_RecvBuff.AddToBuffer(szBuff,RecvBytes);
	}
	DWORD dwLength;
	m_RecvBuff.GetFromBuffer((char*)(&dwLength),0,sizeof DWORD);
	while(BytesRECV != dwLength){
		wsaBuf.buf = szBuff;
		wsaBuf.len = (dwLength-BytesRECV)/DATA_BUFSIZE ? DATA_BUFSIZE:dwLength-BytesRECV;
		if (WSARecv(m_Socket, &wsaBuf, 1, &RecvBytes,
			&Flags, NULL, NULL) == SOCKET_ERROR)
		{
			if (WSAGetLastError() != WSAEWOULDBLOCK)return FALSE;
		} 
		BytesRECV += RecvBytes;
		m_RecvBuff.AddToBuffer(szBuff,RecvBytes);
	}

	BytesRECV = 0;//there is some problem!
	return FALSE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -