Ther are a number of synch protocols to support - but they havea number of features in common. Rather than embed each protocol within bedework maybe we need an interface which can be registrered with the system to allow synch to take place.
For example, protocols need to know if an entity has been deleted. Registered interfaces will be notified when an entity is deleted.
Protocols will be registered on a per-user basis. If none are registered there is no overhead.
The first problem is to know what's changed. There are a number of approaches to this and we'll outline a few here:
We just keep a timestamp at the server end and present this to the server. This often requires that the server maintain a list of deleted (or now invisible) entries. On the other hand the client could assume that entries that don't appear have been deleted.
Token + snapshot
We query the server and get back a representation of the current state plus a new token for next time. State is some sort of url + lastmod.