public override object Read(BinaryReader reader, byte version)
{
int id = reader.ReadInt32();
var type = (InstrumentType)reader.ReadByte();
var symbol = reader.ReadString();
var description = reader.ReadString();
var currencyId = reader.ReadByte();
var exchange = reader.ReadString();
var instrument = new Instrument(id, type, symbol, description, currencyId, exchange);
instrument.TickSize = reader.ReadDouble();
instrument.Maturity = new DateTime(reader.ReadInt64());
instrument.Factor = reader.ReadDouble();
instrument.Strike = reader.ReadDouble();
instrument.PutCall = (PutCall)reader.ReadByte();
instrument.Margin = reader.ReadDouble();
int count = reader.ReadInt32();
for (int i = 0; i < count; i++)
instrument.AltId.Add((AltId)this.streamerManager.Deserialize(reader));
count = reader.ReadInt32();
for (int j = 0; j < count; j++)
instrument.Legs.Add((Leg)this.streamerManager.Deserialize(reader));
if (version == 0)
{
int cnt = reader.ReadInt32();
for (int k = 0; k < cnt; k++)
instrument.Fields[k] = reader.ReadDouble();
}
if (version >= 1)
instrument.PriceFormat = reader.ReadString();
if (version >= 1 && version <= 4)
{
int size = reader.ReadInt32();
if (size != -1)
{
byte typeId = reader.ReadByte();
byte ver = reader.ReadByte();
var fields = new ObjectTable();
int index;
while ((index = reader.ReadInt32()) != -1)
{
typeId = reader.ReadByte();
var objectStreamer = this.streamerManager.Get(typeId);
fields[index] = objectStreamer.Read(reader, ver);
}
instrument.Fields = fields;
}
}
if (version >= 2)
{
instrument.CCY1 = reader.ReadByte();
instrument.CCY2 = reader.ReadByte();
}
if (version >= 3)
{
instrument.DeleteCached = reader.ReadBoolean();
}
if (version >= 4)
{
instrument.Formula = reader.ReadString();
}
if (version >= 5)
{
int eof = reader.ReadInt32();
if (eof != -1)
instrument.Fields = (ObjectTable)this.streamerManager.Deserialize(reader);
}
return instrument;
}