コード例 #1
0
        protected override Task WriteToStreamBondedAsync(Stream stream, IBonded value)
        {
            var sjw = new SimpleJsonWriter(stream);

            value.Serialize(sjw);
            sjw.Flush();
            return(Task.CompletedTask);
        }
コード例 #2
0
        internal static ArraySegment <byte> Marshal(IBonded bonded)
        {
            var output = new OutputBuffer(4096);
            var writer = new CompactBinaryWriter <OutputBuffer>(output);

            writer.WriteVersion();
            bonded.Serialize(writer);
            return(output.Data);
        }
コード例 #3
0
        internal static Frame MessageToFrame(ulong conversationId, string methodName, PayloadType type, IMessage payload, IBonded layerData, Logger logger)
        {
            var frame = new Frame(logger);

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

                if (payload.IsError)
                {
                    headers.error_code = payload.Error.Deserialize <Error>().error_code;
                }
                else
                {
                    headers.error_code = (int)ErrorCode.OK;
                }

                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);
                // TODO: See TODO below about issues with IBonded Marshal.TO(...)
                compactWriter.WriteVersion();
                layerData.Serialize(compactWriter);
                frame.Add(new Framelet(FrameletType.LayerData, outputBuffer.Data));
            }

            {
                var userData = payload.IsError ? (IBonded)payload.Error : (IBonded)payload.RawPayload;


                const int initialPayloadBufferSize = 1024;
                var       outputBuffer             = new OutputBuffer(initialPayloadBufferSize);
                var       compactWriter            = new CompactBinaryWriter <OutputBuffer>(outputBuffer);
                // TODO: marshal dies on IBonded Marshal.To(compactWriter, request)
                // understand more deeply why and consider fixing
                compactWriter.WriteVersion();
                userData.Serialize(compactWriter);

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

            return(frame);
        }
コード例 #4
0
        protected ArraySegment <byte> SerializeToBytes(IBonded value)
        {
            if (value == null)
            {
                throw new ArgumentNullException(nameof(value));
            }

            this.Buffer.Position = 0;
            value.Serialize(this.Writer);
            return(this.Buffer.Data);
        }
コード例 #5
0
ファイル: EpoxyConnection.cs プロジェクト: kleopatra999/bond
        internal static Frame MessageToFrame(ulong conversationId, string methodName, PayloadType type, IMessage message, IBonded layerData, Logger logger)
        {
            var frame = new Frame(logger);

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

                if (message.IsError)
                {
                    headers.error_code = message.Error.Deserialize <Error>().error_code;
                }
                else
                {
                    headers.error_code = (int)ErrorCode.OK;
                }

                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));
            }

            {
                var userData = message.IsError ? (IBonded)message.Error : (IBonded)message.RawPayload;

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

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

            return(frame);
        }
コード例 #6
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);
        }
コード例 #7
0
ファイル: InterfaceTests.cs プロジェクト: robrodi/bond
 public void Serialize <W>(W writer)
 {
     bonded.Serialize(writer);
 }
コード例 #8
0
ファイル: Serializer.cs プロジェクト: zhipenghan/bond
 /// <summary>
 /// Serialize IBonded to protocol writer of type W
 /// </summary>
 /// <typeparam name="W">Protocol writer</typeparam>
 /// <param name="writer">Writer instance</param>
 /// <param name="bonded">IBonded instance</param>
 public static void To <W>(W writer, IBonded bonded)
 {
     bonded.Serialize(writer);
 }
コード例 #9
0
 public void Serialize <W>(W writer)
 {
     _instance.Serialize <W>(writer);
 }