Skip to content

Full Mesh Flow

Alea Farrel edited this page Jan 15, 2026 · 1 revision

πŸ•ΈοΈ Full Mesh Flow

Halaman ini menjelaskan bagaimana jaringan Full Mesh terbentuk antar pemain dalam sistem multiplayer Rapid Texter GUI.


πŸ“‹ Daftar Isi


🎯 Gambaran Umum

Setelah peer baru bergabung ke room, proses pembentukan Full Mesh dimulai. Dalam arsitektur Full Mesh, setiap pemain terhubung langsung ke semua pemain lainnya.

Contoh Full Mesh dengan 4 Pemain

         Player A
          /   \
         /     \
        /       \
   Player B --- Player D
        \       /
         \     /
          \   /
         Player C

Jumlah koneksi dalam Full Mesh:

  • 2 pemain: 1 koneksi
  • 3 pemain: 3 koneksi
  • 4 pemain: 6 koneksi
  • n pemain: n(n-1)/2 koneksi

πŸ“Š Diagram Alur

Full Mesh Flow

Diagram Mermaid

flowchart LR
    subgraph START_MESH [" "]
        A([Start: Peer baru terkoneksi])
    end
    
    subgraph HANDSHAKE [" "]
        B[Kirim paket HELLO dengan info: name, port, isRoomCreator, hostUuid]
        C[/Input: Terima HELLO dari peer/]
        D[Validasi UUID pemain]
        E{UUID sudah ada?}
        F[Putuskan koneksi duplikat dengan UUID comparison]
        G[Simpan info peer ke daftar]
        H[Set handshakeComplete = true]
    end
    
    subgraph MESH_BUILD [" "]
        I{Apakah host?}
        J[Kirim PEER_LIST ke peer baru]
        K[/Output: Broadcast playerJoined signal/]
        L[/Input: Terima PEER_LIST/]
        M[Parse daftar peer yang perlu dikoneksi]
        N{Ada peer yang belum terkoneksi?}
        O[Koneksi TCP ke peer tersebut]
        P[Ulangi handshake untuk setiap peer]
    end
    
    subgraph END_MESH [" "]
        Q([End: Full Mesh terbentuk])
    end
    
    A --> B
    B --> C
    C --> D
    D --> E
    E -->|Ya| F
    F --> Q
    E -->|Tidak| G
    G --> H
    H --> I
    I -->|Ya| J
    J --> K
    K --> Q
    I -->|Tidak| L
    L --> M
    M --> N
    N -->|Ya| O
    O --> P
    P --> N
    N -->|Tidak| Q
Loading

🀝 Fase Handshake

Step 1: Kirim Paket HELLO

Peer baru mengirim paket HELLO ke peer yang dituju

Isi paket HELLO:

Field Tipe Keterangan
name String Nama pemain
port Integer Port TCP yang digunakan
isRoomCreator Boolean Apakah pembuat room
hostUuid String UUID host yang dituju

Step 2: Terima HELLO dari Peer

Peer menerima paket HELLO balik
  • Memastikan komunikasi dua arah berhasil
  • Mendapatkan informasi peer lawan

Step 3: Validasi UUID

Sistem memeriksa apakah UUID pemain sudah ada

UUID digunakan untuk:

  • Identifikasi unik setiap pemain
  • Mendeteksi koneksi duplikat
  • Menentukan authority (UUID terendah)

Step 4: Handling UUID Duplikat

Jika UUID sudah ada, putuskan salah satu koneksi

Aturan Penentuan:

  • Bandingkan kedua UUID
  • UUID yang lebih tinggi memutuskan koneksi
  • UUID yang lebih rendah mempertahankan koneksi

Step 5: Simpan Info Peer

Jika UUID unik, simpan informasi peer ke daftar

Informasi yang disimpan:

  • UUID
  • Nama pemain
  • IP Address
  • Port
  • Status koneksi

Step 6: Set Handshake Complete

Tandai handshake selesai untuk peer ini

πŸ”§ Fase Mesh Building

Untuk Host

Host memiliki tanggung jawab khusus dalam pembentukan mesh

Step 7a: Kirim PEER_LIST

Host mengirim daftar semua peer yang sudah terhubung ke peer baru

Isi PEER_LIST:

Field Tipe Keterangan
peers Array Daftar informasi peer
peers[].uuid String UUID peer
peers[].name String Nama peer
peers[].ip String IP Address peer
peers[].port Integer Port peer

Step 7b: Broadcast playerJoined

Host memberitahu semua peer bahwa ada pemain baru bergabung

Untuk Guest

Guest perlu membuat koneksi ke peer lain berdasarkan PEER_LIST

Step 8: Terima PEER_LIST

Guest menerima daftar peer dari host

Step 9: Parse Daftar Peer

Identifikasi peer mana yang belum terkoneksi

Step 10: Koneksi ke Peer Lain

Untuk setiap peer yang belum terkoneksi:
1. Buat koneksi TCP ke IP:port peer
2. Lakukan handshake (kirim/terima HELLO)
3. Tambahkan ke daftar peer aktif

Step 11: Ulangi Sampai Selesai

Loop sampai semua peer dalam PEER_LIST sudah terkoneksi

πŸ”„ Penanganan Duplikat

Skenario Koneksi Duplikat

Dalam Full Mesh, ada kemungkinan dua peer mencoba
saling terhubung pada waktu yang bersamaan.

Contoh:

  • Player B menerima PEER_LIST berisi Player C
  • Player C menerima PEER_LIST berisi Player B
  • Keduanya mencoba koneksi di waktu yang sama

Solusi: UUID Comparison

Gunakan UUID untuk menentukan siapa yang mempertahankan koneksi
Kondisi Aksi
UUID saya < UUID peer Saya mempertahankan koneksi
UUID saya > UUID peer Saya memutuskan koneksi
UUID sama Reject (tidak mungkin terjadi)

Diagram Penanganan Duplikat

Player B (UUID: abc123)     Player C (UUID: xyz789)
        |                          |
        |------- Connect --------->|
        |<------ Connect ----------|
        |                          |
        |  UUID abc123 < xyz789    |
        |  B mempertahankan        |
        |  C memutuskan            |
        |                          |
        |<====== Final Mesh ======>|

πŸ“Š Tabel Status Koneksi

Status Keterangan
connecting Sedang mencoba koneksi
handshaking Proses tukar HELLO
connected Handshake selesai, siap digunakan
disconnected Koneksi terputus

πŸ”— Navigasi