# P2P Communication DNA ###### tags: `Kizuna-architecture` #### This document describes how a private communication DNA is generated using Conductor Admin Calls in Kizuna Messaging Application ## Dependency - "Public/Lobby" DNA with request Zome ## DNA Instantiation Flow - Same color means it is part of one graphql resolver - Heavily dependent on a public DNA that has a request zome ```mermaid sequenceDiagram rect rgb(0, 255, 0) Kizuna_UI_SENDER-->>P2P Comm DNA:1. Create P2PCommDNA with DNA Property (initializeP2PDNA) end rect rgb(0, 255, 0) Kizuna_UI_SENDER-->>P2P Comm DNA: 2. ensure that the agent was able to join the DNA end alt Failed to join DNA loop Until DNA joined rect rgb(0, 255, 0) Kizuna_UI_SENDER-->>P2P Comm DNA: 3. limitedly retry joining DNA end end end P2P Comm DNA-->>P2P Comm DNA: 4. validate_agent() check if the address of the agent is in members property Kizuna_UI_SENDER-->>Lobby_DNA_SENDER: 5. call request_to_chat zomeFunc in request zome Lobby_DNA_SENDER-->>Lobby_DNA_RECEIVER: 6. HDK::API::SEND to receiver agent in lobby DNA to request the receiver to join p2pDNA alt receiver online par 7.1 Lobby_DNA_RECEIVER-->>Lobby_DNA_SENDER: receive callback: return request_received and 7.2 Lobby_DNA_SENDER-->>Kizuna_UI_SENDER: return request_pending and 7.3 Kizuna_UI_SENDER-->>Kizuna_UI_SENDER: render chat screen and 7.4 alt sender exist in contact Lobby_DNA_RECEIVER-->>Kizuna_UI_RECEIVER: receive callback: emit_signal with in_contact: true else sender doesnt exist in contact Lobby_DNA_RECEIVER-->>Kizuna_UI_RECEIVER: receive callback: emit_signal with in_contact: false end and 7.5 rect rgb(255,160,122) Kizuna_UI_RECEIVER-->>P2P Comm DNA: onSignal: join the DNA (joinChatResolver) end end else receiver offline par 7.1 Lobby_DNA_RECEIVER-->>Lobby_DNA_SENDER: receive callback: return recipient_offline and 7.2 Lobby_DNA_SENDER-->>Lobby_DNA_SENDER: commit request_notif entry and link it to receiver agent_address and 7.3 Lobby_DNA_SENDER-->>Kizuna_UI_SENDER: return receiver_offline and 7.4 Kizuna_UI_SENDER-->>Kizuna_UI_SENDER: render chat screen and 7.5 Kizuna_UI_RECEIVER-->>Lobby_DNA_RECEIVER: call fetchRequestNotifs zomeFunc in request Zome when back online and 7.6 rect rgb(255,160,122) Kizuna_UI_RECEIVER-->>P2P Comm DNA: join the DNA (joinChatResolver) end end end rect rgb(255,160,122) Kizuna_UI_RECEIVER-->>P2P Comm DNA: 8. ensure that the agent was able to join the DNA end alt Failed to join DNA loop Until DNA joined rect rgb(255,160,122) Kizuna_UI_RECEIVER-->>P2P Comm DNA: 9. limitedly retry joining DNA end end end P2P Comm DNA-->>P2P Comm DNA: 10. validate_agent() Kizuna_UI_RECEIVER-->>P2P Comm DNA: 11. getMessages() alt messages exist alt address in contact Kizuna_UI_RECEIVER-->>Kizuna_UI_RECEIVER: 12. render chat in messages page else address not in contact Kizuna_UI_RECEIVER-->>Kizuna_UI_RECEIVER: 12. render chat in messages request page end end ```