Example #1
0
        internal static Frame MessageToFrame(
            ulong conversationId,
            string serviceName,
            string methodName,
            EpoxyMessageType type,
            IMessage message,
            IBonded layerData,
            Logger logger)
        {
            var frame = new Frame(logger);

            {
                var headers = new EpoxyHeaders
                {
                    conversation_id = conversationId,
                    message_type    = type,
                    service_name    = serviceName ?? string.Empty, // service_name is not nullable
                    method_name     = methodName ?? string.Empty   // method_name is not nullable
                };

                const int initialHeaderBufferSize = 150;
                var       outputBuffer            = new OutputBuffer(initialHeaderBufferSize);
                var       fastWriter = new FastBinaryWriter <OutputBuffer>(outputBuffer);
                Serialize.To(fastWriter, headers);

                frame.Add(new Framelet(FrameletType.EpoxyHeaders, outputBuffer.Data));
            }

            if (layerData != null)
            {
                const int initialLayerDataBufferSize = 150;
                var       outputBuffer  = new OutputBuffer(initialLayerDataBufferSize);
                var       compactWriter = new CompactBinaryWriter <OutputBuffer>(outputBuffer);
                compactWriter.WriteVersion();
                layerData.Serialize(compactWriter);
                frame.Add(new Framelet(FrameletType.LayerData, outputBuffer.Data));
            }

            {
                FrameletType frameletType = message.IsError ? FrameletType.ErrorData : FrameletType.PayloadData;
                IBonded      userData     = message.IsError ? message.Error : message.RawPayload;

                const int initialMessageBufferSize = 1024;
                var       outputBuffer             = new OutputBuffer(initialMessageBufferSize);
                var       compactWriter            = new CompactBinaryWriter <OutputBuffer>(outputBuffer);
                compactWriter.WriteVersion();
                userData.Serialize(compactWriter);

                frame.Add(new Framelet(frameletType, outputBuffer.Data));
            }

            return(frame);
        }
Example #2
0
File: Frame.cs Project: ikvm/bond
        public Framelet(FrameletType type, ArraySegment <byte> contents)
        {
            switch (type)
            {
            case FrameletType.EpoxyConfig:
            case FrameletType.EpoxyHeaders:
            case FrameletType.LayerData:
            case FrameletType.PayloadData:
            case FrameletType.ProtocolError:
                break;

            default:
                throw new ArgumentException("Unknown framelet type", nameof(type));
            }

            if (contents.Array == null || contents.Count == 0)
            {
                throw new ArgumentException("Framelet contents cannot be empty", nameof(contents));
            }

            Type     = type;
            Contents = contents;
        }
Example #3
0
        public Framelet(FrameletType type, ArraySegment<byte> contents)
        {
            switch (type)
            {
                case FrameletType.EpoxyConfig:
                case FrameletType.EpoxyHeaders:
                case FrameletType.LayerData:
                case FrameletType.PayloadData:
                case FrameletType.ProtocolError:
                    break;

                default:
                    throw new ArgumentException("Unknown framelet type", nameof(type));
            }

            if (contents.Array == null || contents.Count == 0)
            {
                throw new ArgumentException("Framelet contents cannot be empty", nameof(contents));
            }

            Type = type;
            Contents = contents;
        }
Example #4
0
 public FrameBuilder Type(FrameletType type)
 {
     byte[] bytes = BitConverter.GetBytes(unchecked ((UInt16)type));
     stream.Write(bytes, 0, bytes.Length);
     return(this);
 }
Example #5
0
 public FrameBuilder Type(FrameletType type)
 {
     byte[] bytes = BitConverter.GetBytes(unchecked((UInt16)type));
     stream.Write(bytes, 0, bytes.Length);
     return this;
 }