Example #1
0
bool plRingBuffer::Put(const char * data, int len)
{
    bool ans = false;
    
    if (len > BufferAvailable())
        Compress();
    
    if (len <= BufferAvailable())
    {
        memcpy(GetBufferOpen(), data, len);
        fEndPos += len;
        ans = true;
    }
    return ans;
}
int plBufferedSocketReader::ReadFrom(plTcpSocket & sck) // this is where things get ugly.
{        
    int ans = kSuccessNoData;
    int readSize = BufferAvailable();
    
    if(readSize < 1)
    {
        Compress();
        readSize = BufferAvailable();
    }
    
    if(readSize > 0)
    {
        char * dst = GetBufferOpen();
        int nBytesRead = sck.RecvData(dst, readSize);
        if(nBytesRead < 0)
        {
            int err = plNet::GetError(); 
            if(err != kBlockingError)
            {
                ans = kFailedReadError;
            }
        }
        else if(nBytesRead > 0)
        {
            fEndPos += nBytesRead;
            ans = kSuccessWithData;
        }
        else
        {
            ans = kFailedSocketClosed;
        }
    }        
    else
    {
        ans = kFailedNoBufferSpace;
    }
    return ans;
}
Example #3
0
int plBufferedSocketWriter::WriteBlock(const char * data, int len, plTcpSocket & sck)
{
    int ans = kSuccessNoDataSent;
    
    if(len > BufferAvailable())
        ans = Flush(sck);
    
    if(ans >= 0)
        ans = WriteBlock(data,len);
    
    if(ans >= 0 && fFlushPoint >= 0 && fFlushPoint < AmountBuffered())
        ans = Flush(sck);
            
    return ans;
}