use of uk.co.real_logic.sbe.ir.Ir in project simple-binary-encoding by real-logic.
the class OtfExample method encodeSchema.
private static void encodeSchema(final ByteBuffer byteBuffer) throws Exception {
final Path path = Paths.get("src/main/resources/example-schema.xml");
try (InputStream in = new BufferedInputStream(Files.newInputStream(path))) {
final MessageSchema schema = XmlSchemaParser.parse(in, ParserOptions.DEFAULT);
final Ir ir = new IrGenerator().generate(schema);
try (IrEncoder irEncoder = new IrEncoder(byteBuffer, ir)) {
irEncoder.encode();
}
}
}
use of uk.co.real_logic.sbe.ir.Ir in project simple-binary-encoding by real-logic.
the class OtfExample method main.
public static void main(final String[] args) throws Exception {
System.out.println("\n*** OTF Example ***\n");
// Encode up message and schema as if we just got them off the wire.
final ByteBuffer encodedSchemaBuffer = ByteBuffer.allocateDirect(SCHEMA_BUFFER_CAPACITY);
encodeSchema(encodedSchemaBuffer);
final ByteBuffer encodedMsgBuffer = ByteBuffer.allocateDirect(MSG_BUFFER_CAPACITY);
encodeTestMessage(encodedMsgBuffer);
// Now lets decode the schema IR so we have IR objects.
encodedSchemaBuffer.flip();
final Ir ir = decodeIr(encodedSchemaBuffer);
// From the IR we can create OTF decoder for message headers.
final OtfHeaderDecoder headerDecoder = new OtfHeaderDecoder(ir.headerStructure());
// Now we have IR we can read the message header
int bufferOffset = 0;
final UnsafeBuffer buffer = new UnsafeBuffer(encodedMsgBuffer);
final int templateId = headerDecoder.getTemplateId(buffer, bufferOffset);
final int schemaId = headerDecoder.getSchemaId(buffer, bufferOffset);
final int actingVersion = headerDecoder.getSchemaVersion(buffer, bufferOffset);
final int blockLength = headerDecoder.getBlockLength(buffer, bufferOffset);
bufferOffset += headerDecoder.encodedLength();
// Given the header information we can select the appropriate message template to do the decode.
// The OTF Java classes are thread safe so the same instances can be reused across multiple threads.
final List<Token> msgTokens = ir.getMessage(templateId);
bufferOffset = OtfMessageDecoder.decode(buffer, bufferOffset, actingVersion, blockLength, msgTokens, new ExampleTokenListener(new PrintWriter(System.out, true)));
if (bufferOffset != encodedMsgBuffer.position()) {
throw new IllegalStateException("Message not fully decoded");
}
}
Aggregations