public void SendRecord(RecordType type, ushort requestID, byte [] bodyData, int bodyIndex, int bodyLength) { if (IsConnected) { lock (send_lock) { try { CompatArraySegment <byte> body = send_buffers.EnforceBodyLength(bodyLength); Array.Copy(bodyData, bodyIndex, body.Array, body.Offset, bodyLength); var record = new NRecord(1, type, requestID, bodyLength, send_buffers); record.Send(socket); } catch (System.Net.Sockets.SocketException) { } } } }
public Record(Socket socket, Buffers receive_buffer) : this() { if (socket == null) { throw new ArgumentNullException("socket"); } CompatArraySegment <byte> header_buffer = receive_buffer.EnforceHeaderLength(HeaderSize); // Read the 8 byte record header. ReceiveAll(socket, header_buffer, HeaderSize); // Read the values from the data. version = header_buffer [0]; type = (RecordType)header_buffer [1]; request_id = ReadUInt16(header_buffer, 2); BodyLength = ReadUInt16(header_buffer, 4); byte padding_length = header_buffer [6]; CompatArraySegment <byte> body_buffer = receive_buffer.EnforceBodyLength(BodyLength); // Read the record data, and throw an exception if the // complete data cannot be read. if (BodyLength > 0) { ReceiveAll(socket, body_buffer, BodyLength); } CompatArraySegment <byte> padding_buffer = receive_buffer.EnforcePaddingLength(padding_length); if (padding_length > 0) { ReceiveAll(socket, padding_buffer, padding_length); } buffers = receive_buffer; Logger.Write(LogLevel.Debug, Strings.Record_Received, Type, RequestID, BodyLength); }