public void Load(CommandDataStreamNormal data) { m_lastChannelID = 0; m_lastTimestamp = default(CtpTime); m_lastQuality = 0; m_stream.SetBuffer(data.ObjectStream); }
private void WriteTime(CtpTime value) { EnsureCapacityBytes(9); if (value.Ticks == 0) { WriteSymbol(CtpObjectSymbols.CtpTimeZero); } else { byte firstByte = (byte)(value.Ticks >> 56); if (14 <= firstByte && firstByte <= 17) { WriteBits56(CtpObjectSymbols.CtpTime14 + (byte)(firstByte - 14), (ulong)value.Ticks); } else { WriteBits64(CtpObjectSymbols.CtpTimeElse, (ulong)value.Ticks); } } }
private CtpObject(CtpTime value) : this() { ValueTypeCode = CtpTypeCode.CtpTime; UnsafeCtpTime = value; }
public override bool Read(SttpDataPoint dataPoint) { TryAgain: if (m_stream.IsEmpty) { return(false); } m_lastChannelID++; CtpObject value = m_stream.Read(); if (value.ValueTypeCode == CtpTypeCode.Integer) { long code = value.IsInteger; if (0 <= code && code <= 15) { bool channelIDChanged = (code & 1) != 0; bool hasMetadata = (code & 2) != 0; bool qualityChanged = (code & 4) != 0; bool timeChanged = (code & 8) != 0; if (channelIDChanged) { m_lastChannelID = m_stream.Read().AsInt32; } if (hasMetadata) { Assign(new SttpDataPointID(m_stream.Read()), m_lastChannelID); } if (qualityChanged) { m_lastQuality = m_stream.Read().AsInt64; } if (timeChanged) { m_lastTimestamp = m_stream.Read().AsCtpTime; } value = m_stream.Read(); } else { value = code - 16; } } dataPoint.DataPoint = GetMetadata(m_lastChannelID); dataPoint.Quality = m_lastQuality; dataPoint.Time = m_lastTimestamp; dataPoint.Value = value; if (dataPoint.DataPoint == null) { goto TryAgain; } return(true); }