2026-01-30 16:57:36 +01:00
|
|
|
package pubsub
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
"oc-discovery/daemons/node/common"
|
|
|
|
|
|
|
|
|
|
"cloud.o-forge.io/core/oc-lib/tools"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func (ps *PubSubService) handleEvent(ctx context.Context, topicName string, evt *common.Event) error {
|
|
|
|
|
action := ps.getTopicName(topicName)
|
|
|
|
|
if err := ps.handleEventSearch(ctx, evt, action); err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (ps *PubSubService) handleEventSearch( // only : on partner followings. 3 canals for every partner.
|
|
|
|
|
ctx context.Context,
|
|
|
|
|
evt *common.Event,
|
|
|
|
|
action tools.PubSubAction,
|
|
|
|
|
) error {
|
|
|
|
|
if !(action == tools.PB_SEARCH_RESPONSE || action == tools.PB_SEARCH) {
|
|
|
|
|
return nil
|
|
|
|
|
}
|
2026-02-04 11:35:19 +01:00
|
|
|
if p, err := ps.Node.GetPeerRecord(ctx, evt.From); err == nil && len(p) > 0 { // peerFrom is Unique
|
|
|
|
|
if err := evt.Verify(p[0]); err != nil {
|
2026-01-30 16:57:36 +01:00
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
switch action {
|
|
|
|
|
case tools.PB_SEARCH: // when someone ask for search.
|
2026-02-04 11:35:19 +01:00
|
|
|
if err := ps.StreamService.SendResponse(p[0], evt); err != nil {
|
2026-01-30 16:57:36 +01:00
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return nil
|
|
|
|
|
}
|