class Header(Message): # 协议的版本号 version = Int32Field(field_number=1, default=1, oneof_id='version_present') # binlog/redolog 文件名 logfileName = StringField(field_number=2) # binlog/redolog 文件的偏移位置 logfileOffset = Int64Field(field_number=3) # 服务端serverId serverId = Int64Field(field_number=4) # 变更数据的编码 serverenCode = StringField(field_number=5) # 变更数据的执行时间 executeTime = Int64Field(field_number=6) # 变更数据的来源 sourceType = EnumField(field_number=7, default=Type.MYSQL, enum_cls=Type, oneof_id='sourceType_present') # 变更数据的schemaname schemaName = StringField(field_number=8) # 变更数据的tablename tableName = StringField(field_number=9) # 每个event的长度 eventLength = Int64Field(field_number=10) # 数据变更类型 eventType = EnumField(field_number=11, default=EventType.UPDATE, enum_cls=EventType, oneof_id='eventType_present') # 预留扩展 props = MessageField(field_number=12, repeated=True, message_cls=Pair) # 当前事务的gitd gtid = StringField(field_number=13)
class Dump(Message): """TBD when new packets are required""" journal = StringField(field_number=1) position = Int64Field(field_number=2) timestamp = Int64Field(field_number=3, default=0, oneof_id='timestamp_present')
class TransactionBegin(Message): """开始事务的一些信息""" # 已废弃,请使用header里的executeTime executeTime = Int64Field(field_number=1) # 已废弃,Begin里不提供事务id transactionId = StringField(field_number=2) # 预留扩展 props = MessageField(field_number=3, repeated=True, message_cls=Pair) # 执行的thread Id threadId = Int64Field(field_number=4)
class TransactionEnd(Message): """结束事务的一些信息""" # 已废弃,请使用header里的executeTime executeTime = Int64Field(field_number=1) # 事务号 transactionId = StringField(field_number=2) # 预留扩展 props = MessageField(field_number=3, repeated=True, message_cls=Pair)
class ClientAuth(Message): username = StringField(field_number=1) password = BytesField(field_number=2) # in seconds net_read_timeout = Int32Field(field_number=3, default=0, oneof_id='net_read_timeout_present') # in seconds net_write_timeout = Int32Field(field_number=4, default=0, oneof_id='net_write_timeout_present') destination = StringField(field_number=5) client_id = StringField(field_number=6) filter = StringField(field_number=7) start_timestamp = Int64Field(field_number=8)
class Get(Message): """PullRequest""" destination = StringField(field_number=1) client_id = StringField(field_number=2) fetch_size = Int32Field(field_number=3) # 默认-1时代表不控制 timeout = Int64Field(field_number=4, default=-1, oneof_id='timeout_present') # 数字类型,0:纳秒,1:毫秒,2:微秒,3:秒,4:分钟,5:小时,6:天 unit = Int32Field(field_number=5, default=2, oneof_id='unit_present') # 是否自动ack auto_ack = BoolField(field_number=6, default=False, oneof_id='auto_ack_present')
class RowChange(Message): """message row 每行变更数据的数据结构""" # tableId,由数据库产生 tableId = Int64Field(field_number=1) # 数据变更类型 eventType = EnumField(field_number=2, default=EventType.UPDATE, enum_cls=EventType, oneof_id='eventType_present') # 标识是否是ddl语句 isDdl = BoolField(field_number=10, default=False, oneof_id='isDdl_present') # ddl/query的sql语句 sql = StringField(field_number=11) # 一次数据库变更可能存在多行 rowDatas = MessageField(field_number=12, repeated=True, message_cls=RowData) # 预留扩展 props = MessageField(field_number=13, repeated=True, message_cls=Pair) # ddl/query的schemaName,会存在跨库ddl,需要保留执行ddl的当前schemaName ddlSchemaName = StringField(field_number=14, optional=True)
class SignedExchangeResponse(Message): pass class ExchangeResponse(Message): pass ExchangeAddress.add_field('coin_type', StringField(field_number=1, optional=True)) ExchangeAddress.add_field('address', StringField(field_number=2, optional=True)) ExchangeAddress.add_field('dest_tag', StringField(field_number=3, optional=True)) ExchangeAddress.add_field('rs_address', StringField(field_number=4, optional=True)) ExchangeResponseV2.add_field('deposit_address', MessageField(field_number=1, optional=True, message_cls=ExchangeAddress)) ExchangeResponseV2.add_field('deposit_amount', BytesField(field_number=2, optional=True)) ExchangeResponseV2.add_field('expiration', Int64Field(field_number=3, optional=True)) ExchangeResponseV2.add_field('quoted_rate', BytesField(field_number=4, optional=True)) ExchangeResponseV2.add_field('withdrawal_address', MessageField(field_number=5, optional=True, message_cls=ExchangeAddress)) ExchangeResponseV2.add_field('withdrawal_amount', BytesField(field_number=6, optional=True)) ExchangeResponseV2.add_field('return_address', MessageField(field_number=7, optional=True, message_cls=ExchangeAddress)) ExchangeResponseV2.add_field('api_key', BytesField(field_number=8, optional=True)) ExchangeResponseV2.add_field('miner_fee', BytesField(field_number=9, optional=True)) ExchangeResponseV2.add_field('order_id', BytesField(field_number=10, optional=True)) SignedExchangeResponse.add_field('response', MessageField(field_number=1, optional=True, message_cls=ExchangeResponse)) SignedExchangeResponse.add_field('signature', BytesField(field_number=2, optional=True)) SignedExchangeResponse.add_field('responseV2', MessageField(field_number=3, optional=True, message_cls=ExchangeResponseV2)) ExchangeResponse.add_field('deposit_address', MessageField(field_number=1, optional=True, message_cls=ExchangeAddress)) ExchangeResponse.add_field('deposit_amount', UInt64Field(field_number=2, optional=True)) ExchangeResponse.add_field('expiration', Int64Field(field_number=3, optional=True)) ExchangeResponse.add_field('quoted_rate', UInt64Field(field_number=4, optional=True)) ExchangeResponse.add_field('withdrawal_address', MessageField(field_number=5, optional=True, message_cls=ExchangeAddress))
from protobuf3.message import Message from protobuf3.fields import Int32Field, StringField, Int64Field, BytesField class MintPayload(Message): pass class MQMessage(Message): pass MintPayload.add_field('partition', Int32Field(field_number=1, optional=True)) MintPayload.add_field('number', StringField(field_number=2, optional=True)) MintPayload.add_field('time', Int64Field(field_number=3, optional=True)) MQMessage.add_field('caller', StringField(field_number=1, optional=True)) MQMessage.add_field('matrix', StringField(field_number=2, optional=True)) MQMessage.add_field('device', StringField(field_number=3, optional=True)) MQMessage.add_field('resource', StringField(field_number=4, optional=True)) MQMessage.add_field('action', StringField(field_number=5, optional=True)) MQMessage.add_field('payload', BytesField(field_number=6, optional=True)) MQMessage.add_field('time', Int64Field(field_number=7, optional=True))
class ClientAck(Message): destination = StringField(field_number=1) client_id = StringField(field_number=2) batch_id = Int64Field(field_number=3)
class HeartBeat(Message): send_timestamp = Int64Field(field_number=1) start_timestamp = Int64Field(field_number=2)
class Messages(Message): batch_id = Int64Field(field_number=1) messages = BytesField(field_number=2, repeated=True)