This repository has been archived by the owner on Apr 5, 2023. It is now read-only.
/
provider.go
48 lines (41 loc) · 1.65 KB
/
provider.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/*
Copyright SecureKey Technologies Inc. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/
package dispatcher
import (
storeapi "github.com/hyperledger/fabric/extensions/collections/api/store"
collcommon "github.com/trustbloc/fabric-peer-ext/pkg/collections/common"
"github.com/trustbloc/fabric-peer-ext/pkg/common/discovery"
"github.com/trustbloc/fabric-peer-ext/pkg/common/requestmgr"
)
// Provider is a gossip dispatcher provider
type Provider struct {
gossipProvider collcommon.GossipProvider
ccProvider collcommon.CollectionConfigProvider
handlerProvider appDataHandlerProvider
}
// NewProvider returns a new gossip message dispatcher provider
func NewProvider() *Provider {
return &Provider{}
}
// Initialize is called at startup by the resource manager
func (p *Provider) Initialize(gossipProvider collcommon.GossipProvider, ccProvider collcommon.CollectionConfigProvider, handlerProvider appDataHandlerProvider) *Provider {
logger.Infof("Initializing gossip dispatcher provider")
p.gossipProvider = gossipProvider
p.ccProvider = ccProvider
p.handlerProvider = handlerProvider
return p
}
// ForChannel returns a new dispatcher for the given channel
func (p *Provider) ForChannel(channelID string, dataStore storeapi.Store) *Dispatcher {
logger.Infof("Returning a new gossip dispatcher for channel [%s]", channelID)
return &Dispatcher{
appDataHandlerProvider: p.handlerProvider,
ccProvider: p.ccProvider,
channelID: channelID,
reqMgr: requestmgr.Get(channelID),
dataStore: dataStore,
discovery: discovery.New(channelID, p.gossipProvider.GetGossipService()),
}
}