mirror of
https://github.com/status-im/status-go.git
synced 2025-01-10 22:56:40 +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.
31 lines
610 B
Go
31 lines
610 B
Go
package peersyncing
|
|
|
|
import "errors"
|
|
|
|
type SyncMessageType int
|
|
|
|
type SyncMessage struct {
|
|
ID []byte
|
|
Type SyncMessageType
|
|
GroupID []byte
|
|
Payload []byte
|
|
Timestamp uint64
|
|
}
|
|
|
|
var ErrSyncMessageNotValid = errors.New("sync message not valid")
|
|
|
|
func (s *SyncMessage) Valid() error {
|
|
valid := len(s.ID) != 0 && s.Type != SyncMessageNoType && len(s.GroupID) != 0 && len(s.Payload) != 0 && s.Timestamp != 0
|
|
if !valid {
|
|
return ErrSyncMessageNotValid
|
|
}
|
|
return nil
|
|
}
|
|
|
|
const (
|
|
SyncMessageNoType SyncMessageType = iota
|
|
SyncMessageCommunityType
|
|
SyncMessageOneToOneType
|
|
SyncMessagePrivateGroup
|
|
)
|