public override bool EnqueueForOutbound(MemoryStream outputStream, int offset = 0)
{
if (IsHandShaked)
{
outputStream.Position = offset;
var len = (int)outputStream.GetAvaliableByteCounts();
byte[] content = new byte[len];
outputStream.Read(content, 0, len);
if (IsUTF8String)
{
content = Encoding.UTF8.GetBytes(content.Select(x=>(char)x).ToArray());
len = content.Length;
}
outputStream.IgnoreAll();
if (len < 126)
{
outputStream.WriteByte((byte) (IsUTF8String ? 0x81 : 0x82));
outputStream.WriteByte((byte)content.Length);
}
else if (len < 0xFFFF)
{
outputStream.WriteByte((byte)(IsUTF8String ? 0x81 : 0x82));
outputStream.WriteByte(126);
outputStream.WriteByte((byte)(content.Length >> 8));
outputStream.WriteByte((byte)content.Length);
}
else
{
outputStream.WriteByte((byte)(IsUTF8String ? 0x81 : 0x82));
outputStream.WriteByte(127);
for (var i = 63; i >= 0; i -= 8)
{
outputStream.WriteByte((byte)(content.Length >> i));
}
}
outputStream.Write(content, 0, content.Length);
return base.EnqueueForOutbound(outputStream, 0);
}
return base.EnqueueForOutbound(outputStream, offset);
}