同期化プロトコル

ネットワークのネットワークは,すべてのデバイスに新しい可能性を提供します. 関連リポジトリを共有することで,デバイス間の歴史を同期することが可能です. デバイス同期はこれらの変更に従って再定義する必要があります.

Swarm設計文書では多くのシナリオが定義されているが,これは同じユーザーのためのデバイス間の会話の同期を意味するものではありません.いくつかの新しいシナリオは書き込まなければなりません.

古い方法

デバイス同期は DHT 経由で行われました.すべての値は64kを超えてはならないので,会話はデバイス同期でもメンバープロフィールでも送信されなかった.これはあまりにも重すぎるため.これは問題であり,改善する必要があります.

古い方法では,デモンが同期する連絡先リストを含む DeviceSync 値の"inbox:DEVICE_ID"で聴いている (参照 AccountManager::startSync() );

注釈

The current DeviceSync value present on the DHT is deprecated with this draft.

新しい方法

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).

シンクロ化するために使用されたシナリオです

  1. When the device (A) goes online, it announces its presence via a DeviceAnnouncement like the OldMethod.

  2. 他のデバイス (!A) は,その通知を検出し,このデバイスに ConnectionManager を介して"sync://DEVICE_ID_A"という新しいチャンネルを開くように要求します. (注:Aは他のデバイスから通知を受け取るので,同期チャンネルも要求します).

  3. このチャンネルが開く直ぐに,このチャンネルを要求しているデバイスは,その既知の会話と連絡先を含む DeviceSync (次の部分参照) 値を送信します.

  4. ADeviceSync の値をチェックし,

    • 削除された連絡先を検出した場合,連絡先を削除

    • 追加された連絡先を検出した場合,連絡先を追加

    • 削除された会話が検出された場合,会話を削除します

    • 追加された会話が検出された場合,会話を追加

    • 要求が受け入れられた場合 (現在会話中) /拒否された場合,会話の要求を削除します

    • 確認された場合,会話の要求を追加する

注釈

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).

デバイス同期

この値は,以下を含む JSON である.

{
    "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":[] }
        /* ... */
    ],
}

ユーザーストーリー

デバイスを追加する際に同期する

  • アリスは会話を作り出す

  • (オプション) アリスはいくつかのメッセージを追加

  • アリスは別の装置を追加

  • 他のデバイスは,以前に作成された会話を受け取り,同期する必要があります.

デバイスを接続する際に同期する

  • アリスは会話を作り出す

  • (オプション) アリスはいくつかのメッセージを追加

  • アリスは別の装置を接続

  • 他のデバイスは,以前に作成された会話を受け取り,同期する必要があります.

複数のデバイスの同期

  • アリスは2つの装置を手に入れた

  • アリスは会話を作り出す

  • 他のデバイスは,デバイスの1つで作成された会話を受け取り同期する必要があります.

新しい要求を検出するための同期

  • アリスは会話の要請を受け

  • アリスは新しい装置を追加

  • 他のデバイスは,デバイス Aからの要求を回収する必要があります

受け入れられた要求の同期

  • アリスには2つの装置がある

  • アリスは会話の要請を受け入れ

  • 他の装置は,受け入れられた要求を検出する

拒否要請の同期

  • アリスには2つの装置がある

  • アリスは会話の要請を拒否

  • 他の装置は拒否された要求を検出する必要があります

現在の実施

gerrit#15584 このページを実装する