forked from TrueCloudLab/frostfs-node
[#1546] morph/event: Export NotificationHandlerInfo fields
Hiding them achieves nothing, as the struct has no methods and is not used concurrently. Signed-off-by: Evgenii Stratonikov <e.stratonikov@yadro.com>
This commit is contained in:
parent
d0ce835fbf
commit
b1614a284d
8 changed files with 75 additions and 110 deletions
|
@ -223,21 +223,17 @@ func registerNotificationHandlers(scHash util.Uint160, lis event.Listener, parse
|
||||||
subs map[event.Type][]event.Handler,
|
subs map[event.Type][]event.Handler,
|
||||||
) {
|
) {
|
||||||
for typ, handlers := range subs {
|
for typ, handlers := range subs {
|
||||||
hi := event.NotificationHandlerInfo{}
|
|
||||||
hi.SetType(typ)
|
|
||||||
hi.SetScriptHash(scHash)
|
|
||||||
|
|
||||||
p, ok := parsers[typ]
|
p, ok := parsers[typ]
|
||||||
if !ok {
|
if !ok {
|
||||||
panic(fmt.Sprintf("missing parser for event %s", typ))
|
panic(fmt.Sprintf("missing parser for event %s", typ))
|
||||||
}
|
}
|
||||||
|
|
||||||
hi.SetParser(p)
|
lis.RegisterNotificationHandler(event.NotificationHandlerInfo{
|
||||||
|
Contract: scHash,
|
||||||
for _, h := range handlers {
|
Type: typ,
|
||||||
hi.AddHandler(h)
|
Parser: p,
|
||||||
}
|
Handlers: handlers,
|
||||||
lis.RegisterNotificationHandler(hi)
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -90,17 +90,14 @@ func New(p *Params) (*Processor, error) {
|
||||||
|
|
||||||
// ListenerNotificationHandlers for the 'event.Listener' event producer.
|
// ListenerNotificationHandlers for the 'event.Listener' event producer.
|
||||||
func (bp *Processor) ListenerNotificationHandlers() []event.NotificationHandlerInfo {
|
func (bp *Processor) ListenerNotificationHandlers() []event.NotificationHandlerInfo {
|
||||||
var handlers []event.NotificationHandlerInfo
|
return []event.NotificationHandlerInfo{
|
||||||
|
{
|
||||||
// lock handler
|
Contract: bp.balanceSC,
|
||||||
lock := event.NotificationHandlerInfo{}
|
Type: lockNotification,
|
||||||
lock.SetType(lockNotification)
|
Parser: balanceEvent.ParseLock,
|
||||||
lock.SetScriptHash(bp.balanceSC)
|
Handlers: []event.Handler{bp.handleLock},
|
||||||
lock.SetParser(balanceEvent.ParseLock)
|
},
|
||||||
lock.AddHandler(bp.handleLock)
|
}
|
||||||
handlers = append(handlers, lock)
|
|
||||||
|
|
||||||
return handlers
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListenerNotaryParsers for the 'event.Listener' event producer.
|
// ListenerNotaryParsers for the 'event.Listener' event producer.
|
||||||
|
|
|
@ -144,39 +144,32 @@ func New(p *Params) (*Processor, error) {
|
||||||
|
|
||||||
// ListenerNotificationHandlers for the 'event.Listener' event producer.
|
// ListenerNotificationHandlers for the 'event.Listener' event producer.
|
||||||
func (np *Processor) ListenerNotificationHandlers() []event.NotificationHandlerInfo {
|
func (np *Processor) ListenerNotificationHandlers() []event.NotificationHandlerInfo {
|
||||||
var (
|
return []event.NotificationHandlerInfo{
|
||||||
handlers = make([]event.NotificationHandlerInfo, 0, 6)
|
{
|
||||||
|
Contract: np.frostfsContract,
|
||||||
h event.NotificationHandlerInfo
|
Type: event.TypeFromString(depositNotification),
|
||||||
)
|
Parser: frostfsEvent.ParseDeposit,
|
||||||
|
Handlers: []event.Handler{np.handleDeposit},
|
||||||
h.SetScriptHash(np.frostfsContract)
|
},
|
||||||
|
{
|
||||||
// deposit handler
|
Contract: np.frostfsContract,
|
||||||
h.SetType(event.TypeFromString(depositNotification))
|
Type: event.TypeFromString(withdrawNotification),
|
||||||
h.SetParser(frostfsEvent.ParseDeposit)
|
Parser: frostfsEvent.ParseWithdraw,
|
||||||
h.AddHandler(np.handleDeposit)
|
Handlers: []event.Handler{np.handleWithdraw},
|
||||||
handlers = append(handlers, h)
|
},
|
||||||
|
{
|
||||||
// withdraw handler
|
Contract: np.frostfsContract,
|
||||||
h.SetType(event.TypeFromString(withdrawNotification))
|
Type: event.TypeFromString(chequeNotification),
|
||||||
h.SetParser(frostfsEvent.ParseWithdraw)
|
Parser: frostfsEvent.ParseCheque,
|
||||||
h.AddHandler(np.handleWithdraw)
|
Handlers: []event.Handler{np.handleCheque},
|
||||||
handlers = append(handlers, h)
|
},
|
||||||
|
{
|
||||||
// cheque handler
|
Contract: np.frostfsContract,
|
||||||
h.SetType(event.TypeFromString(chequeNotification))
|
Type: event.TypeFromString(configNotification),
|
||||||
h.SetParser(frostfsEvent.ParseCheque)
|
Parser: frostfsEvent.ParseConfig,
|
||||||
h.AddHandler(np.handleCheque)
|
Handlers: []event.Handler{np.handleConfig},
|
||||||
handlers = append(handlers, h)
|
},
|
||||||
|
}
|
||||||
// config handler
|
|
||||||
h.SetType(event.TypeFromString(configNotification))
|
|
||||||
h.SetParser(frostfsEvent.ParseConfig)
|
|
||||||
h.AddHandler(np.handleConfig)
|
|
||||||
handlers = append(handlers, h)
|
|
||||||
|
|
||||||
return handlers
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListenerNotaryParsers for the 'event.Listener' event producer.
|
// ListenerNotaryParsers for the 'event.Listener' event producer.
|
||||||
|
|
|
@ -157,12 +157,14 @@ func New(p *Params) (*Processor, error) {
|
||||||
|
|
||||||
// ListenerNotificationHandlers for the 'event.Listener' event producer.
|
// ListenerNotificationHandlers for the 'event.Listener' event producer.
|
||||||
func (gp *Processor) ListenerNotificationHandlers() []event.NotificationHandlerInfo {
|
func (gp *Processor) ListenerNotificationHandlers() []event.NotificationHandlerInfo {
|
||||||
var hi event.NotificationHandlerInfo
|
return []event.NotificationHandlerInfo{
|
||||||
hi.SetScriptHash(gp.designate)
|
{
|
||||||
hi.SetType(event.TypeFromString(native.DesignationEventName))
|
Contract: gp.designate,
|
||||||
hi.SetParser(rolemanagement.ParseDesignate)
|
Type: event.TypeFromString(native.DesignationEventName),
|
||||||
hi.AddHandler(gp.HandleAlphabetSync)
|
Parser: rolemanagement.ParseDesignate,
|
||||||
return []event.NotificationHandlerInfo{hi}
|
Handlers: []event.Handler{gp.HandleAlphabetSync},
|
||||||
|
},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListenerNotaryParsers for the 'event.Listener' event producer.
|
// ListenerNotaryParsers for the 'event.Listener' event producer.
|
||||||
|
|
|
@ -163,19 +163,14 @@ func New(p *Params) (*Processor, error) {
|
||||||
|
|
||||||
// ListenerNotificationHandlers for the 'event.Listener' event producer.
|
// ListenerNotificationHandlers for the 'event.Listener' event producer.
|
||||||
func (np *Processor) ListenerNotificationHandlers() []event.NotificationHandlerInfo {
|
func (np *Processor) ListenerNotificationHandlers() []event.NotificationHandlerInfo {
|
||||||
handlers := make([]event.NotificationHandlerInfo, 0, 3)
|
return []event.NotificationHandlerInfo{
|
||||||
|
{
|
||||||
var i event.NotificationHandlerInfo
|
Contract: np.netmapClient.ContractAddress(),
|
||||||
|
Type: newEpochNotification,
|
||||||
i.SetScriptHash(np.netmapClient.ContractAddress())
|
Parser: netmapEvent.ParseNewEpoch,
|
||||||
|
Handlers: []event.Handler{np.handleNewEpoch},
|
||||||
// new epoch handler
|
},
|
||||||
i.SetType(newEpochNotification)
|
}
|
||||||
i.SetParser(netmapEvent.ParseNewEpoch)
|
|
||||||
i.AddHandler(np.handleNewEpoch)
|
|
||||||
handlers = append(handlers, i)
|
|
||||||
|
|
||||||
return handlers
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListenerNotaryParsers for the 'event.Listener' event producer.
|
// ListenerNotaryParsers for the 'event.Listener' event producer.
|
||||||
|
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"github.com/nspcc-dev/neo-go/pkg/core/block"
|
"github.com/nspcc-dev/neo-go/pkg/core/block"
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Handler is an Event processing function.
|
// Handler is an Event processing function.
|
||||||
|
@ -16,25 +17,10 @@ type BlockHandler func(context.Context, *block.Block)
|
||||||
// the parameters of the handler of particular
|
// the parameters of the handler of particular
|
||||||
// contract event.
|
// contract event.
|
||||||
type NotificationHandlerInfo struct {
|
type NotificationHandlerInfo struct {
|
||||||
scriptHashWithType
|
Contract util.Uint160
|
||||||
|
Type Type
|
||||||
parser NotificationParser
|
Parser NotificationParser
|
||||||
handlers []Handler
|
Handlers []Handler
|
||||||
}
|
|
||||||
|
|
||||||
// SetParser is an event handler setter.
|
|
||||||
func (s *NotificationHandlerInfo) SetParser(p NotificationParser) {
|
|
||||||
s.parser = p
|
|
||||||
}
|
|
||||||
|
|
||||||
// AddHandler adds an event handler.
|
|
||||||
func (s *NotificationHandlerInfo) AddHandler(v Handler) {
|
|
||||||
s.handlers = append(s.handlers, v)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Handler returns an event handler.
|
|
||||||
func (s NotificationHandlerInfo) Handlers() []Handler {
|
|
||||||
return s.handlers
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// NotaryHandlerInfo is a structure that groups
|
// NotaryHandlerInfo is a structure that groups
|
||||||
|
|
|
@ -443,18 +443,22 @@ func (l *listener) parseAndHandleNotary(ctx context.Context, nr *result.NotaryRe
|
||||||
// Ignores handlers of event without parser.
|
// Ignores handlers of event without parser.
|
||||||
func (l *listener) RegisterNotificationHandler(hi NotificationHandlerInfo) {
|
func (l *listener) RegisterNotificationHandler(hi NotificationHandlerInfo) {
|
||||||
log := l.log.With(
|
log := l.log.With(
|
||||||
zap.String("contract", hi.ScriptHash().StringLE()),
|
zap.String("contract", hi.Contract.StringLE()),
|
||||||
zap.Stringer("event_type", hi.GetType()),
|
zap.Stringer("event_type", hi.Type),
|
||||||
)
|
)
|
||||||
|
|
||||||
// check if parser was set
|
// check if parser was set
|
||||||
l.mtx.Lock()
|
l.mtx.Lock()
|
||||||
defer l.mtx.Unlock()
|
defer l.mtx.Unlock()
|
||||||
|
|
||||||
l.notificationParsers[hi.scriptHashWithType] = hi.parser
|
var k scriptHashWithType
|
||||||
l.notificationHandlers[hi.scriptHashWithType] = append(
|
k.hash = hi.Contract
|
||||||
l.notificationHandlers[hi.scriptHashWithType],
|
k.typ = hi.Type
|
||||||
hi.handlers...,
|
|
||||||
|
l.notificationParsers[k] = hi.Parser
|
||||||
|
l.notificationHandlers[k] = append(
|
||||||
|
l.notificationHandlers[k],
|
||||||
|
hi.Handlers...,
|
||||||
)
|
)
|
||||||
|
|
||||||
log.Debug(context.Background(), logs.EventRegisteredNewEventHandler)
|
log.Debug(context.Background(), logs.EventRegisteredNewEventHandler)
|
||||||
|
|
|
@ -39,23 +39,15 @@ func TestEventHandling(t *testing.T) {
|
||||||
blockHandled <- true
|
blockHandled <- true
|
||||||
})
|
})
|
||||||
|
|
||||||
key := scriptHashWithType{
|
|
||||||
scriptHashValue: scriptHashValue{
|
|
||||||
hash: util.Uint160{100},
|
|
||||||
},
|
|
||||||
typeValue: typeValue{
|
|
||||||
typ: TypeFromString("notification type"),
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
notificationHandled := make(chan bool)
|
notificationHandled := make(chan bool)
|
||||||
handledNotifications := make([]Event, 0)
|
handledNotifications := make([]Event, 0)
|
||||||
l.RegisterNotificationHandler(NotificationHandlerInfo{
|
l.RegisterNotificationHandler(NotificationHandlerInfo{
|
||||||
scriptHashWithType: key,
|
Contract: util.Uint160{100},
|
||||||
parser: func(cne *state.ContainedNotificationEvent) (Event, error) {
|
Type: TypeFromString("notification type"),
|
||||||
|
Parser: func(cne *state.ContainedNotificationEvent) (Event, error) {
|
||||||
return testNotificationEvent{source: cne}, nil
|
return testNotificationEvent{source: cne}, nil
|
||||||
},
|
},
|
||||||
handlers: []Handler{
|
Handlers: []Handler{
|
||||||
func(_ context.Context, e Event) {
|
func(_ context.Context, e Event) {
|
||||||
handledNotifications = append(handledNotifications, e)
|
handledNotifications = append(handledNotifications, e)
|
||||||
notificationHandled <- true
|
notificationHandled <- true
|
||||||
|
|
Loading…
Reference in a new issue