Exemplo n.º 1
0
        // **********************************************************************

        public void Write(DateTime dateTime, AuxInfo auxInfo)
        {
            dw.WriteRecHeader(sid, dateTime);

            // --------------------------------------------------

            long         milliseconds = DateTimeHelper.ToMs(auxInfo.DateTime);
            AuxInfoFlags flags        = AuxInfoFlags.None;

            // --------------------------------------------------

            if (lastMilliseconds != milliseconds)
            {
                flags |= AuxInfoFlags.DateTime;
            }

            if (lastAskTotal != auxInfo.AskTotal)
            {
                flags |= AuxInfoFlags.AskTotal;
            }

            if (lastBidTotal != auxInfo.BidTotal)
            {
                flags |= AuxInfoFlags.BidTotal;
            }

            if (lastOI != auxInfo.OI)
            {
                flags |= AuxInfoFlags.OI;
            }

            if (lastPrice != auxInfo.Price)
            {
                flags |= AuxInfoFlags.Price;
            }

            if (lastHiLimit != auxInfo.HiLimit ||
                lastLoLimit != auxInfo.LoLimit ||
                lastDeposit != auxInfo.Deposit)
            {
                flags |= AuxInfoFlags.SessionInfo;
            }

            if (lastRate != auxInfo.Rate)
            {
                flags |= AuxInfoFlags.Rate;
            }

            if (auxInfo.Message != null)
            {
                flags |= AuxInfoFlags.Message;
            }

            // --------------------------------------------------

            dw.Write((byte)flags);

            // --------------------------------------------------

            if ((flags & AuxInfoFlags.DateTime) != 0)
            {
                dw.WriteGrowing(milliseconds, ref lastMilliseconds);
            }

            if ((flags & AuxInfoFlags.AskTotal) != 0)
            {
                dw.WriteLeb128(auxInfo.AskTotal - lastAskTotal);
                lastAskTotal = auxInfo.AskTotal;
            }

            if ((flags & AuxInfoFlags.BidTotal) != 0)
            {
                dw.WriteLeb128(auxInfo.BidTotal - lastBidTotal);
                lastBidTotal = auxInfo.BidTotal;
            }

            if ((flags & AuxInfoFlags.OI) != 0)
            {
                dw.WriteLeb128(auxInfo.OI - lastOI);
                lastOI = auxInfo.OI;
            }

            if ((flags & AuxInfoFlags.Price) != 0)
            {
                dw.WriteLeb128(auxInfo.Price - lastPrice);
                lastPrice = auxInfo.Price;
            }

            if ((flags & AuxInfoFlags.SessionInfo) != 0)
            {
                dw.WriteLeb128(auxInfo.HiLimit);
                dw.WriteLeb128(auxInfo.LoLimit);
                dw.Write(auxInfo.Deposit);

                lastHiLimit = auxInfo.HiLimit;
                lastLoLimit = auxInfo.LoLimit;
                lastDeposit = auxInfo.Deposit;
            }

            if ((flags & AuxInfoFlags.Rate) != 0)
            {
                dw.Write(auxInfo.Rate);
                lastRate = auxInfo.Rate;
            }

            if ((flags & AuxInfoFlags.Message) != 0)
            {
                dw.Write(auxInfo.Message);
            }

            // --------------------------------------------------
        }
Exemplo n.º 2
0
        // **********************************************************************

        public override void Read(bool push)
        {
            AuxInfoFlags flags = (AuxInfoFlags)dr.ReadByte();
            string       message;

            // ------------------------------------------------------------

            if ((flags & AuxInfoFlags.DateTime) != 0)
            {
                lastMilliseconds = dr.ReadGrowing(lastMilliseconds);
            }

            if ((flags & AuxInfoFlags.AskTotal) != 0)
            {
                lastAskTotal += (int)dr.ReadLeb128();
            }

            if ((flags & AuxInfoFlags.BidTotal) != 0)
            {
                lastBidTotal += (int)dr.ReadLeb128();
            }

            if ((flags & AuxInfoFlags.OI) != 0)
            {
                lastOI += (int)dr.ReadLeb128();
            }

            if ((flags & AuxInfoFlags.Price) != 0)
            {
                lastPrice += (int)dr.ReadLeb128();
            }

            if ((flags & AuxInfoFlags.SessionInfo) != 0)
            {
                lastHiLimit = (int)dr.ReadLeb128();
                lastLoLimit = (int)dr.ReadLeb128();
                lastDeposit = dr.ReadDouble();
            }

            if ((flags & AuxInfoFlags.Rate) != 0)
            {
                lastRate = dr.ReadDouble();
            }

            if ((flags & AuxInfoFlags.Message) != 0)
            {
                message = dr.ReadString();
            }
            else
            {
                message = null;
            }

            // ------------------------------------------------------------

            if (push && Handler != null)
            {
                Handler(Security.Key, new AuxInfo(
                            DateTimeHelper.FromMs(lastMilliseconds),
                            lastPrice, lastAskTotal, lastBidTotal,
                            lastOI, lastHiLimit, lastLoLimit,
                            lastDeposit, lastRate, message));
            }
        }