コード例 #1
0
 public void Load(CommandDataStreamNormal data)
 {
     m_lastChannelID = 0;
     m_lastTimestamp = default(CtpTime);
     m_lastQuality   = 0;
     m_stream.SetBuffer(data.ObjectStream);
 }
コード例 #2
0
 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);
         }
     }
 }
コード例 #3
0
 private CtpObject(CtpTime value)
     : this()
 {
     ValueTypeCode = CtpTypeCode.CtpTime;
     UnsafeCtpTime = value;
 }
コード例 #4
0
        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);
        }