mirror of
https://github.com/status-im/status-go.git
synced 2025-01-09 06:12:55 +00:00
e65760ca85
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.
43 lines
1.1 KiB
Go
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)
|
|
}
|