Skip to content
Snippets Groups Projects
Rahmat Nur Ibrahim Santosa's avatar
Rahmat Nur Ibrahim Santosa authored
f543dee5
Name Last commit Last update
doc
img
src
.DS_Store
README.md
makefile

Tugas Besar Sistem Terpadu

Peer2Peer Collaborative Editing

Petunjuk Penggunaan Program

  1. Compile
cd src && javac Char.java Controller.java CRDT.java Identifier.java Main.java TextEditor.java
  1. Jalankan program
java Main

Pembagian Tugas

  • Rahmat Nur I. Santosa (13516009): 33% - CRDT, Controller, Identifier, Laporan
  • Nira Rizki Ramadhani (13516018): 33% - Char, CRDT, Controller, Laporan
  • Seldi Kurnia Trihardja (13516042): 33% - TextEditor, VersionVector, Messenger, Laporan

Laporan

Desain Program

Program terdiri dari beberapa struktur utama yaitu Controller, CRDT, Editor, Messenger, serta Version Vector. CRDT atau Conflict-Free Replicated Data Type berfungsi untuk menjaga konsistensi dari data program. CRDT terhubung dengan Version Vector, yaitu suatu struktur data yang mencatat versi dari suatu operasi agar kausalitasnya terjaga. Kemudian terdapat Editor yang merupakan komponen text editor yang dibuat menggunakan Java Swing. Messenger berfungsi untuk menghubungkan suatu peer dengan peer yang lainnya yang berfungsi sebagai server sekaligus client. Terakhir, terdapat controller berfungsi untuk mengintegrasi semua struktur utama dari program.

Struktur program digambarkan oleh bagan di bawah ini.

Desain Program

CRDT

Dalam program yang kami buat, CRDT adalah sebuah kelas yang memiliki struktur data: dengan list of Character yang telah diberikan Identifier untuk posisinya, dimana Identifier terdiri dari coordinate dan site id. CRDT berfungsi menangani insert dan delete baik dengan cara local maupun remote serta memastikan bahwa operasi tersebut bersifat komutatif dan idempoten.

Struktur data dari CRDT pada program adalah sebagai berikut:

private int levelSize;
private String siteId;
private List<Char> struct;
private Controller controller;

Dengan deskripsi: LevelSize adalah jumlah node maksimum dari implementasi tree struktur pada penyimpanan karakter pada suatu level. SiteId menyimpan Id dari suatu peer. Struct menyimpan List of Character, atau keseluruhan karakter yang dimasukkan. Sedangkan Controller menghubungkan kelas dengan controller.

Version Vector

Version Vector digunakan pada sebuah peer dan berfungsi untuk menampung counter dari semua peer yang berkomunikasi. Pada program yang kami buat, Version Vector berisi atribut site id sebagai identitas peer dan counter yang bersesuaian dengan site id peer.

Struktur data dari Version Vector adalah sebagai berikut:

  private int count;
  private String siteId;

Dengan deskripsi: count adalah jumlah operasi yang sudah dilakukan oleh peer tersebut. SiteId adalah ID dari peer yang menyimpan version vector.

Deletion Buffer

DeletionBuffer digunakan sebagai tempat penyimpanan command delete yang dilakukan oleh peer lainnya. Command ini akan disimpan di dalam buffer sampai menunggu version vector yang diterima dari operasi peer lain sesuai dengan yang berada di dalam buffer. Proses ini dibuat untuk menjaga kausalitas operasi pada setiap peer.

Struktur data yang digunakan untuk deletion buffer berupa:

List<Char> deletionBuffer;

List of Character menyimpan objek Character yang harus di delete oleh setiap peer, dimana pada setiap objek karakter terdapat version vector yang memeriksa kausalitas program.

Analisis Program

Program yang kami buat sudah mengikuti konsep CRDT, yang dapat memastikan perubahan pada teks bersifat komutatif dan idempoten.

Untuk mengembangkan program agar menjadi lebih baik lagi, dapat dibuat suatu server awal yang bertujuan untuk menghubungkan jaringan antara port-port. Hal ini dapat dibuat untuk memudahkan penghubungan awal peer. Selain itu, akan lebih efisien jika dapat diimplementasikan pada platform berbasis web dengan menggunakan library-library nya sehingga maintenance program lebih mudah.

Test Case

Test Case 1. Insert Character

tc1

Test Case 2. Delete Character

tc2

Test Case 3. Insert Middle

tc3

Test Case 4. Delete Middle

tc4