同期化プロトコル

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

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

古い方法

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

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

DHT に存在する現在の DeviceSync値は,この草案で廃止されています.

新しい方法

() は ConnectionManager を使っているので,p2pソケットを使用して,大きな値と迅速に同期することが可能である (ソケットがデータに制限されていないため)

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

  1. デバイス (A) がオンになると,OldMethodのようなデバイス広告を通じて存在を知らせます

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

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

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

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

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

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

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

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

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

注: A が新しい会話を検出した場合,その会話を発表したデバイスに git チャンネルを通じてリポジトリをクローンするように要求します (Swarm チャットデザイン)

デバイス同期

この値は,以下を含む 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 このページを実装する