Daemons Search

This commit is contained in:
mr
2026-01-28 17:22:29 +01:00
parent 0ed2fc0f15
commit 7fd258dc9d
22 changed files with 1631 additions and 680 deletions

89
daemons/pubsub/handler.go Normal file
View File

@@ -0,0 +1,89 @@
package pubsub
import (
"context"
"encoding/json"
"errors"
"oc-discovery/daemons"
"oc-discovery/daemons/dht"
"oc-discovery/models"
"cloud.o-forge.io/core/oc-lib/models/peer"
"cloud.o-forge.io/core/oc-lib/models/resources"
"cloud.o-forge.io/core/oc-lib/tools"
)
func (ps *PubSubService) handleEvent(ctx context.Context, topicName string, evt models.Event) error {
action := ps.getTopicName(topicName)
if err := ps.handleEventFromPartner(evt, action); err != nil {
return err
}
if err := ps.handleEventSearch(ctx, evt, action); err != nil {
return err
}
return nil
}
func (ps *PubSubService) handleEventFromPartner(evt models.Event, action tools.PubSubAction) error {
if !(action == tools.PB_CREATE || action == tools.PB_UPDATE || action == tools.PB_DELETE) {
return nil
}
resource, err := resources.ToResource(int(evt.DataType), evt.Payload)
if err != nil {
return err
}
b, err := json.Marshal(resource)
if err != nil {
return err
}
switch action {
case tools.PB_CREATE:
case tools.PB_UPDATE:
tools.NewNATSCaller().SetNATSPub(tools.CREATE_RESOURCE, tools.NATSResponse{
FromApp: "oc-discovery",
Datatype: tools.DataType(evt.DataType),
Method: int(tools.CREATE_RESOURCE),
Payload: b,
})
case tools.PB_DELETE:
tools.NewNATSCaller().SetNATSPub(tools.REMOVE_RESOURCE, tools.NATSResponse{
FromApp: "oc-discovery",
Datatype: tools.DataType(evt.DataType),
Method: int(tools.REMOVE_RESOURCE),
Payload: b,
})
default:
return errors.New("no action authorized available : " + action.String())
}
return nil
}
func (ps *PubSubService) handleEventSearch( // only : on partner followings. 3 canals for every partner.
ctx context.Context,
evt models.Event,
action tools.PubSubAction,
) error {
if !(action == tools.PB_SEARCH_RESPONSE || action == tools.PB_SEARCH) {
return nil
}
if p, err := dht.GetDHTService().GetPeer(ctx, evt.From); err == nil {
if err := daemons.VerifyPeer([]*peer.Peer{p}, evt); err != nil {
return err
}
switch action {
case tools.PB_SEARCH_RESPONSE:
if err := ps.retrieveResponse(ctx, p, evt); err != nil {
return err
}
case tools.PB_SEARCH: // when someone ask for search.
if p, err := dht.GetDHTService().GetPeer(ctx, evt.From); err == nil {
if err := ps.sendResponse(ctx, p, evt); err != nil {
return err
}
}
default:
return nil
}
}
return nil
}