コード例 #1
0
        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();
                }
            }
        }
コード例 #2
0
        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);
        }