link_struct *MergeLink(link_struct *pPre,link_struct *pNext)
{
if(pPre == NULL && pNext == NULL)
return NULL;
else if(pPre == NULL)
return NULL;
else if(pNext == NULL)
return NULL;
link_struct* pEnd = pPre;
link_struct* pNextBackup = pNext;
bool bIsPreEnd = true;
int nOffset = 0;
int nRecv =0;
char buf[8] = {0};
char buffer[MAX_BUFF_SIZE] = {0};
memcpy(buf,pPre->RecvBuf,8);
int pblen = *(int*)(buf+4);
while(pEnd)
{
if(pblen+sizeof(CLIENT_PACKET)-nRecv<=sizeof(pEnd->RecvBuf))
nOffset = pblen+sizeof(CLIENT_PACKET)-nRecv;
nRecv+=sizeof(pEnd->RecvBuf);
pEnd = pEnd->next;
}
nRecv = 0;
while(pNext)
{
if(bIsPreEnd)
{
memcpy((pEnd->RecvBuf)+nOffset,pNext->RecvBuf,sizeof(pNext->RecvBuf)-nOffset); //pPre的下半截,即pNext的上半截
bIsPreEnd = false;
memcpy(buffer,(pNext->RecvBuf)+sizeof(pNext->RecvBuf)-nOffset,nOffset); //buffer的上半截,即pNext的下半截
}
else
{
link_struct* pNew = (link_struct*)malloc(sizeof(link_struct));
if(pNew == NULL)
{
MessageBox("内存空间分配失败","提示");
ReleaseLinkMemory(pPre);
ReleaseLinkMemory(pNext);
ReleaseLinkMemory(pNew);
Return NULL;
}
memcpy(buffer+nOffset,(pNext->RecvBuf)+sizeof(pNext->RecvBuf)-nOffset,nOffset); //buffer的下半截,即pNext的上半截
memcpy(pNew->RecvBuf,buffer,sizeof(pNew->RecvBuf)); //pNew的上半截,即pNext的下半截
pEnd->next = pNew;
pEnd->pNew;
if(pNext->next!=NULL)
memcpy(buffer,(pNext->RecvBuf)+sizeof(pNext->RecvBuf)-nOffset,nOffset); //buffer的上半截,即pNext的下半截
else
{
pNew = (link_struct*)malloc(sizeof(link_struct));
if(pNew == NULL)
{
MessageBox("内存空间分配失败","提示");
ReleaseLinkMemory(pPre);
ReleaseLinkMemory(pNext);
ReleaseLinkMemory(pNew);
Return NULL;
}
memcpy(pNew->RecvBuf,(pNext->RecvBuf)+sizeof(pNext->RecvBuf)-nOffset,,sizeof(pNew->RecvBuf));
}
pEnd->next = NULL;
}
pNext = pNext->next;
}
ReleaseLinkMemory(pNextBackup);
return pPre;
}