69 lines
1.5 KiB
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
|
|
}
|