package codec import ( "bytes" "github.com/dk-lockdown/seata-golang/meta" "github.com/dk-lockdown/seata-golang/protocal" "vimagination.zapto.org/byteio" ) func AbstractResultMessageDecoder(in []byte) (interface{},int) { var ( length16 uint16 = 0 readN = 0 totalReadN = 0 ) msg := protocal.AbstractResultMessage{} r := byteio.BigEndianReader{Reader:bytes.NewReader(in)} resultCode, _ := r.ReadByte() msg.ResultCode = protocal.ResultCode(resultCode) totalReadN += 1 if msg.ResultCode == protocal.ResultCodeFailed { length16, readN, _ = r.ReadUint16() totalReadN += readN if length16 > 0 { msg.Msg, readN, _ = r.ReadString(int(length16)) totalReadN += readN } } return msg,totalReadN } func MergedWarpMessageDecoder(in []byte) (interface{},int) { var ( size16 int16 = 0 readN = 0 totalReadN = 0 ) result := protocal.MergedWarpMessage{} r := byteio.BigEndianReader{Reader:bytes.NewReader(in)} r.ReadInt32() totalReadN += 4 size16,readN,_ = r.ReadInt16() totalReadN += readN result.Msgs = make([]protocal.MessageTypeAware,0) for index := 0; index < int(size16); index++ { typeCode,_,_ := r.ReadInt16() totalReadN += 2 decoder := getMessageDecoder(typeCode) if decoder != nil { msg,readN := decoder(in[totalReadN:]) totalReadN += readN result.Msgs = append(result.Msgs,msg.(protocal.MessageTypeAware)) } } return result,totalReadN } func MergeResultMessageDecoder(in []byte) (interface{},int) { var ( size16 int16 = 0 readN = 0 totalReadN = 0 ) result := protocal.MergeResultMessage{} r := byteio.BigEndianReader{Reader:bytes.NewReader(in)} r.ReadInt32() totalReadN += 4 size16,readN,_ = r.ReadInt16() totalReadN += readN result.Msgs = make([]protocal.MessageTypeAware,0) for index := 0; index < int(size16); index++ { typeCode,_,_ := r.ReadInt16() totalReadN += 2 decoder := getMessageDecoder(typeCode) if decoder != nil { msg,readN := decoder(in[totalReadN:]) totalReadN += readN result.Msgs = append(result.Msgs,msg.(protocal.MessageTypeAware)) } } return result,totalReadN } func AbstractIdentifyRequestDecoder(in []byte) (interface{},int) { var ( length16 uint16 = 0 readN = 0 totalReadN = 0 ) msg := protocal.AbstractIdentifyRequest{} r := byteio.BigEndianReader{Reader:bytes.NewReader(in)} length16, readN, _ = r.ReadUint16() totalReadN += readN if length16 > 0 { msg.Version, readN, _ = r.ReadString(int(length16)) totalReadN += readN } length16, readN, _ = r.ReadUint16() totalReadN += readN if length16 > 0 { msg.ApplicationId, readN, _ = r.ReadString(int(length16)) totalReadN += readN } length16, readN, _ = r.ReadUint16() totalReadN += readN if length16 > 0 { msg.TransactionServiceGroup, readN, _ = r.ReadString(int(length16)) totalReadN += readN } length16, readN, _ = r.ReadUint16() totalReadN += readN if length16 > 0 { msg.ExtraData = make([]byte,int(length16)) readN, _ := r.Read(msg.ExtraData) totalReadN += readN } return msg,totalReadN } func AbstractIdentifyResponseDecoder(in []byte) (interface{},int) { var ( length16 uint16 = 0 readN = 0 totalReadN = 0 ) msg := protocal.AbstractIdentifyResponse{} r := byteio.BigEndianReader{Reader:bytes.NewReader(in)} identified, _ := r.ReadByte() totalReadN += 1 if identified == byte(1){ msg.Identified = true } else if identified == byte(0) { msg.Identified = false } length16, readN, _ = r.ReadUint16() totalReadN += readN if length16 > 0 { msg.Version, readN, _ = r.ReadString(int(length16)) totalReadN += readN } return msg,totalReadN } func RegisterRMRequestDecoder(in []byte) (interface{},int) { var ( length32 uint32 = 0 length16 uint16 = 0 readN = 0 totalReadN = 0 ) msg := protocal.RegisterRMRequest{} r := byteio.BigEndianReader{Reader:bytes.NewReader(in)} length16, readN, _ = r.ReadUint16() totalReadN += readN if length16 > 0 { msg.Version, readN, _ = r.ReadString(int(length16)) totalReadN += readN } length16, readN, _ = r.ReadUint16() totalReadN += readN if length16 > 0 { msg.ApplicationId, readN, _ = r.ReadString(int(length16)) totalReadN += readN } length16, readN, _ = r.ReadUint16() totalReadN += readN if length16 > 0 { msg.TransactionServiceGroup, readN, _ = r.ReadString(int(length16)) totalReadN += readN } length16, readN, _ = r.ReadUint16() totalReadN += readN if length16 > 0 { msg.ExtraData = make([]byte,int(length16)) readN, _ := r.Read(msg.ExtraData) totalReadN += readN } length32, readN, _ = r.ReadUint32() totalReadN += readN if length32 > 0 { msg.ResourceIds, readN, _ = r.ReadString(int(length32)) totalReadN += readN } return msg,totalReadN } func RegisterRMResponseDecoder(in []byte) (interface{},int) { resp,totalReadN := AbstractIdentifyResponseDecoder(in) abstractIdentifyResponse := resp.(protocal.AbstractIdentifyResponse) msg := protocal.RegisterRMResponse{AbstractIdentifyResponse:abstractIdentifyResponse} return msg,totalReadN } func RegisterTMRequestDecoder(in []byte) (interface{},int) { req,totalReadN := AbstractIdentifyRequestDecoder(in) abstractIdentifyRequest := req.(protocal.AbstractIdentifyRequest) msg := protocal.RegisterTMRequest{AbstractIdentifyRequest:abstractIdentifyRequest} return msg,totalReadN } func RegisterTMResponseDecoder(in []byte) (interface{},int) { resp,totalReadN := AbstractIdentifyResponseDecoder(in) abstractIdentifyResponse := resp.(protocal.AbstractIdentifyResponse) msg := protocal.RegisterRMResponse{AbstractIdentifyResponse:abstractIdentifyResponse} return msg,totalReadN } func AbstractTransactionResponseDecoder(in []byte) (interface{},int) { var ( length16 uint16 = 0 readN = 0 totalReadN = 0 ) msg := protocal.AbstractTransactionResponse{} r := byteio.BigEndianReader{Reader:bytes.NewReader(in)} resultCode, _ := r.ReadByte() totalReadN += 1 msg.ResultCode = protocal.ResultCode(resultCode) if msg.ResultCode == protocal.ResultCodeFailed { length16, readN, _ = r.ReadUint16() totalReadN += readN if length16 > 0 { msg.Msg, readN, _ = r.ReadString(int(length16)) totalReadN += readN } } exceptionCode, _ := r.ReadByte() totalReadN += 1 msg.TransactionExceptionCode = meta.TransactionExceptionCode(exceptionCode) return msg,totalReadN } func AbstractBranchEndRequestDecoder(in []byte) (interface{},int) { var ( length16 uint16 = 0 readN = 0 totalReadN = 0 ) msg := protocal.AbstractBranchEndRequest{} r := byteio.BigEndianReader{Reader:bytes.NewReader(in)} length16, readN, _ = r.ReadUint16() totalReadN += readN if length16 > 0 { msg.Xid, readN, _ = r.ReadString(int(length16)) totalReadN += readN } msg.BranchId, _, _ = r.ReadInt64() totalReadN += 8 branchType, _ := r.ReadByte() totalReadN += 1 msg.BranchType = meta.BranchType(branchType) length16, readN, _ = r.ReadUint16() totalReadN += readN if length16 > 0 { msg.ResourceId, readN, _ = r.ReadString(int(length16)) totalReadN += readN } length16, readN, _ = r.ReadUint16() totalReadN += readN if length16 > 0 { msg.ApplicationData = make([]byte,int(length16)) readN,_ := r.Read(msg.ApplicationData) totalReadN += readN } return msg,totalReadN } func AbstractBranchEndResponseDecoder(in []byte) (interface{},int) { var ( length16 uint16 = 0 readN = 0 totalReadN = 0 ) msg := protocal.AbstractBranchEndResponse{} r := byteio.BigEndianReader{Reader:bytes.NewReader(in)} resultCode, _ := r.ReadByte() totalReadN += 1 msg.ResultCode = protocal.ResultCode(resultCode) if msg.ResultCode == protocal.ResultCodeFailed { length16, readN, _ = r.ReadUint16() totalReadN += readN if length16 > 0 { msg.Msg, readN, _ = r.ReadString(int(length16)) totalReadN += readN } } exceptionCode, _ := r.ReadByte() totalReadN += 1 msg.TransactionExceptionCode = meta.TransactionExceptionCode(exceptionCode) length16, readN, _ = r.ReadUint16() totalReadN += readN if length16 > 0 { msg.Xid, readN, _ = r.ReadString(int(length16)) totalReadN += readN } msg.BranchId, _, _ = r.ReadInt64() totalReadN += 8 branchStatus,_ := r.ReadByte() totalReadN += 1 msg.BranchStatus = meta.BranchStatus(branchStatus) return msg,totalReadN } func AbstractGlobalEndRequestDecoder(in []byte) (interface{},int) { var ( length16 uint16 = 0 readN = 0 totalReadN = 0 ) msg := protocal.AbstractGlobalEndRequest{} r := byteio.BigEndianReader{Reader:bytes.NewReader(in)} length16, readN, _ = r.ReadUint16() totalReadN += readN if length16 > 0 { msg.Xid, readN, _ = r.ReadString(int(length16)) totalReadN += readN } length16, readN, _ = r.ReadUint16() totalReadN += readN if length16 > 0 { msg.ExtraData = make([]byte,int(length16)) readN,_ := r.Read(msg.ExtraData) totalReadN += readN } return msg,totalReadN } func AbstractGlobalEndResponseDecoder(in []byte) (interface{},int) { var ( length16 uint16 = 0 readN = 0 totalReadN = 0 ) msg := protocal.AbstractGlobalEndResponse{} r := byteio.BigEndianReader{Reader:bytes.NewReader(in)} resultCode, _ := r.ReadByte() totalReadN += 1 msg.ResultCode = protocal.ResultCode(resultCode) if msg.ResultCode == protocal.ResultCodeFailed { length16, readN, _ = r.ReadUint16() totalReadN += readN if length16 > 0 { msg.Msg, readN, _ = r.ReadString(int(length16)) totalReadN += readN } } exceptionCode, _ := r.ReadByte() totalReadN += 1 msg.TransactionExceptionCode = meta.TransactionExceptionCode(exceptionCode) globalStatus,_ := r.ReadByte() totalReadN += 1 msg.GlobalStatus = meta.GlobalStatus(globalStatus) return msg,totalReadN } func BranchCommitRequestDecoder(in []byte) (interface{},int) { req,totalReadN := AbstractBranchEndRequestDecoder(in) abstractBranchEndRequest := req.(protocal.AbstractBranchEndRequest) msg := protocal.BranchCommitRequest{AbstractBranchEndRequest:abstractBranchEndRequest} return msg,totalReadN } func BranchCommitResponseDecoder(in []byte) (interface{},int) { resp,totalReadN := AbstractBranchEndResponseDecoder(in) abstractBranchEndResponse := resp.(protocal.AbstractBranchEndResponse) msg := protocal.BranchCommitResponse{AbstractBranchEndResponse:abstractBranchEndResponse} return msg,totalReadN } func BranchRegisterRequestDecoder(in []byte) (interface{},int) { var ( length32 uint32 = 0 length16 uint16 = 0 readN = 0 totalReadN = 0 ) msg := protocal.BranchRegisterRequest{} r := byteio.BigEndianReader{Reader:bytes.NewReader(in)} length16, readN, _ = r.ReadUint16() totalReadN += readN if length16 > 0 { msg.Xid, readN, _ = r.ReadString(int(length16)) totalReadN += readN } branchType, _ := r.ReadByte() totalReadN += 1 msg.BranchType = meta.BranchType(branchType) length16, readN, _ = r.ReadUint16() totalReadN += readN if length16 > 0 { msg.ResourceId, readN, _ = r.ReadString(int(length16)) totalReadN += readN } length32, readN, _ = r.ReadUint32() totalReadN += readN if length32 > 0 { msg.LockKey, readN, _ = r.ReadString(int(length32)) totalReadN += readN } length32, readN, _ = r.ReadUint32() totalReadN += readN if length32 > 0 { msg.ApplicationData = make([]byte,int(length32)) readN,_ := r.Read(msg.ApplicationData) totalReadN += readN } return msg,totalReadN } func BranchRegisterResponseDecoder(in []byte) (interface{},int) { var ( length16 uint16 = 0 readN = 0 totalReadN = 0 ) msg := protocal.BranchRegisterResponse{} r := byteio.BigEndianReader{Reader:bytes.NewReader(in)} resultCode, _ := r.ReadByte() totalReadN += 1 msg.ResultCode = protocal.ResultCode(resultCode) if msg.ResultCode == protocal.ResultCodeFailed { length16, readN, _ = r.ReadUint16() totalReadN += readN if length16 > 0 { msg.Msg, readN, _ = r.ReadString(int(length16)) totalReadN += readN } } exceptionCode, _ := r.ReadByte() totalReadN += 1 msg.TransactionExceptionCode = meta.TransactionExceptionCode(exceptionCode) msg.BranchId, readN, _ = r.ReadInt64() totalReadN += readN return msg,totalReadN } func BranchReportRequestDecoder(in []byte) (interface{},int) { var ( length16 uint16 = 0 readN = 0 totalReadN = 0 ) msg := protocal.BranchReportRequest{} r := byteio.BigEndianReader{Reader:bytes.NewReader(in)} length16, readN, _ = r.ReadUint16() totalReadN += readN if length16 > 0 { msg.Xid, readN, _ = r.ReadString(int(length16)) totalReadN += readN } msg.BranchId, _, _ = r.ReadInt64() branchStatus, _ := r.ReadByte() msg.Status = meta.BranchStatus(branchStatus) length16, readN, _ = r.ReadUint16() totalReadN += readN if length16 > 0 { msg.ResourceId, readN, _ = r.ReadString(int(length16)) totalReadN += readN } length16, readN, _ = r.ReadUint16() totalReadN += readN if length16 > 0 { msg.ApplicationData = make([]byte,int(length16)) readN,_ := r.Read(msg.ApplicationData) totalReadN += readN } branchType, _ := r.ReadByte() totalReadN += 1 msg.BranchType = meta.BranchType(branchType) return msg,totalReadN } func BranchReportResponseDecoder(in []byte) (interface{},int) { resp,totalReadN := AbstractTransactionResponseDecoder(in) abstractTransactionResponse := resp.(protocal.AbstractTransactionResponse) msg := protocal.BranchReportResponse{AbstractTransactionResponse: abstractTransactionResponse} return msg,totalReadN } func BranchRollbackRequestDecoder(in []byte) (interface{},int) { req,totalReadN := AbstractBranchEndRequestDecoder(in) abstractBranchEndRequest := req.(protocal.AbstractBranchEndRequest) msg := protocal.BranchRollbackRequest{AbstractBranchEndRequest:abstractBranchEndRequest} return msg,totalReadN } func BranchRollbackResponseDecoder(in []byte) (interface{},int) { resp,totalReadN := AbstractBranchEndResponseDecoder(in) abstractBranchEndResponse := resp.(protocal.AbstractBranchEndResponse) msg := protocal.BranchRollbackResponse{AbstractBranchEndResponse:abstractBranchEndResponse} return msg,totalReadN } func GlobalBeginRequestDecoder(in []byte) (interface{},int) { var ( length16 uint16 = 0 readN = 0 totalReadN = 0 ) msg := protocal.GlobalBeginRequest{} r := byteio.BigEndianReader{Reader:bytes.NewReader(in)} timeout, readN, _ := r.ReadInt32() totalReadN += readN msg.Timeout = timeout length16, readN, _ = r.ReadUint16() totalReadN += readN if length16 > 0 { msg.TransactionName, readN, _ = r.ReadString(int(length16)) totalReadN += readN } return msg,totalReadN } func GlobalBeginResponseDecoder(in []byte) (interface{},int) { var ( length16 uint16 = 0 readN = 0 totalReadN = 0 ) msg := protocal.GlobalBeginResponse{} r := byteio.BigEndianReader{Reader:bytes.NewReader(in)} resultCode, _ := r.ReadByte() totalReadN += 1 msg.ResultCode = protocal.ResultCode(resultCode) if msg.ResultCode == protocal.ResultCodeFailed { length16, readN, _ = r.ReadUint16() totalReadN += readN if length16 > 0 { msg.Msg, readN, _ = r.ReadString(int(length16)) totalReadN += readN } } exceptionCode, _ := r.ReadByte() totalReadN += 1 msg.TransactionExceptionCode = meta.TransactionExceptionCode(exceptionCode) length16, readN, _ = r.ReadUint16() totalReadN += readN if length16 > 0 { msg.Xid, readN, _ = r.ReadString(int(length16)) totalReadN += readN } length16, readN, _ = r.ReadUint16() totalReadN += readN if length16 > 0 { msg.ExtraData = make([]byte,int(length16)) readN,_ := r.Read(msg.ExtraData) totalReadN += readN } return msg,totalReadN } func GlobalCommitRequestDecoder(in []byte) (interface{},int) { req,totalReadN := AbstractGlobalEndRequestDecoder(in) abstractGlobalEndRequest := req.(protocal.AbstractGlobalEndRequest) msg := protocal.GlobalCommitRequest{AbstractGlobalEndRequest:abstractGlobalEndRequest} return msg,totalReadN } func GlobalCommitResponseDecoder(in []byte) (interface{},int) { resp,totalReadN := AbstractGlobalEndResponseDecoder(in) abstractGlobalEndResponse := resp.(protocal.AbstractGlobalEndResponse) msg := protocal.GlobalCommitResponse{AbstractGlobalEndResponse:abstractGlobalEndResponse} return msg,totalReadN } func GlobalLockQueryRequestDecoder(in []byte) (interface{},int) { req,totalReadN := BranchRegisterRequestDecoder(in) branchRegisterRequest := req.(protocal.BranchRegisterRequest) msg := protocal.GlobalLockQueryRequest{BranchRegisterRequest:branchRegisterRequest} return msg,totalReadN } func GlobalLockQueryResponseDecoder(in []byte) (interface{},int) { var ( length16 uint16 = 0 readN = 0 totalReadN = 0 ) msg := protocal.GlobalLockQueryResponse{} r := byteio.BigEndianReader{Reader:bytes.NewReader(in)} resultCode, _ := r.ReadByte() totalReadN += 1 msg.ResultCode = protocal.ResultCode(resultCode) if msg.ResultCode == protocal.ResultCodeFailed { length16, readN, _ = r.ReadUint16() totalReadN += readN if length16 > 0 { msg.Msg, readN, _ = r.ReadString(int(length16)) totalReadN += readN } } exceptionCode, _ := r.ReadByte() totalReadN += 1 msg.TransactionExceptionCode = meta.TransactionExceptionCode(exceptionCode) lockable, readN, _ := r.ReadUint16() totalReadN += readN if lockable == uint16(1) { msg.Lockable = true } else if lockable == uint16(0) { msg.Lockable = false } return msg,totalReadN } func GlobalReportRequestDecoder(in []byte) (interface{},int) { var ( length16 uint16 = 0 readN = 0 totalReadN = 0 ) msg := protocal.GlobalReportRequest{} r := byteio.BigEndianReader{Reader:bytes.NewReader(in)} length16, readN, _ = r.ReadUint16() totalReadN += readN if length16 > 0 { msg.Xid, readN, _ = r.ReadString(int(length16)) totalReadN += readN } length16, readN, _ = r.ReadUint16() totalReadN += readN if length16 > 0 { msg.ExtraData = make([]byte,int(length16)) readN, _ := r.Read(msg.ExtraData) totalReadN += readN } globalStatus,_ := r.ReadByte() totalReadN += 1 msg.GlobalStatus = meta.GlobalStatus(globalStatus) return msg,totalReadN } func GlobalReportResponseDecoder(in []byte) (interface{},int) { resp,totalReadN := AbstractGlobalEndResponseDecoder(in) abstractGlobalEndResponse := resp.(protocal.AbstractGlobalEndResponse) msg := protocal.GlobalReportResponse{AbstractGlobalEndResponse:abstractGlobalEndResponse} return msg,totalReadN } func GlobalRollbackRequestDecoder(in []byte) (interface{},int) { req,totalReadN := AbstractGlobalEndRequestDecoder(in) abstractGlobalEndRequest := req.(protocal.AbstractGlobalEndRequest) msg := protocal.GlobalRollbackRequest{AbstractGlobalEndRequest:abstractGlobalEndRequest} return msg,totalReadN } func GlobalRollbackResponseDecoder(in []byte) (interface{},int) { resp,totalReadN := AbstractGlobalEndResponseDecoder(in) abstractGlobalEndResponse := resp.(protocal.AbstractGlobalEndResponse) msg := protocal.GlobalRollbackResponse{AbstractGlobalEndResponse:abstractGlobalEndResponse} return msg,totalReadN } func GlobalStatusRequestDecoder(in []byte) (interface{},int) { req,totalReadN := AbstractGlobalEndRequestDecoder(in) abstractGlobalEndRequest := req.(protocal.AbstractGlobalEndRequest) msg := protocal.GlobalStatusRequest{AbstractGlobalEndRequest:abstractGlobalEndRequest} return msg,totalReadN } func GlobalStatusResponseDecoder(in []byte) (interface{},int) { resp,totalReadN := AbstractGlobalEndResponseDecoder(in) abstractGlobalEndResponse := resp.(protocal.AbstractGlobalEndResponse) msg := protocal.GlobalStatusResponse{AbstractGlobalEndResponse:abstractGlobalEndResponse} return msg,totalReadN } func UndoLogDeleteRequestDecoder(in []byte) (interface{},int) { var ( length16 uint16 = 0 readN = 0 totalReadN = 0 ) msg := protocal.UndoLogDeleteRequest{} r := byteio.BigEndianReader{Reader:bytes.NewReader(in)} branchType, _ := r.ReadByte() totalReadN += 1 msg.BranchType = meta.BranchType(branchType) length16, readN, _ = r.ReadUint16() totalReadN += readN if length16 > 0 { msg.ResourceId, readN, _ = r.ReadString(int(length16)) totalReadN += readN } msg.SaveDays, readN, _ = r.ReadInt16() totalReadN += readN return msg,totalReadN }