-
Notifications
You must be signed in to change notification settings - Fork 0
Full Mesh Flow
Alea Farrel edited this page Jan 15, 2026
·
1 revision
Halaman ini menjelaskan bagaimana jaringan Full Mesh terbentuk antar pemain dalam sistem multiplayer Rapid Texter GUI.
Setelah peer baru bergabung ke room, proses pembentukan Full Mesh dimulai. Dalam arsitektur Full Mesh, setiap pemain terhubung langsung ke semua pemain lainnya.
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

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
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 |
Peer menerima paket HELLO balik
- Memastikan komunikasi dua arah berhasil
- Mendapatkan informasi peer lawan
Sistem memeriksa apakah UUID pemain sudah ada
UUID digunakan untuk:
- Identifikasi unik setiap pemain
- Mendeteksi koneksi duplikat
- Menentukan authority (UUID terendah)
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
Jika UUID unik, simpan informasi peer ke daftar
Informasi yang disimpan:
- UUID
- Nama pemain
- IP Address
- Port
- Status koneksi
Tandai handshake selesai untuk peer ini
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
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
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
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) |
Player B (UUID: abc123) Player C (UUID: xyz789)
| |
|------- Connect --------->|
|<------ Connect ----------|
| |
| UUID abc123 < xyz789 |
| B mempertahankan |
| C memutuskan |
| |
|<====== Final Mesh ======>|
| Status | Keterangan |
|---|---|
connecting |
Sedang mencoba koneksi |
handshaking |
Proses tukar HELLO |
connected |
Handshake selesai, siap digunakan |
disconnected |
Koneksi terputus |