zoukankan      html  css  js  c++  java
  • 【手游项目4】手动拆包逻辑

    比如我们和前端互通的包大小限制是4K,如果发一个大于4K的包就无法发送,这时候就需要和前端拆包和包。

    bool LobbyServer::SendPbMsgToClient(PlayerNode *lpPlayerNode, unsigned short type, void *buf, long len, int end)
    {
    	__log(_ERROR, __FUNCTION__, "type[%d],len[%d],end[%d]", type, len, end);
    	tagNetMsg pNetMsg;
    	memcpy(&pNetMsg, buf, sizeof(tagNetMsg));
    	pNetMsg.header.identity = IDENTIFY_VER;
    	pNetMsg.header.encode = ENCODE_NONE;
    	pNetMsg.header.length = len;
    	pNetMsg.header.version = end;
    	pNetMsg.header.reserve = ENCODE_AES;
    	pNetMsg.header.type = type;
    	len += sizeof(tagMsgHeader);
    	return SendData(lpPlayerNode, type, &pNetMsg, len);
    }
    
    bool LobbyServer::SendBigPbMsgToClient(PlayerNode *lpPlayerNode, unsigned short type, DataPacket &strDataPacket)
    {
    	int test_buff_size = MAX_BUFF_SIZE;
    	int nLength = strDataPacket.getSize();
    	int i = 0;
    	do
    	{
    		if (test_buff_size < nLength )
    		{
    			tagNetMsg sendDataStr;
    			memcpy(sendDataStr.buff, strDataPacket.getPositionPtr(i*test_buff_size), test_buff_size);
    			SendPbMsgToClient(lpPlayerNode, type, &sendDataStr, test_buff_size, 0);
    		}
    		else
    		{
    			tagNetMsg sendDataStr;
    			memcpy(sendDataStr.buff, strDataPacket.getPositionPtr(i*test_buff_size), nLength);
    			SendPbMsgToClient(lpPlayerNode, type, &sendDataStr, nLength, 1);
    		}
    		nLength = nLength - test_buff_size;
    		i++;
    	} while (0 < nLength);
    }
  • 相关阅读:
    Mahout推荐算法ItemBased
    ALSA安装编程指南
    windbg更改cmd的token提升其特权
    至尊问题
    什么是“Bash”破绽?
    hdu 1548 A strange lift
    C 循环链表
    C++ 链表
    C_数据结构_链表的链式实现
    C _数据结构 _线性表的顺序存储
  • 原文地址:https://www.cnblogs.com/byfei/p/14104101.html
Copyright © 2011-2022 走看看