www.pudn.com > Five_QT_by_CT.rar > pub.cpp


#include "pub.h"


int PackDisposer::MsgPacker(Message msg,char * buffer)//打包后放到buffer里
{
	
	int n;
	int total=0;
	n=msg.mID.length();
	strncpy(buffer,msg.mID.ascii(),n);
	total+=n;
	buffer[total++]='#';

        n=msg.mRequest.length();
	strncpy(&buffer[total],msg.mRequest.ascii(),n);
	total+=n;
	buffer[total++]='#';

	n=msg.mContent.length();
	strncpy(&buffer[total],msg.mContent.ascii(),n);
	total+=n;
	buffer[total++]='$';
	
	return total;
}


bool PackDisposer::MsgUnPacker( Message &msg,char * buffer)
{
	char *ptr;
	int n=0;
	if((ptr=strstr(&buffer[0],"#"))==NULL)
		return false;
	*ptr='\0';
	msg.mID=QString(&buffer[n]);
	n+=ptr-buffer+1;

	if((ptr=strstr(&buffer[n],"#"))==NULL)
		return false;
	*ptr='\0';
	msg.mRequest=QString(&buffer[n]);
	n+=ptr-&buffer[n]+1;

	if((ptr=strstr(&buffer[n],"$"))==NULL)
		return false;
	*ptr='\0';
	msg.mContent=QString(&buffer[n]);
	n+=ptr-&buffer[n]+1;

	
	
	printf("int unpacker msg.mContent: %s\n", msg.mContent.ascii());
	return true;
}


int PackDisposer::TablePacker(PlayerTableNode node, char *buffer)//打包后放到buffer里
{
	int n;
	int total=0;
	n=node.mPlayerID.length();
	strncpy(buffer,node.mPlayerID.ascii(),n);
	total+=n;
	buffer[total++]='&';

        n=node.mPlayerState.length();
	strncpy(&buffer[total],node.mPlayerState.ascii(),n);
	total+=n;
	buffer[total++]='&';

	n=node.mPlayerOpID.length();
	strncpy(&buffer[total],node.mPlayerOpID.ascii(),n);
	total+=n;
	buffer[total++]='&';

	n=node.mAddr.length();
	strncpy(&buffer[total],node.mAddr.ascii(),n);
	total+=n;
	buffer[total++]='&';

	n=node.mPort.length();
	strncpy(&buffer[total],node.mPort.ascii(),n);
	total+=n;
	buffer[total++]='&';
	
	n=node.mDeskNumber.length();
	strncpy(&buffer[total],node.mDeskNumber.ascii(),n);
	total+=n;
	buffer[total++]='&';

	n=node.mSide.length();
	strncpy(&buffer[total],node.mSide.ascii(),n);
	total+=n;
	buffer[total++]='&';
	
	return total;
}


bool PackDisposer::TableUnPacker(PlayerTableNode &node,char *buffer)//把buffer还原成格式
{
	char *ptr;
	int n=0;

	if((ptr=strstr(&buffer[0],"&"))==NULL)
		return false;
	*ptr='\0';
	node.mPlayerID=QString(&buffer[n]);
	n+=ptr-buffer+1;


	if((ptr=strstr(&buffer[n],"&"))==NULL)
		return false;
	*ptr='\0';
	node.mPlayerState=QString(&buffer[n]);
	n+=ptr-&buffer[n]+1;


	if((ptr=strstr(&buffer[n],"&"))==NULL)
		return false;
	*ptr='\0';
	node.mPlayerOpID=QString(&buffer[n]);
	n+=ptr-&buffer[n]+1;
	

	if((ptr=strstr(&buffer[n],"&"))==NULL)
		return false;
	*ptr='\0';
	node.mAddr=QString(&buffer[n]);
	n+=ptr-&buffer[n]+1;
	
	if((ptr=strstr(&buffer[n],"&"))==NULL)
		return false;
	*ptr='\0';
	node.mPort=QString(&buffer[n]);
	n+=ptr-&buffer[n]+1;


	if((ptr=strstr(&buffer[n],"&"))==NULL)
		return false;
	*ptr='\0';
	node.mDeskNumber=QString(&buffer[n]);
	n+=ptr-&buffer[n]+1;


	if((ptr=strstr(&buffer[n],"&"))==NULL)
		return false;
	*ptr='\0';
	node.mSide=QString(&buffer[n]);
	n+=ptr-&buffer[n]+1;
	
	return true;
}