30 lines
912 B
C#
30 lines
912 B
C#
using System.IO;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace EmbedIO.WebSockets.Internal
|
|
{
|
|
internal class FragmentBuffer : MemoryStream
|
|
{
|
|
private readonly bool _fragmentsCompressed;
|
|
private readonly Opcode _fragmentsOpcode;
|
|
|
|
public FragmentBuffer(Opcode frameOpcode, bool frameIsCompressed)
|
|
{
|
|
_fragmentsOpcode = frameOpcode;
|
|
_fragmentsCompressed = frameIsCompressed;
|
|
}
|
|
|
|
public void AddPayload(MemoryStream data) => data.CopyTo(this, 1024);
|
|
|
|
public async Task<MessageEventArgs> GetMessage(CompressionMethod compression)
|
|
{
|
|
var data = _fragmentsCompressed
|
|
? await this.CompressAsync(compression, false, CancellationToken.None).ConfigureAwait(false)
|
|
: this;
|
|
|
|
return new MessageEventArgs(_fragmentsOpcode, data.ToArray());
|
|
}
|
|
}
|
|
}
|