// ********************************************************************** 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); } // -------------------------------------------------- }
// ********************************************************************** 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)); } }