bitxhub/api/grpc/sign.go

41 lines
827 B
Go
Raw Normal View History

2020-07-24 20:19:32 +08:00
package grpc
import (
"context"
"sync"
"github.com/meshplus/bitxhub-model/pb"
"github.com/sirupsen/logrus"
2020-07-24 20:19:32 +08:00
)
func (cbs *ChainBrokerService) GetMultiSigns(ctx context.Context, req *pb.GetMultiSignsRequest) (*pb.SignResponse, error) {
2020-07-24 20:19:32 +08:00
var (
wg = sync.WaitGroup{}
result = make(map[string][]byte)
)
wg.Add(1)
go func(result map[string][]byte) {
for k, v := range cbs.api.Broker().FetchSignsFromOtherPeers(req.Content, req.Type) {
result[k] = v
}
2020-07-24 20:19:32 +08:00
wg.Done()
}(result)
address, sign, err := cbs.api.Broker().GetSign(req.Content, req.Type)
2020-07-24 20:19:32 +08:00
wg.Wait()
if err != nil {
cbs.logger.WithFields(logrus.Fields{
"id": req.Content,
"err": err.Error(),
}).Errorf("Get sign on current node")
return nil, err
} else {
result[address] = sign
2020-07-24 20:19:32 +08:00
}
return &pb.SignResponse{
Sign: result,
}, nil
2020-07-24 20:19:32 +08:00
}