protected TCPBinaryReader SendReceive(TCPBinaryWriter request)
{
lock (m_Lock)
{
OpenIfClosed();
//
byte[] data;
var dataSize = request.Finish(out data);
var stream = m_TcpClient.GetStream();
stream.Write(data, 0, dataSize);
stream.Flush();
//
var recvData = new TCPBinaryReader(TCPCommunicationSignature.Response, ReadBuffer);
if (!recvData.IsComplete)
throw new IOException("Incomplete response received");
if (recvData.Command == TCPCommunicationSignature.CmdException)
{
throw HandleErrorResponse(recvData);
}
if (recvData.Command != request.Command && recvData.Command != TCPCommunicationSignature.CmdException)
throw new InvalidProtocolException("Invalid response command");
return recvData;
}
}