package me.xcoding.opencdc.binlog.parser;
import me.xcoding.opencdc.binlog.EventContext;
import me.xcoding.opencdc.binlog.event.EventHeader;
import me.xcoding.opencdc.mysql.protocol.BasicReader;
/**
* v4 event structure:
*
* +=====================================+
* | event | timestamp 0 : 4 |
* | header +----------------------------+
* | | type_code 4 : 1 |
* | +----------------------------+
* | | server_id 5 : 4 |
* | +----------------------------+
* | | event_length 9 : 4 |
* | +----------------------------+
* | | next_position 13 : 4 |
* | +----------------------------+
* | | flags 17 : 2 |
* | +----------------------------+
* | | extra_headers 19 : x-19 |
* +=====================================+
* | event | fixed part x : y |
* | data +----------------------------+
* | | variable part |
* +=====================================+
*
* header length = x bytes
* data length = (event_length - x) bytes
* fixed data length = y bytes variable data length = (event_length - (x + y)) bytes
* x is given by the header_length field in the format description event (FDE). Currently,
* x is 19, so the extra_headers field is empty.
* y is specific to the event type, and is given by the FDE.
* The fixed-part length is the same for all events of a given type,
* but may vary for different event types.
*
* The fixed part of the event data is sometimes referred to as the "post-header" part.
* The variable part is sometimes referred to as the "payload" or "body."
*
* @author Teny ZH(zh.Teny.1@gmail.com)
*
*/
public class EventHeaderParser implements EventParser {
@Override
public EventHeader parser(EventContext context, BasicReader packet) {
EventHeader header = new EventHeader(
packet.readFixedIntT4() & BasicReader._8F,
packet.readFixedIntT1(),
packet.readFixedIntT4(),
packet.readFixedIntT4(),
packet.readFixedIntT4(),
packet.readFixedIntT2(),
null
);
System.out.print("EventHeaderParser.parser()");
System.out.println(header);
return header;
}
}