协同化协议
现在,通过分享相关的存储库,可以同步设备之间的历史. 设备同步需要重新定义,以跟随这些变化.
许多场景在{doc}`Swarm设计文档中定义,但这并不意味着同步设备之间的对话.必须写一些新的场景.
旧方法
由于每个值都不超过64k,所以对话并没有在设备同步中发送,也没有成员配置文件,因为它太重.这是一个问题,必须得到改善.
在旧方法中,该黑龙江正在”收件箱:DEVICE_ID”上听取DeviceSync值,其中包含将同步的联系人列表 (见 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).
设备同步
包含:
{
"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中获取请求
接受请求的同步
爱丽丝有两个设备.
爱丽丝接受了谈话的请求
其他设备应检测接受请求
拒绝请求的同步
爱丽丝有两个设备.
爱丽丝拒绝了谈话的请求
其他设备应检测拒绝请求
目前的实施
执行本页面