Add logic service NATS Peer x Cache + Retrieve a lost peer partner.

This commit is contained in:
mr
2026-02-02 12:43:43 +01:00
parent 0ffe98045e
commit 6ca762abbf
3 changed files with 37 additions and 10 deletions

View File

@@ -27,7 +27,7 @@ func (ps *StreamService) PublishResources(dt *tools.DataType, user string, toPee
if err != nil {
return err
}
ps.write(tools.PB_SEARCH, toPeerID, ad, dt, user, resource, ProtocolSearchResource)
ps.write(tools.PB_SEARCH, toPeerID, ad, dt, user, resource, ProtocolSearchResource, p.Data.(*peer.Peer).Relation == peer.PARTNER)
}
return nil
}
@@ -55,7 +55,7 @@ func (ps *StreamService) SearchKnownPublishEvent(dt *tools.DataType, user string
if err != nil {
continue
}
ps.write(tools.PB_SEARCH, p.GetID(), ad, dt, user, b, ProtocolSearchResource)
ps.write(tools.PB_SEARCH, p.GetID(), ad, dt, user, b, ProtocolSearchResource, p.(*peer.Peer).Relation == peer.PARTNER)
}
}
return nil
@@ -74,7 +74,7 @@ func (ps *StreamService) SearchPartnersPublishEvent(dt *tools.DataType, user str
if err != nil {
continue
}
ps.write(tools.PB_SEARCH, p.GetID(), ad, dt, user, b, ProtocolSearchResource)
ps.write(tools.PB_SEARCH, p.GetID(), ad, dt, user, b, ProtocolSearchResource, true)
}
}
return nil
@@ -82,6 +82,31 @@ func (ps *StreamService) SearchPartnersPublishEvent(dt *tools.DataType, user str
func (ps *StreamService) ToPartnerPublishEvent(
ctx context.Context, action tools.PubSubAction, dt *tools.DataType, user string, payload []byte) error {
if *dt == tools.PEER {
var p peer.Peer
if err := json.Unmarshal(payload, &p); err != nil {
return err
}
ad, err := pp.AddrInfoFromString(p.StreamAddress)
if err != nil {
return err
}
ps.mu.Lock()
defer ps.mu.Unlock()
if p.Relation == peer.PARTNER {
if ps.Streams[ProtocolHeartbeatPartner] == nil {
ps.Streams[ProtocolHeartbeatPartner] = map[pp.ID]*common.Stream{}
}
ps.ConnectToPartner(ad.ID, ad)
} else if ps.Streams[ProtocolHeartbeatPartner] != nil && ps.Streams[ProtocolHeartbeatPartner][ad.ID] != nil {
for _, pids := range ps.Streams {
if pids[ad.ID] != nil {
delete(pids, ad.ID)
}
}
}
return nil
}
if peers, err := ps.searchPeer(fmt.Sprintf("%v", peer.PARTNER.EnumIndex())); err != nil {
return err
} else {
@@ -91,7 +116,7 @@ func (ps *StreamService) ToPartnerPublishEvent(
if err != nil {
continue
}
ps.write(action, p.GetID(), ad, dt, user, payload, protocol)
ps.write(action, p.GetID(), ad, dt, user, payload, protocol, true)
}
}
}
@@ -105,7 +130,8 @@ func (s *StreamService) write(
dt *tools.DataType,
user string,
payload []byte,
proto protocol.ID) error {
proto protocol.ID,
isAPartner bool) error {
logger := oclib.GetLogger()
name := action.String() + "#" + peerID.ID.String()
@@ -122,6 +148,9 @@ func (s *StreamService) write(
// should create a very temp stream
ctxTTL, err := context.WithTimeout(context.Background(), 10*time.Second)
if err == nil {
if isAPartner {
ctxTTL = context.Background()
}
if s.Host.Network().Connectedness(peerID.ID) != network.Connected {
_ = s.Host.Connect(ctxTTL, *peerID)
str, err := s.Host.NewStream(ctxTTL, peerID.ID, ProtocolHeartbeatPartner)