status-go/protocol/peersyncing/peersyncing.go
Andrea Maria Piana e65760ca85 Add basic peersyncing
This commit adds basic syncing capabilities with peers if they are both
online.

It updates the work done on MVDS, but I decided to create the code in
status-go instead, since it's very tight to the application (similarly
the code that was the inspiration for mvds, bramble, is all tight
together at the database level).

I reused parts of the protobufs.

The flow is:

1) An OFFER message is sent periodically with a bunch of message-ids and
   group-ids.
2) Anyone can REQUEST some of those messages if not present in their
   database.

3) The peer will then send over those messages.

It's disabled by default, but I am planning to add a way to set up the
flags.
2024-01-23 12:46:17 +00:00

43 lines
1.1 KiB
Go

package peersyncing
type PeerSyncing struct {
persistence SyncMessagePersistence
config Config
}
func New(config Config) *PeerSyncing {
syncMessagePersistence := config.SyncMessagePersistence
if syncMessagePersistence == nil {
syncMessagePersistence = NewSyncMessageSQLitePersistence(config.Database)
}
return &PeerSyncing{
config: config,
persistence: syncMessagePersistence,
}
}
func (p *PeerSyncing) Add(message SyncMessage) error {
return p.persistence.Add(message)
}
func (p *PeerSyncing) AvailableMessages() ([]SyncMessage, error) {
return p.persistence.All()
}
func (p *PeerSyncing) AvailableMessagesByGroupID(groupID []byte, limit int) ([]SyncMessage, error) {
return p.persistence.ByGroupID(groupID, limit)
}
func (p *PeerSyncing) AvailableMessagesByGroupIDs(groupIDs [][]byte, limit int) ([]SyncMessage, error) {
return p.persistence.ByGroupIDs(groupIDs, limit)
}
func (p *PeerSyncing) MessagesByIDs(messageIDs [][]byte) ([]SyncMessage, error) {
return p.persistence.ByMessageIDs(messageIDs)
}
func (p *PeerSyncing) OnOffer(messages []SyncMessage) ([]SyncMessage, error) {
return p.persistence.Complement(messages)
}