public void ProcessReceive(SocketAsyncEventArgs e)
{
var state = e.UserToken as SaeState;
if (!ProcessCompleted(e))
{
e.UserToken = null;
m_SaePoolForReceive.Return(state);
OnReceiveError(CloseReason.ClientClosing);
return;
}
OnReceiveEnded();
var result = ProcessReceivedData(new ArraySegment<byte>(e.Buffer, e.Offset, e.BytesTransferred), state);
if (result.State == ProcessState.Cached)
{
e.UserToken = null;
var newState = m_SaePoolForReceive.Get();
e = newState.Sae;
e.UserToken = newState;
newState.SocketSession = this;
}
//read the next block of data sent from the client
StartReceive(e);
}