Untuk menggunakan program, buka folder src dalam IntelliJ IDEA, kemudian lakukan Run sejumlah peer yang diinginkan Ketika sudah berjalan, masukkan host, port, jumlah peer, dan alamat untuk peer lain yang terhubung
13516041 (33%): VersionVector, DeletionBuffer, Debugging, Laporan
13516113 (33%): TextEditor, Controller, Debugging, Laporan
13516116 (33%): CRDT, Networking, Debugging, Laporan
Pertama-tama program akan menjalankan sebuah commandline untuk setup peer. Kemudian, akan dibuat sebuah controller untuk masing-masing peer.
Controller ini akan mendengarkan input operasi lokal dan remote. Jika terjadi operasi lokal, controller akan meminta CRDT untuk memasukan/menghapus karakter, lalu mem-broadcast identifier untuk karakter tersebut ke peer lain melalui Messenger. Jika terjadi operasi remote, controller akan berkonsultasi dengan VersionVector untuk operasi tersebut, dan meneruskannya ke ke CRDT jika diperlukan.
CRDT akan menghitung identifier untuk karakter baru tersebut tergantung remote atau lokal sekaligus menempatkan karakter di lokasi yang tepat di TextEditor.
CRDT pada program ini bertugas sebagai struktur data yang menampung list of character yang telah diberikan indentifier. CRDT menangani insert dan delete cara lokal maupun remote. CRDT memastikan bahwa insert dan delete yang terjadi bersifat komutatif dan idempoten. Jika terjadi konflik karena operasi lokal dan remote yang bersamaan, CRDT akan menyelesaikannya dengan hasil solusi yang sama untuk semua peer. Selain itu CRDT memberikan index yang tepat dari sebuah karakter jika index disusun secara linear dan memasukannya ke TextEditor.
VersionVector mencatat versi terbaru yang telah diterima dari masing-masing peer. Hal ini diperlukan untuk penanganan deletion yang terjadi sebelum insert untuk karakter yang sama. Hal ini dapat terjadi karena masalah latensi. VersionVector bekerjasama dengan DeletionBuffer untuk menangani masalah ini.
DeletionBuffer digunakan sebagai tempat penyimpanan perintah delete yang belum memiliki pasangan insert-nya. Jika insert yang memiliki pasangan dengan deletenya, maka insert tersebut tidak perlu dilakukan.
- Sistem connect to peer sekarang masih dari console dan hanya bisa diinisialisasi di awal, padahal sebaiknya sistem pembuatan connect to peer tersebut dimasukkan kedalam GUI dan dapat diubah secara dinamik.
- Menyimpan kumpulan Char pada array 2 dimensi, agar operasi pencarian, penambahan, dan pengubahan menjadi lebih cepat. Implementasi yang telah kami lakukan sekarang baru menggunakan array 1 dimensi, sehingga untuk setiap operasinya membutuhkan kompleksitas O(n).
Input:
- Peer 1 mengetikkan 'c' dan 'd' berurutan
- Peer 1 mengetikkan 'a' dan 'b' berurutan sebelum huruf 'c'
Input:
- Peer 1 mengetikkan 'abcd'
- Peer 1 menghapus 'd', 'b', 'a', dan 'c' berurutan
Input:
- Peer 1 mengetikkan 'c'
- Peer 2 mengetikkan 'a' dan 'b' berurutan sebelum huruf 'c'
- Peer 2 mengetikkan 'e' setelah huruf 'c'
- Peer 2 mengetikkan 'd' setelah huruf 'c'
Input:
- Peer 1 mengetikkan 'c'
- Peer 2 mengetikkan 'a' dan 'b' berurutan sebelum huruf 'c'
- Peer 2 mengetikkan 'e' setelah huruf 'c'
- Peer 2 mengetikkan 'd' setelah huruf 'c'
- Peer 1 menghapus 'b', 'd', 'e', 'a', dan 'c' berurutan




