Files
simplex-chat/docs/rfcs/diagrams/2023-08-28-groups-improvements.mmd
2023-09-01 19:43:07 +04:00

41 lines
1.7 KiB
Plaintext

sequenceDiagram
participant M as N existing<br>members
participant A as Alice
participant B as Bob
note over A, B: 1. send and accept group invitation /<br>join via group link
alt host invites contact
A ->> B: x.grp.inv<br>invite Bob to group<br>(via contact connection)
else user joins via group link
B ->> A: request to join group via link
A ->> B: auto-accept<br>x.group.link.info with host's profile<br>and joining member MemberId<br>establish group member connection
A ->> B: x.grp.info<br>group profile
end
note right of B: when joining via group link<br>Bob doesn't wait for x.grp.info<br>and initiates group handshake<br>with x.grp.acpt.address<br>after establishing connection
note over B: create per group address
B ->> A: x.grp.acpt.address<br>accept invitation<br>and send address to connect<br>(via member connection)
B ->> A: establish group member connection
note over M, B: 2. introduce new member Bob to all existing members
A ->> M: x.grp.mem.new<br>"announce" Bob<br>to existing members<br>(via member connections)
loop batched
A ->> B: x.grp.mem.intro * N<br>"introduce" members<br>(via member connection)
note over B: create N MemberCodes
B ->> A: x.grp.mem.inv.code<br>unique MemberCodes<br>for all members<br>(via member connection)
end
A ->> M: x.grp.mem.fwd.code<br>forward address<br>and unique MemberCodes<br>to all members<br>(via member connections)
note over M, B: 3. establish group member connection
M ->> B: request group member connection<br>x.introduced with MemberCode
B ->> M: verify MemberCode, auto-accept
note over M, B: no contact deduplication
opt all introduced members connected / expiration
note over B: delete per group address
end