private bool ProcessContent(ISocketBuffer arg)
{
if (_bytesLeftForCurrentState == 0 || _bytesLeftInSocketBuffer == 0)
return false;
var bytesToCopy = Math.Min(_bytesLeftForCurrentState, _bytesLeftInSocketBuffer);
_contentStream.Write(arg.Buffer, _socketBufferOffset, bytesToCopy);
_bytesLeftInSocketBuffer -= bytesToCopy;
_bytesLeftForCurrentState -= bytesToCopy;
_socketBufferOffset += bytesToCopy;
if (_bytesLeftForCurrentState > 0)
{
return false;
}
_bytesLeftForCurrentState = sizeof(short);
_headerOffset = 0;
_stateMethod = ReadHeaderLength;
_contentStream.Position = 0;
if (_contentName == "stream")
MessageReceived(_contentStream);
else if (_contentName == "byte[]")
{
MessageReceived(_contentStream);
}
else
{
var message = _serializer.Deserialize(_contentName, _contentStream);
MessageReceived(message);
}
return true;
}