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);
    }
  • 相关阅读:
    javascript的语法作用域你真的懂了吗
    网页的三种布局(固定宽度式,流体式,弹性式)
    css3系列之animation
    跟我学习css3之transition
    函数调用你知道几种方法
    javascript的那些事儿你都懂了吗
    css3的那些高级选择器二
    [转]影响Cache的几个HTTP头信息
    CSS属性合写
    defer 与 async
  • 原文地址:https://www.cnblogs.com/byfei/p/14104101.html
Copyright © 2011-2022 走看看