פרוטוקול סינכרון
צ’אט הסווארם מספק אפשרויות חדשות לכל מכשיר. עכשיו, ניתן להעמיק היסטוריה בין מכשירים על ידי שיתוף את המאגר הקשור.
הרבה סצנות מוגדרות במסמך עיצוב של Swarm, עם זאת, זה לא אומר כי שיחות בין מכשירים עבור אותו משתמש. יש לכתוב כמה סצנות חדשות.
שיטה ישנה
סינכרון המכשיר נעשה באמצעות DHT. מכיוון שכל ערך לא חייב להיות גדול יותר מ-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).
סינכרון המכשיר
הערך הזה הוא 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
סינכרון עבור בקשות שנשמחו
אליס יש 2 מכשירים.
אליס מקבלת בקשה לשיחה
המכשיר השני צריך לזהות את בקשת ההסכמה
סינכרון לבקשות סירוב
אליס יש 2 מכשירים.
אליס מסרבת את בקשת השיחה
המכשיר השני צריך לזהות את בקשת ההרשעה
יישום הנוכחי
gerrit#15584 ממלא את הדף הזה