NATS Conn with discovery

This commit is contained in:
mr
2026-02-05 15:48:41 +01:00
parent 5b09c683f8
commit 2552eb5f56
4 changed files with 173 additions and 22 deletions

View File

@@ -5,35 +5,33 @@ import (
"fmt"
oclib "cloud.o-forge.io/core/oc-lib"
"cloud.o-forge.io/core/oc-lib/models"
"cloud.o-forge.io/core/oc-lib/models/peer"
"cloud.o-forge.io/core/oc-lib/tools"
)
func ListenNATS() {
fmt.Println("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))
}
logger := oclib.GetLogger()
m := map[string]interface{}{}
err := json.Unmarshal(resp.Payload, &m)
if err != nil {
logger.Err(err)
return
}
search := fmt.Sprintf("%v", m["peer_id"])
access := oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.PEER), nil)
if data := access.Search(nil, search, false); len(data.Data) > 0 {
delete(m, "id")
access.UpdateOne(m, data.Data[0].GetID())
} else {
model := models.Model(access.Collection.EnumIndex())
model = model.Deserialize(m, model)
access.StoreOne(m)
}
},
tools.REMOVE_PEER: func(tools.NATSResponse) {
p := &peer.Peer{}