public RequestFrame GetFrame(short streamId) { //protocol v2: <type><n><query_1>...<query_n><consistency> //protocol v3: <type><n><query_1>...<query_n><consistency><flags>[<serial_consistency>][<timestamp>] var wb = new BEBinaryWriter(); wb.WriteFrameHeader((byte)ProtocolVersion, _headerFlags, streamId, OpCode); wb.WriteByte((byte)_type); wb.WriteInt16((short)_requests.Count); foreach (var br in _requests) { br.WriteToBatch((byte)ProtocolVersion, wb); } wb.WriteInt16((short)Consistency); if (ProtocolVersion >= 3) { wb.WriteByte((byte)_batchFlags); } if (_serialConsistency != null) { wb.WriteInt16((short)_serialConsistency.Value); } if (_timestamp != null) { //Expressed in microseconds wb.WriteLong(TypeCodec.ToUnixTime(_timestamp.Value).Ticks / 10); } return(wb.GetFrame()); }
//TODO: Move to ExecuteRequest and QueryRequest internal void Write(BEBinaryWriter wb, byte protocolVersion, bool isPrepared) { //protocol v1: <query><n><value_1>....<value_n><consistency> //protocol v2: <query><consistency><flags>[<n><value_1>...<value_n>][<result_page_size>][<paging_state>][<serial_consistency>] //protocol v3: <query><consistency><flags>[<n>[name_1]<value_1>...[name_n]<value_n>][<result_page_size>][<paging_state>][<serial_consistency>][<timestamp>] var flags = GetFlags(); if (protocolVersion > 1) { wb.WriteUInt16((ushort)Consistency); wb.WriteByte((byte)flags); } if (flags.HasFlag(QueryFlags.Values)) { wb.WriteUInt16((ushort)Values.Length); for (var i = 0; i < Values.Length; i++) { if (flags.HasFlag(QueryFlags.WithNameForValues)) { var name = ValueNames[i]; wb.WriteString(name); } var v = Values[i]; var bytes = TypeCodec.Encode(protocolVersion, v); wb.WriteBytes(bytes); } } else if (protocolVersion == 1 && isPrepared) { //n values is not optional on protocol v1 //Write 0 values wb.WriteUInt16(0); } if (protocolVersion == 1) { //Protocol v1 ends here wb.WriteUInt16((ushort)Consistency); return; } if ((flags & QueryFlags.PageSize) == QueryFlags.PageSize) { wb.WriteInt32(PageSize); } if ((flags & QueryFlags.WithPagingState) == QueryFlags.WithPagingState) { wb.WriteBytes(PagingState); } if ((flags & QueryFlags.WithSerialConsistency) == QueryFlags.WithSerialConsistency) { wb.WriteUInt16((ushort)SerialConsistency); } if (Timestamp != null) { //Expressed in microseconds wb.WriteLong(TypeCodec.ToUnixTime(Timestamp.Value).Ticks / 10); } }
public RequestFrame GetFrame(short streamId) { //protocol v2: <type><n><query_1>...<query_n><consistency> //protocol v3: <type><n><query_1>...<query_n><consistency><flags>[<serial_consistency>][<timestamp>] var wb = new BEBinaryWriter(); wb.WriteFrameHeader((byte)ProtocolVersion, _headerFlags, streamId, OpCode); wb.WriteByte((byte) _type); wb.WriteInt16((short) _requests.Count); foreach (var br in _requests) { br.WriteToBatch((byte)ProtocolVersion, wb); } wb.WriteInt16((short) Consistency); if (ProtocolVersion >= 3) { wb.WriteByte((byte)_batchFlags); } if (_serialConsistency != null) { wb.WriteInt16((short)_serialConsistency.Value); } if (_timestamp != null) { //Expressed in microseconds wb.WriteLong(TypeCodec.ToUnixTime(_timestamp.Value).Ticks / 10); } return wb.GetFrame(); }