using System;
using System.IO;
namespace Lidgren.Network
{
public partial class NetIncomingMessage : Stream
{
public override bool CanRead { get { return true; } }
public override bool CanSeek { get { return true; } }
public override bool CanWrite { get { return false; } }
public override void Flush()
{
// no op
}
///
/// Gets the length in bytes
///
public override long Length
{
get { return LengthBytes; }
}
public override int Read(byte[] buffer, int offset, int count)
{
// limit amount to remaining
int remainingBytes = NetUtility.BytesToHoldBits(m_bitLength - m_readPosition);
if (count > remainingBytes)
count = remainingBytes;
if (count < 1)
return 0;
ReadBytes(buffer, offset, count);
return count;
}
///
/// Sets the position in the stream, in bytes
///
public override long Seek(long offset, SeekOrigin origin)
{
switch (origin)
{
case SeekOrigin.Begin:
Position = (offset * 8);
break;
case SeekOrigin.Current:
Position = Position + (offset * 8);
break;
case SeekOrigin.End:
Position = (LengthBytes - offset) * 8;
break;
default:
throw new NotImplementedException("Bad SeekOrigin");
}
return Position;
}
public override void SetLength(long value)
{
throw new NetException("It's not possible to set the length of the NetIncomingMessage");
}
}
}