public int Decode(Car car, DirectBuffer directBuffer, int bufferOffset) { _messageHeader.Wrap(directBuffer, bufferOffset, 0); car.WrapForDecode(directBuffer, bufferOffset + MessageHeader.Size, _messageHeader.BlockLength, _messageHeader.Version); var templateId = Car.TemplateId; var schemaVersion = Car.SchemaVersion; var serialNumber = car.SerialNumber; var modelYear = car.ModelYear; var available = car.Available; var code = car.Code; for (int i = 0, size = Car.SomeNumbersLength; i < size; i++) { var number = car.GetSomeNumbers(i); } var vehicleCode = car.GetVehicleCode(); OptionalExtras extras = car.Extras; var cruiseControl = (extras & OptionalExtras.CruiseControl) == OptionalExtras.CruiseControl; var sportsPack = (extras & OptionalExtras.SportsPack) == OptionalExtras.SportsPack; var sunRoof = (extras & OptionalExtras.SunRoof) == OptionalExtras.SunRoof; Engine engine = car.Engine; var capacity = engine.Capacity; var numCylinders = engine.NumCylinders; var maxRpm = engine.MaxRpm; for (int i = 0, size = Engine.ManufacturerCodeLength; i < size; i++) { engine.GetManufacturerCode(i); } var length = engine.GetFuel(_buffer, 0, _buffer.Length); var efficiency = engine.Efficiency; var boosterEnabled = engine.BoosterEnabled; var boostType = engine.Booster.BoostType; var horsePower = engine.Booster.HorsePower; var fuelFiguresGroup = car.FuelFigures; while (fuelFiguresGroup.HasNext) { var fuelFigures = fuelFiguresGroup.Next(); var speed = fuelFigures.Speed; var mpg = fuelFigures.Mpg; var usage = fuelFigures.GetUsageDescription(); } var performanceFiguresGroup = car.PerformanceFigures; while (performanceFiguresGroup.HasNext) { performanceFiguresGroup.Next(); var octaneRating = performanceFiguresGroup.OctaneRating; var accelerationGroup = performanceFiguresGroup.Acceleration; for (int i = 0; i < accelerationGroup.Count; i++) { var acceleration = accelerationGroup.Next(); var mpg = acceleration.Mph; var seconds = acceleration.Seconds; } } var man = car.GetManufacturer(); var model = car.GetModel(); var actCode = car.GetActivationCode(); return(car.Size); }
public static void Decode(Car car, DirectBuffer directBuffer, int bufferOffset, int actingBlockLength, int actingVersion) { var buffer = new byte[128]; var sb = new StringBuilder(); // position the car flyweight just after the header on the DirectBuffer car.WrapForDecode(directBuffer, bufferOffset, actingBlockLength, actingVersion); // decode the car properties on by one, directly from the buffer sb.Append("\ncar.templateId=").Append(Car.TemplateId); sb.Append("\ncar.schemaVersion=").Append(Car.SchemaVersion); sb.Append("\ncar.serialNumber=").Append(car.SerialNumber); sb.Append("\ncar.modelYear=").Append(car.ModelYear); sb.Append("\ncar.available=").Append(car.Available); sb.Append("\ncar.code=").Append(car.Code); sb.Append("\ncar.someNumbers="); for (int i = 0, size = Car.SomeNumbersLength; i < size; i++) { sb.Append(car.GetSomeNumbers(i)).Append(", "); } sb.Append("\ncar.vehicleCode="); var vehicleCode = new byte[Car.VehicleCodeLength]; car.GetVehicleCode(vehicleCode, 0); sb.Append(Encoding.GetEncoding(Car.VehicleCodeCharacterEncoding).GetString(vehicleCode, 0, Car.VehicleCodeLength)); OptionalExtras extras = car.Extras; sb.Append("\ncar.extras.cruiseControl=").Append((extras & OptionalExtras.CruiseControl) == OptionalExtras.CruiseControl); // this is how you can find out if a specific flag is set in a flag enum sb.Append("\ncar.extras.sportsPack=").Append((extras & OptionalExtras.SportsPack) == OptionalExtras.SportsPack); sb.Append("\ncar.extras.sunRoof=").Append((extras & OptionalExtras.SunRoof) == OptionalExtras.SunRoof); Engine engine = car.Engine; sb.Append("\ncar.engine.capacity=").Append(engine.Capacity); sb.Append("\ncar.engine.numCylinders=").Append(engine.NumCylinders); sb.Append("\ncar.engine.maxRpm=").Append(engine.MaxRpm); sb.Append("\ncar.engine.manufacturerCode="); for (int i = 0, size = Engine.ManufacturerCodeLength; i < size; i++) { sb.Append((char)engine.GetManufacturerCode(i)); } int length = engine.GetFuel(buffer, 0, buffer.Length); sb.Append("\ncar.engine.fuel=").Append(Encoding.ASCII.GetString(buffer, 0, length)); // string requires a bit of work to decode sb.Append("\ncar.engine.Efficiency=").Append(engine.Efficiency); sb.Append("\ncar.engine.BoosterEnabled=").Append(engine.BoosterEnabled); sb.Append("\ncar.engine.Booster.BoostType=").Append(engine.Booster.BoostType); sb.Append("\ncar.engine.Booster.HorsePower=").Append(engine.Booster.HorsePower); // The first way to access a repeating group is by using Next() var fuelFiguresGroup = car.FuelFigures; while (fuelFiguresGroup.HasNext) { var fuelFigures = fuelFiguresGroup.Next(); sb.Append("\ncar.fuelFigures.speed=").Append(fuelFigures.Speed); sb.Append("\ncar.fuelFigures.mpg=").Append(fuelFigures.Mpg); sb.Append("\ncar.fuelFigures.UsageDescription=").Append(Encoding.GetEncoding(Car.FuelFiguresGroup.UsageDescriptionCharacterEncoding).GetString(fuelFigures.GetUsageDescriptionBytes())); } // The second way to access a repeating group is to use an iterator foreach (Car.PerformanceFiguresGroup performanceFigures in car.PerformanceFigures) { sb.Append("\ncar.performanceFigures.octaneRating=").Append(performanceFigures.OctaneRating); // The third way to access a repeating group is loop over the count of elements var accelerationGroup = performanceFigures.Acceleration; for (int i = 0; i < accelerationGroup.Count; i++) { var acceleration = accelerationGroup.Next(); sb.Append("\ncar.performanceFigures.acceleration.mph=").Append(acceleration.Mph); sb.Append("\ncar.performanceFigures.acceleration.seconds=").Append(acceleration.Seconds); } } // variable length fields sb.Append("\ncar.manufacturer.semanticType=").Append(Car.ManufacturerMetaAttribute(MetaAttribute.SemanticType)); length = car.GetManufacturer(buffer, 0, buffer.Length); sb.Append("\ncar.manufacturer=").Append(Encoding.GetEncoding(Car.ManufacturerCharacterEncoding).GetString(buffer, 0, length)); length = car.GetModel(buffer, 0, buffer.Length); sb.Append("\ncar.model=").Append(Encoding.GetEncoding(Car.ModelCharacterEncoding).GetString(buffer, 0, length)); length = car.GetActivationCode(buffer, 0, buffer.Length); sb.Append("\ncar.activationcode=").Append(Encoding.GetEncoding(Car.ActivationCodeCharacterEncoding).GetString(buffer, 0, length)); sb.Append("\ncar.size=").Append(car.Size); Console.WriteLine(sb.ToString()); }
public static void Decode(Car car, DirectBuffer directBuffer, int bufferOffset, int actingBlockLength, int actingVersion) { var buffer = new byte[128]; var sb = new StringBuilder(); // position the car flyweight just after the header on the DirectBuffer car.WrapForDecode(directBuffer, bufferOffset, actingBlockLength, actingVersion); // decode the car properties on by one, directly from the buffer sb.Append("\ncar.templateId=").Append(Car.TemplateId); sb.Append("\ncar.serialNumber=").Append(car.SerialNumber); sb.Append("\ncar.modelYear=").Append(car.ModelYear); sb.Append("\ncar.available=").Append(car.Available); sb.Append("\ncar.code=").Append(car.Code); sb.Append("\ncar.someNumbers="); for (int i = 0, size = Car.SomeNumbersLength; i < size; i++) { sb.Append(car.GetSomeNumbers(i)).Append(", "); } sb.Append("\ncar.vehicleCode="); for (int i = 0, size = Car.VehicleCodeLength; i < size; i++) { sb.Append((char)car.GetVehicleCode(i)); } OptionalExtras extras = car.Extras; sb.Append("\ncar.extras.cruiseControl=").Append((extras & OptionalExtras.CruiseControl) == OptionalExtras.CruiseControl); // this is how you can find out if a specific flag is set in a flag enum sb.Append("\ncar.extras.sportsPack=").Append((extras & OptionalExtras.SportsPack) == OptionalExtras.SportsPack); sb.Append("\ncar.extras.sunRoof=").Append((extras & OptionalExtras.SunRoof) == OptionalExtras.SunRoof); Engine engine = car.Engine; sb.Append("\ncar.engine.capacity=").Append(engine.Capacity); sb.Append("\ncar.engine.numCylinders=").Append(engine.NumCylinders); sb.Append("\ncar.engine.maxRpm=").Append(engine.MaxRpm); sb.Append("\ncar.engine.manufacturerCode="); for (int i = 0, size = Engine.ManufacturerCodeLength; i < size; i++) { sb.Append((char)engine.GetManufacturerCode(i)); } int length = engine.GetFuel(buffer, 0, buffer.Length); sb.Append("\ncar.engine.fuel=").Append(Encoding.ASCII.GetString(buffer, 0, length)); // string requires a bit of work to decode var fuelFiguresGroup = car.FuelFigures; // decode a repeatable group (we will change the API to support foreach soon) while (fuelFiguresGroup.HasNext) { var fuelFigures = fuelFiguresGroup.Next(); sb.Append("\ncar.fuelFigures.speed=").Append(fuelFigures.Speed); sb.Append("\ncar.fuelFigures.mpg=").Append(fuelFigures.Mpg); } // the nested group var performanceFiguresGroup = car.PerformanceFigures; while (performanceFiguresGroup.HasNext) { var performanceFigures = performanceFiguresGroup.Next(); sb.Append("\ncar.performanceFigures.octaneRating=").Append(performanceFigures.OctaneRating); var accelerationGroup = performanceFigures.Acceleration; while (accelerationGroup.HasNext) { var acceleration = accelerationGroup.Next(); sb.Append("\ncar.performanceFigures.acceleration.mph=").Append(acceleration.Mph); sb.Append("\ncar.performanceFigures.acceleration.seconds=").Append(acceleration.Seconds); } } // variable length fields sb.Append("\ncar.make.semanticType=").Append(Car.MakeMetaAttribute(MetaAttribute.SemanticType)); length = car.GetMake(buffer, 0, buffer.Length); sb.Append("\ncar.make=").Append(Encoding.GetEncoding(Car.MakeCharacterEncoding).GetString(buffer, 0, length)); length = car.GetModel(buffer, 0, buffer.Length); sb.Append("\ncar.model=").Append(Encoding.GetEncoding(Car.ModelCharacterEncoding).GetString(buffer, 0, length)); sb.Append("\ncar.size=").Append(car.Size); Console.WriteLine(sb.ToString()); }