2026-02-02 12:14:01 +01:00
|
|
|
package node
|
2026-01-28 17:22:29 +01:00
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
"encoding/json"
|
|
|
|
|
"fmt"
|
2026-02-05 16:17:14 +01:00
|
|
|
"oc-discovery/daemons/node/common"
|
2026-01-28 17:22:29 +01:00
|
|
|
|
2026-02-05 16:17:14 +01:00
|
|
|
oclib "cloud.o-forge.io/core/oc-lib"
|
|
|
|
|
"cloud.o-forge.io/core/oc-lib/config"
|
|
|
|
|
"cloud.o-forge.io/core/oc-lib/models/peer"
|
2026-01-28 17:22:29 +01:00
|
|
|
"cloud.o-forge.io/core/oc-lib/tools"
|
2026-02-05 16:17:14 +01:00
|
|
|
pp "github.com/libp2p/go-libp2p/core/peer"
|
2026-01-28 17:22:29 +01:00
|
|
|
)
|
|
|
|
|
|
2026-02-02 12:14:01 +01:00
|
|
|
func ListenNATS(n Node) {
|
2026-01-28 17:22:29 +01:00
|
|
|
tools.NewNATSCaller().ListenNats(map[tools.NATSMethod]func(tools.NATSResponse){
|
2026-02-05 16:17:14 +01:00
|
|
|
tools.CREATE_PEER: func(resp tools.NATSResponse) {
|
|
|
|
|
if resp.FromApp == config.GetAppName() {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
logger := oclib.GetLogger()
|
|
|
|
|
m := map[string]interface{}{}
|
|
|
|
|
err := json.Unmarshal(resp.Payload, &m)
|
|
|
|
|
if err != nil {
|
|
|
|
|
logger.Err(err)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
p := &peer.Peer{}
|
|
|
|
|
p = p.Deserialize(m, p).(*peer.Peer)
|
|
|
|
|
|
|
|
|
|
ad, err := pp.AddrInfoFromString(p.PeerID)
|
|
|
|
|
n.StreamService.Mu.Lock()
|
|
|
|
|
defer n.StreamService.Mu.Unlock()
|
|
|
|
|
|
|
|
|
|
if p.Relation == peer.PARTNER {
|
|
|
|
|
n.StreamService.ConnectToPartner(ad.ID, ad)
|
|
|
|
|
} else {
|
|
|
|
|
ps := common.ProtocolStream{}
|
|
|
|
|
for p, s := range n.StreamService.Streams {
|
|
|
|
|
m := map[pp.ID]*common.Stream{}
|
|
|
|
|
for k := range s {
|
|
|
|
|
if ad.ID != k {
|
|
|
|
|
m[k] = s[k]
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
ps[p] = m
|
|
|
|
|
}
|
|
|
|
|
n.StreamService.Streams = ps
|
|
|
|
|
}
|
|
|
|
|
},
|
2026-01-28 17:22:29 +01:00
|
|
|
tools.PROPALGATION_EVENT: func(resp tools.NATSResponse) {
|
|
|
|
|
var propalgation tools.PropalgationMessage
|
|
|
|
|
err := json.Unmarshal(resp.Payload, &propalgation)
|
|
|
|
|
var dt *tools.DataType
|
|
|
|
|
if propalgation.DataType > 0 {
|
|
|
|
|
dtt := tools.DataType(propalgation.DataType)
|
|
|
|
|
dt = &dtt
|
|
|
|
|
}
|
|
|
|
|
if err == nil {
|
|
|
|
|
switch propalgation.Action {
|
|
|
|
|
case tools.PB_CREATE:
|
|
|
|
|
case tools.PB_UPDATE:
|
|
|
|
|
case tools.PB_DELETE:
|
2026-01-30 16:57:36 +01:00
|
|
|
n.StreamService.ToPartnerPublishEvent(
|
2026-01-28 17:22:29 +01:00
|
|
|
context.Background(),
|
|
|
|
|
propalgation.Action,
|
2026-01-28 17:31:34 +01:00
|
|
|
dt, resp.User,
|
2026-01-28 17:22:29 +01:00
|
|
|
propalgation.Payload,
|
|
|
|
|
)
|
|
|
|
|
case tools.PB_SEARCH:
|
|
|
|
|
m := map[string]interface{}{}
|
|
|
|
|
json.Unmarshal(propalgation.Payload, &m)
|
2026-01-30 16:57:36 +01:00
|
|
|
n.PubSubService.SearchPublishEvent(
|
2026-01-28 17:22:29 +01:00
|
|
|
context.Background(),
|
|
|
|
|
dt,
|
|
|
|
|
fmt.Sprintf("%v", m["type"]),
|
2026-01-28 17:31:34 +01:00
|
|
|
resp.User,
|
2026-01-28 17:22:29 +01:00
|
|
|
fmt.Sprintf("%v", m["search"]),
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
}
|