동기화 프로토콜
스와임 채팅은 모든 장치에 새로운 가능성을 제공합니다. 이제, 관련 저장소를 공유함으로써 장치들 간의 역사를 동기화 할 수 있습니다. 장치 동기화는 이러한 변경 사항을 따라하기 위해 재정립되어야합니다.
Swarm 디자인 문서에서 많은 시나리오가 정의되어 있지만, 이것은 동일한 사용자에 대한 장치 간의 대화의 동기화를 의미하지는 않습니다. 몇 가지 새로운 시나리오가 작성되어야합니다.
오래된 방법
장치 동기화 작업은 DHT를 통해 수행되었습니다. 모든 값이 64k를 초과하지 않아서, 대화는 장치 동기화 또는 멤버 프로필에서 전송되지 않았습니다. 왜냐하면 그것은 너무 무거운 것이기 때문입니다. 이것은 문제이며 개선되어야합니다.
오래된 방법에서는, 데몬이 동기화 할 수 있는 연락처 목록을 포함하는 DeviceSync 값에 대해 “inbox:DEVICE_ID”에서 듣고 있습니다 (cf. 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).
이제, 이것은 동기화하기 위해 사용되는 시나리오입니다.
When the device (A) goes online, it announces its presence via a DeviceAnnouncement like the OldMethod.
다른 장치 (!A) 는 그 발표를 감지하고 ConnectionManager를 통해 이 장치에게 “sync://DEVICE_ID_A”라는 새로운 채널을 열도록 요청할 것입니다. (注: A는 다른 장치에서 발표를 받게 되므로 동기화 채널을 요청할 것입니다.)
이 채널을 열자마자 이 채널을 요청하는 장치가 알려진 대화와 연락처를 포함하는 DeviceSync 값을 전송합니다.
A는 DeviceSync 값을 확인하고:
제거된 연락처를 감지하면 연락처를 제거하십시오
추가된 연락처를 감지하면 연락처를 추가합니다
삭제된 대화가 감지되면 대화를 삭제합니다
추가된 대화를 감지하면 대화를 추가합니다
대화 요청이 받아들여지고 (지금 대화 중) / 거절되면 대화 요청을 삭제하십시오
대화 요청이 감지되면 추가
참고
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":[] }
/* ... */
],
}
사용자 이야기
장치 추가 시 동기화
앨리스가 대화를 만들어
(선택) 앨리스 몇 가지 메시지를 추가
앨리스가 또 다른 장치를 추가합니다
다른 장치가 이전에 생성된 대화를 수신하고 동기화해야 합니다.
장치 연결 시 동기화
앨리스가 대화를 만들어
(선택) 앨리스 몇 가지 메시지를 추가
앨리스가 다른 기기를 연결합니다
다른 장치가 이전에 생성된 대화를 수신하고 동기화해야 합니다.
여러 장치 간의 동기화
앨리스가 두 장기를 가지고 있어
앨리스가 대화를 만들어
다른 장치가 장치 중 하나에서 생성된 대화를 수신하고 동기화해야 합니다.
새로운 요청들을 감지하기 위한 동기화
앨리스가 대화 요청을 받고
앨리스 새로운 장치를 추가
다른 장치가 장치 A에서 요청들을 검색해야 합니다
승인된 요청의 동기화
앨리스에는 두 개의 장치가 있습니다.
앨리스가 대화 요청을 받아들인다
다른 장치가 받아들여진 요청을 감지해야 합니다.
거부 요청의 동기화
앨리스에는 두 개의 장치가 있습니다.
앨리스는 대화 요청을 거절합니다
다른 장치가 거부된 요청을 감지해야 합니다.
현재 시행
gerrit#15584이 페이지를 구현합니다