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"); } } }