System.ServiceModel.Http2Protocol.FrameSerializer.SerializeControlFrame C# (CSharp) Метод

SerializeControlFrame() приватный Метод

Serializes the control frame.
private SerializeControlFrame ( ControlFrame frame ) : byte[]
frame System.ServiceModel.Http2Protocol.ProtocolFrames.ControlFrame The frame.
Результат byte[]
        private byte[] SerializeControlFrame(ControlFrame frame)
        {
            var byteList = new List<byte>();

            byteList.Add((byte)(((frame.Version & 0xFF00) >> 8) | 0x80));
            byteList.Add((byte)(frame.Version & 0x00FF));

            byteList.Add((byte)(((Int16)frame.Type & 0xFF00) >> 8));
            byteList.Add((byte)((Int16)frame.Type & 0x00FF));

            var headersArray = new byte[0];
            switch (frame.Type)
            {
                case FrameType.SynStream:
                    byteList.Add(Convert.ToByte(frame.Flags | (frame.IsFinal ? 0x01 : 0x00)));

                    headersArray = SerializeControlFrameHeaders(frame.Headers);

                    if (headersArray.Length > 0)
                    {
                        ProcessorRun(ref headersArray, DirectionProcessType.Outbound, frame.Flags);
                    }

                    byteList.AddRange(BinaryHelper.Int32ToBytes(headersArray.Length + 10, 3));
                    byteList.AddRange(BinaryHelper.Int32ToBytes(frame.StreamId));

                    byteList.AddRange(BinaryHelper.Int32ToBytes(0));

                    byteList.Add(Convert.ToByte(frame.Priority >> 5));

                    byteList.Add(Unused);

                    break;
                case FrameType.RTS:
                    byteList.Add(0);
                    byteList.AddRange(BinaryHelper.Int32ToBytes(headersArray.Length + 8, 3));
                    byteList.AddRange(BinaryHelper.Int32ToBytes(frame.StreamId));
                    byteList.AddRange(BinaryHelper.Int32ToBytes((int)frame.StatusCode));
                    break;
                case FrameType.SynReply:
                    byteList.Add(frame.Flags);
                    headersArray = SerializeControlFrameHeaders(frame.Headers);

                    if (headersArray.Length > 0)
                    {
                        ProcessorRun(ref headersArray, DirectionProcessType.Outbound, frame.Flags);
                    }

                    byteList.AddRange(BinaryHelper.Int32ToBytes(headersArray.Length + 4, 3));
                    byteList.AddRange(BinaryHelper.Int32ToBytes(frame.StreamId));
                    break;
                case FrameType.GoAway:
                    byteList.Add(frame.Flags);
                    byteList.AddRange(BinaryHelper.Int32ToBytes(frame.Length,3));
                    byteList.AddRange(BinaryHelper.Int32ToBytes(frame.StreamId));
                    byteList.AddRange(BinaryHelper.Int32ToBytes((int)frame.StatusCode));
                    break;
                case FrameType.Ping:
                    byteList.Add(frame.Flags);
                    byteList.AddRange(BinaryHelper.Int32ToBytes(frame.Length,3));
                    byteList.AddRange(BinaryHelper.Int32ToBytes(frame.StreamId));
                    break;
                case FrameType.WindowUpdate:
                    byteList.Add(frame.Flags);
                    byteList.AddRange(BinaryHelper.Int32ToBytes(frame.Length,3));
                    byteList.AddRange(BinaryHelper.Int32ToBytes(frame.StreamId));
                    byteList.AddRange(BinaryHelper.Int64ToBytes(((WindowUpdateFrame)frame).DeltaWindowSize));
                    break;
                case FrameType.Settings:
                    byteList.Add(frame.Flags);
                    byteList.AddRange(BinaryHelper.Int32ToBytes(frame.Length,3));
                    byteList.AddRange(BinaryHelper.Int32ToBytes(frame.NumberOfEntries));
                    break;
            }

            byteList.AddRange(headersArray);
            return byteList.ToArray();
        }