void write() { foreach (var frame in queue.GetConsumingEnumerable()) { if (frame == null) { Log.Info("Null frame dequeued"); continue; } Log.Debug("-> {0}", frame); var data = AltLinq.ToArray(frame.ToBytes()); lockWrite.WaitOne(); try { clientStream.Write(data, 0, data.Length); clientStream.Flush(); var stream = streamManager.Get(frame.StreamIdentifier); stream.ProcessSentFrame(frame); } catch (Exception ex) { Log.Warn("Error writing frame: {0}, {1}", frame.StreamIdentifier, ex); } finally { lockWrite.Release(); } } }
public IEnumerable <byte> ToBytes() { var data = new List <byte> (); // Copy Frame Length var frameLength = To24BitInt(Length); data.AddRange(ByteArrayExtensions.EnsureBigEndian(frameLength)); // Copy Type data.Add((byte)Type); // Copy Flags data.Add(Flags); // 1 Bit reserved as unset (0) so let's take the first bit of the next 32 bits and unset it var streamId = Util.ConvertToUInt31(StreamIdentifier); data.AddRange(ByteArrayExtensions.EnsureBigEndian(streamId)); var payloadData = AltLinq.ToArray(Payload); // Now the payload data.AddRange(payloadData); return(data); }