sample_chain/order/connect.go

69 lines
1.5 KiB
Go

package order
import (
"flag"
"schain/config"
"schain/order/token"
pb "schain/proto"
"github.com/pkg/errors"
)
var orderAddress = flag.String("order.address", config.OrderAddress, "order address")
type OrderChaincodeStream interface {
Send(*pb.ChaincodeMessage) error
Recv() (*pb.ChaincodeMessage, error)
}
// OrderStream supports the (original) chaincode-as-client interaction pattern
// 链码作为一个客户端与其他组件(如 orderer 或其他链码)进行交互。
// 这种模式下的链码可以向 orderer 发送交易请求、查询区块链状态等。
type OrderStream interface {
OrderChaincodeStream
CloseSend() error
}
// 获取一个用于与某个 orderer 进行通信的流对象,以便在链码中执行操作时使用
// client 与 order 的连接
func userChaincodeStreamGetter() (OrderStream, error) {
if *orderAddress == "" {
return nil, errors.New("flag 'order.address' must be set")
}
/*conf, err := internal.LoadConfig()
if err != nil {
return nil, err
}
conn, err := internal.NewClientConn(*orderAddress, conf)
if err != nil {
return nil, err
}*/
conn, err := token.NewClient(*orderAddress)
if err != nil {
return nil, err
}
return token.NewRegisterClient(conn)
}
type peerStreamGetter func() (OrderStream, error)
var streamGetter peerStreamGetter
func GetOrderStream() (OrderStream, error) {
if streamGetter == nil {
streamGetter = userChaincodeStreamGetter
}
stream, err := streamGetter()
if err != nil {
return nil, err
}
return stream, nil
}