internal override int WritePayload(Memory <byte> memory) { NetworkOrderSerializer.WriteUInt16(memory, _method.ProtocolClassId); NetworkOrderSerializer.WriteUInt16(memory.Slice(2), _method.ProtocolMethodId); var argWriter = new MethodArgumentWriter(memory.Slice(4)); _method.WriteArgumentsTo(ref argWriter); argWriter.Flush(); return(4 + argWriter.Offset); }
public static int WriteTo(Span <byte> span, ushort channel, MethodBase method) { const int StartClassId = StartPayload; const int StartMethodArguments = StartPayload + 4; NetworkOrderSerializer.WriteUInt32(span.Slice(StartClassId), (uint)method.ProtocolCommandId); int offset = method.WriteArgumentsTo(span.Slice(StartMethodArguments)); return(WriteBaseFrame(span, FrameType.FrameMethod, channel, StartMethodArguments - StartPayload + offset)); }
public static int WriteTo(Span <byte> span, ushort channel, MethodBase method) { const int StartClassId = StartPayload; const int StartMethodId = StartPayload + 2; const int StartMethodArguments = StartPayload + 4; NetworkOrderSerializer.WriteUInt16(span.Slice(StartClassId), method.ProtocolClassId); NetworkOrderSerializer.WriteUInt16(span.Slice(StartMethodId), method.ProtocolMethodId); var argWriter = new MethodArgumentWriter(span.Slice(StartMethodArguments)); method.WriteArgumentsTo(ref argWriter); return(WriteBaseFrame(span, FrameType.FrameMethod, channel, StartMethodArguments - StartPayload + argWriter.Offset)); }
public MethodOutboundFrame(int channel, MethodBase method) : base(FrameType.FrameMethod, channel) { NetworkBinaryWriter writer = base.GetWriter(); writer.Write((ushort)method.ProtocolClassId); writer.Write((ushort)method.ProtocolMethodId); var argWriter = new MethodArgumentWriter(writer); method.WriteArgumentsTo(argWriter); argWriter.Flush(); }
public override void WritePayload(NetworkBinaryWriter writer) { var ms = new MemoryStream(); var nw = new NetworkBinaryWriter(ms); nw.Write(_method.ProtocolClassId); nw.Write(_method.ProtocolMethodId); var argWriter = new MethodArgumentWriter(nw); _method.WriteArgumentsTo(argWriter); argWriter.Flush(); System.ArraySegment <byte> bufferSegment = ms.GetBufferSegment(); writer.Write((uint)bufferSegment.Count); writer.Write(bufferSegment.Array, bufferSegment.Offset, bufferSegment.Count); }
public void Transmit(int channelNumber, ConnectionBase connection) { Frame frame = new Frame(CommonFraming.Constants.FrameMethod, channelNumber); NetworkBinaryWriter writer = frame.GetWriter(); writer.Write((ushort)m_method.ProtocolClassId); writer.Write((ushort)m_method.ProtocolMethodId); MethodArgumentWriter argWriter = new MethodArgumentWriter(writer); m_method.WriteArgumentsTo(argWriter); argWriter.Flush(); connection.WriteFrame(frame); if (m_method.HasContent) { byte[] body = Body; frame = new Frame(CommonFraming.Constants.FrameHeader, channelNumber); writer = frame.GetWriter(); writer.Write((ushort)m_header.ProtocolClassId); m_header.WriteTo(writer, (ulong)body.Length); connection.WriteFrame(frame); int frameMax = (int)Math.Min(int.MaxValue, connection.FrameMax); int bodyPayloadMax = (frameMax == 0) ? body.Length : frameMax - EmptyContentBodyFrameSize; for (int offset = 0; offset < body.Length; offset += bodyPayloadMax) { int remaining = body.Length - offset; frame = new Frame(CommonFraming.Constants.FrameBody, channelNumber); writer = frame.GetWriter(); writer.Write(body, offset, (remaining < bodyPayloadMax) ? remaining : bodyPayloadMax); connection.WriteFrame(frame); } } }