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;
}