using System.IO;
namespace Thrift.Transport
-{
+{
public class TFramedTransport : TTransport, IDisposable
{
protected TTransport transport = null;
}
}
- public TFramedTransport()
+ protected TFramedTransport()
{
InitWriteBuffer();
}
{
byte[] i32rd = new byte[header_size];
transport.ReadAll(i32rd, 0, header_size);
- int size =
- ((i32rd[0] & 0xff) << 24) |
- ((i32rd[1] & 0xff) << 16) |
- ((i32rd[2] & 0xff) << 8) |
- ((i32rd[3] & 0xff));
-
+ int size = DecodeFrameSize(i32rd);
byte[] buff = new byte[size];
transport.ReadAll(buff, 0, size);
InitWriteBuffer();
// Inject message header into the reserved buffer space
- buf[0] = (byte)(0xff & (data_len >> 24));
- buf[1] = (byte)(0xff & (data_len >> 16));
- buf[2] = (byte)(0xff & (data_len >> 8));
- buf[3] = (byte)(0xff & (data_len));
+ EncodeFrameSize(data_len,ref buf);
// Send the entire message at once
transport.Write(buf, 0, len);
// Reserve space for message header to be put right before sending it out
writeBuffer.Write ( header_dummy, 0, header_size );
}
- #region " IDisposable Support "
- private bool _IsDisposed;
-
- // IDisposable
- protected override void Dispose(bool disposing)
- {
- if (!_IsDisposed)
- {
- if (disposing)
- {
- if (readBuffer != null)
- readBuffer.Dispose();
- }
- }
- _IsDisposed = true;
- }
- #endregion
- }
+
+ private static void EncodeFrameSize(int frameSize, ref byte[] buf)
+ {
+ buf[0] = (byte)(0xff & (frameSize >> 24));
+ buf[1] = (byte)(0xff & (frameSize >> 16));
+ buf[2] = (byte)(0xff & (frameSize >> 8));
+ buf[3] = (byte)(0xff & (frameSize));
+ }
+
+ private static int DecodeFrameSize(byte[] buf)
+ {
+ return
+ ((buf[0] & 0xff) << 24) |
+ ((buf[1] & 0xff) << 16) |
+ ((buf[2] & 0xff) << 8) |
+ ((buf[3] & 0xff));
+ }
+
+
+ #region " IDisposable Support "
+ private bool _IsDisposed;
+
+ // IDisposable
+ protected override void Dispose(bool disposing)
+ {
+ if (!_IsDisposed)
+ {
+ if (disposing)
+ {
+ if (readBuffer != null)
+ readBuffer.Dispose();
+ }
+ }
+ _IsDisposed = true;
+ }
+ #endregion
+ }
}