package remoting import ( "sync" ) import ( "github.com/seata/seata-go/pkg/common/log" "github.com/seata/seata-go/pkg/protocol/branch" "github.com/seata/seata-go/pkg/protocol/message" "github.com/seata/seata-go/pkg/protocol/resource" "github.com/seata/seata-go/pkg/remoting/getty" ) var ( rmRemoting *RMRemoting onceGettyRemoting = &sync.Once{} ) func GetRMRemotingInstance() *RMRemoting { if rmRemoting == nil { onceGettyRemoting.Do(func() { rmRemoting = &RMRemoting{} }) } return rmRemoting } // TODO type RMRemoting struct { } // Branch register long func (RMRemoting) BranchRegister(branchType branch.BranchType, resourceId, clientId, xid, applicationData, lockKeys string) (int64, error) { return 0, nil } // Branch report func (RMRemoting) BranchReport(branchType branch.BranchType, xid string, branchId int64, status branch.BranchStatus, applicationData string) error { return nil } // Lock query boolean func (RMRemoting) LockQuery(branchType branch.BranchType, resourceId, xid, lockKeys string) (bool, error) { return false, nil } func (r *RMRemoting) RegisterResource(resource resource.Resource) error { req := message.RegisterRMRequest{ AbstractIdentifyRequest: message.AbstractIdentifyRequest{ //todo replace with config Version: "1.4.2", ApplicationId: "tcc-sample", TransactionServiceGroup: "my_test_tx_group", }, ResourceIds: resource.GetResourceId(), } res, err := getty.GetGettyRemotingClient().SendSyncRequest(req) if err != nil { log.Errorf("RegisterResourceManager error: {%#v}", err.Error()) return err } if isRegisterSuccess(res) { r.onRegisterRMSuccess(res.(message.RegisterRMResponse)) } else { r.onRegisterRMFailure(res.(message.RegisterRMResponse)) } return nil } func isRegisterSuccess(response interface{}) bool { //if res, ok := response.(protocol.RegisterTMResponse); ok { // return res.Identified //} else if res, ok := response.(protocol.RegisterRMResponse); ok { // return res.Identified //} //return false if res, ok := response.(message.RegisterRMResponse); ok { return res.Identified } return false } func (r *RMRemoting) onRegisterRMSuccess(response message.RegisterRMResponse) { // TODO log.Infof("register RM success. response: %#v", response) } func (r *RMRemoting) onRegisterRMFailure(response message.RegisterRMResponse) { // TODO log.Infof("register RM failure. response: %#v", response) } func (r *RMRemoting) onRegisterTMSuccess(response message.RegisterTMResponse) { // TODO log.Infof("register TM success. response: %#v", response) } func (r *RMRemoting) onRegisterTMFailure(response message.RegisterTMResponse) { // TODO log.Infof("register TM failure. response: %#v", response) }