Files
oc-peer/infrastructure/nats.go
2026-01-29 16:19:57 +01:00

45 lines
1.2 KiB
Go

package infrastructure
import (
"encoding/json"
"fmt"
oclib "cloud.o-forge.io/core/oc-lib"
"cloud.o-forge.io/core/oc-lib/models/peer"
"cloud.o-forge.io/core/oc-lib/tools"
)
func ListenNATS() {
tools.NewNATSCaller().ListenNats(map[tools.NATSMethod]func(tools.NATSResponse){
tools.CREATE_PEER: func(resp tools.NATSResponse) {
p := &peer.Peer{}
err := json.Unmarshal(resp.Payload, p)
if err == nil {
search := p.PeerID
if p.Relation == peer.SELF {
search = fmt.Sprintf("%v", peer.SELF.EnumIndex())
}
access := oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.PEER), nil)
if data := access.Search(nil, search, false); len(data.Data) > 0 {
pp := data.Data[0].(*peer.Peer)
pp.Name = p.Name
pp.PeerID = p.PeerID
pp.State = p.State
pp.APIUrl = p.APIUrl
pp.PublicKey = p.PublicKey
pp.WalletAddress = p.WalletAddress
pp.NATSAddress = p.NATSAddress
access.UpdateOne(pp.Serialize(pp), pp.GetID())
} else {
access.StoreOne(p.Serialize(p))
}
}
},
tools.REMOVE_PEER: func(tools.NATSResponse) {
p := &peer.Peer{}
access := oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.PEER), nil)
access.DeleteOne(p.GetID())
},
})
}