Protokoł synchronizacji
W tym czasie, w przypadku, gdy system jest w stanie przejść do systemu, można przeprowadzić synchronizację między urządzeniami poprzez udostępnienie odpowiedniego rejestru.
W dokumencie projektowym Swarm design document zdefiniowane jest wiele scenariuszy, jednak nie oznacza to synchronizacji rozmów między urządzeniami dla tego samego użytkownika.
Stara metoda
Z powodu tego, że każda wartość nie musi przekraczać 64k, nie wysyłane są rozmowy w synchronizacji urządzeń ani profily członków, ponieważ jest to zbyt ciężkie.
W starej metody, daemon słucha w „inbox:DEVICE_ID” dla wartości DeviceSync, który zawiera listę kontaktów do synchronizowania (por. AccountManager::startSync()
);
Informacja
The current DeviceSync value present on the DHT is deprecated with this draft.
Nowy sposób
Since Jami has the ConnectionManager, using p2p socket is possible to perform sync quickly with big values (cause the socket is not limited in data).
Oto scenariusz używany do synchronizacji:
When the device (A) goes online, it announces its presence via a DeviceAnnouncement like the OldMethod.
Inne urządzenia (!A) wykryją ogłoszenie i poproszą urządzenie przez ConnectionManager o otwarcie nowego kanału o nazwie „sync://DEVICE_ID_A”. (Uwaga: A otrzyma ogłoszenie z innych urządzeń, więc również poprosi o kanały synchronizacji).
Po otwarciu kanału urządzenie, które prosi o ten kanał, wysyła wartość DeviceSync (por. następna część), zawierającą znane rozmowy i kontakty.
A sprawdzi wartość DeviceSync i:
Usunięcie kontaktów, jeśli wykryje usunięte kontakty
Dodaj kontakty, jeśli wykryje dodane kontakty
Usunięcie rozmów, jeśli wykryje usunięte rozmowy
Dodaj rozmowy, jeśli wykryje dodane rozmowy
Usunięcie żądań rozmowy, jeśli wniosek został zaakceptowany (obecnie w rozmowach) / odrzucony
Dodaj żądania rozmowy, jeśli zostaną wykryte
Informacja
If A detects new conversations, it will asks the device which announced that conversation to clone the repository through a git channel (so like described in Swarm chat design).
Synchronizacja urządzeń
Wartość ta jest JSON zawierająca:
{
"contacts": [/* Contacts (TODO) */],
"conversation": [
{ "id":"convID", "created":TIMESTAMP, "removed":OPTIONAL_TIMESTAMP },
{ "id":"convID2", "created":TIMESTAMP2, "removed":OPTIONAL_TIMESTAMP2 } /* ... */
],
"conversationsRequests": [
{ "id":"convID", "received":TIMESTAMP, "declined":OPTIONAL_TIMESTAMP,
"members":[], "metadatas:[] },
{ "id":"convID2", "received":TIMESTAMP2, "declined":OPTIONAL_TIMESTAMP2
"members":[], "metadatas:[] } /* ... */
],
}
Historia użytkownika
Synchronizacja przy dodawaniu urządzenia
Alice tworzy rozmowę
(Wybór) Alice dodać kilka wiadomości
Alice doda kolejne urządzenie
Inne urządzenie powinno odbierać i synchronizować wcześniej utworzoną rozmowę
Synchronizacja przy podłączeniu urządzenia
Alice tworzy rozmowę
(Wybór) Alice dodać kilka wiadomości
Alice podłączy inne urządzenie
Inne urządzenie powinno odbierać i synchronizować wcześniej utworzoną rozmowę
Synchronizacja między wieloma urządzeniami
Alice ma 2 urządzenia.
Alice tworzy rozmowę
Inne urządzenie powinno odbierać i synchronizować rozmowę utworzoną na jednym z urządzeń
Synchronizacja do wykrywania nowych żądań
Alice otrzymuje prośbę o rozmowę
Alice doda nowe urządzenie
Inne urządzenie powinno odbierać żądania z urządzenia A
Synchronizacja przyjmujących wniosków
Alice ma 2 urządzenia.
Alice przyjmuje prośbę o rozmowę
Inne urządzenie powinno wykryć przyjęte wnioski
Synchronizacja wniosków o odmowę
Alice ma 2 urządzenia.
Alice odmawia prośby o rozmowę
Inne urządzenie powinno wykryć odmowę zgłoszenia
Obecne wdrożenie
gerrit#15584 wdraża tę stronę