This commit is contained in:
2024-08-07 09:16:27 -04:00
parent fdfadd5c7e
commit 5f971cf684
5200 changed files with 731717 additions and 0 deletions

62
socket/CACHE.CPP Normal file
View File

@@ -0,0 +1,62 @@
#include <socket/cache.hpp>
WORD ReceiveCache::receive(char *pBuffer,DWORD lengthBuffer,DWORD &itemCount,BOOL waitForData)
{
itemCount=0;
if(!hasData(waitForData))return FALSE;
if(itemsInCache()<=lengthBuffer)
{
::memcpy(pBuffer,&mReceiveCache[cursor()],itemsInCache());
itemCount=itemsInCache();
cursor(cursor()+itemsInCache());
itemsInCache(0);
}
else
{
::memcpy(pBuffer,&mReceiveCache[cursor()],lengthBuffer);
itemCount=lengthBuffer;
cursor(cursor()+lengthBuffer);
itemsInCache(itemsInCache()-lengthBuffer);
}
return TRUE;
}
WORD ReceiveCache::receive(char &charData,BOOL waitForData)
{
if(!hasData(waitForData))return FALSE;
charData=mReceiveCache[cursor()];
cursor(cursor()+1);
itemsInCache(itemsInCache()-1);
return TRUE;
}
WORD ReceiveCache::cacheData(void)
{
int receiveCount;
while(!isReady(TRUE));
if(!isReady(TRUE))return FALSE;
if((receiveCount=::recv(socket(),(char*)(BYTE*)&mReceiveCache[0],mReceiveCache.size(),0L))==SOCKET_ERROR||!receiveCount)return FALSE;
itemsInCache(receiveCount);
cursor(0);
return TRUE;
}
WORD ReceiveCache::hasData(BOOL acquireData)
{
if(itemsInCache()>0)return TRUE;
if(!isReady(FALSE)&&!acquireData)return FALSE;
return cacheData();
}
WORD ReceiveCache::isReady(WORD waitForData)const
{
fd_set setDescriptor;
timeval waitTime;
setDescriptor.fd_count=1;
setDescriptor.fd_array[0]=socket();
if(waitForData){waitTime.tv_sec=WaitTime;waitTime.tv_usec=0;}
else {waitTime.tv_sec=0;waitTime.tv_usec=500;}
return ::select(0,&setDescriptor,0,0,&waitTime);
}