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); }
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; }
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; }
public FrameBuilder Type(FrameletType type) { byte[] bytes = BitConverter.GetBytes(unchecked ((UInt16)type)); stream.Write(bytes, 0, bytes.Length); return(this); }
public FrameBuilder Type(FrameletType type) { byte[] bytes = BitConverter.GetBytes(unchecked((UInt16)type)); stream.Write(bytes, 0, bytes.Length); return this; }