63 lines
1.2 KiB
Go
63 lines
1.2 KiB
Go
/*
|
|
Copyright IBM Corp. 2016 All Rights Reserved.
|
|
|
|
SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
package common
|
|
|
|
import (
|
|
cb "github.com/hyperledger/fabric-protos-go/common"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
type BroadcastClient interface {
|
|
// Send data to orderer
|
|
Send(env *cb.Envelope) error
|
|
Close() error
|
|
}
|
|
|
|
type BroadcastGRPCClient struct {
|
|
Client BroadcastOrdererClient
|
|
}
|
|
|
|
// GetBroadcastClient creates a simple instance of the BroadcastClient interface
|
|
func GetBroadcastClient() (BroadcastClient, error) {
|
|
oc, err := NewOrdererClientFromEnv()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
bc, err := oc.Broadcast()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &BroadcastGRPCClient{Client: bc}, nil
|
|
}
|
|
|
|
func (s *BroadcastGRPCClient) getAck() error {
|
|
msg, err := s.Client.Recv()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if msg.Status != cb.Status_SUCCESS {
|
|
return errors.Errorf("got unexpected status: %v -- %s", msg.Status, msg.Info)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Send data to orderer
|
|
func (s *BroadcastGRPCClient) Send(env *cb.Envelope) error {
|
|
if err := s.Client.Send(env); err != nil {
|
|
return errors.WithMessage(err, "could not send to orderer node")
|
|
}
|
|
|
|
err := s.getAck()
|
|
|
|
return err
|
|
}
|
|
|
|
func (s *BroadcastGRPCClient) Close() error {
|
|
return s.Client.CloseSend()
|
|
}
|