• Tidak ada hasil yang ditemukan

* * * * * * * RMI

Gambar 4.3 Diagram kelas KPU

4.2 Cara kerja aplikasi

Cara kerja sistem ini pada saat pemilih memberikan NIM kepada operator maka operator akan mengecek NIM dimana sistem akan mengget NIM dan status pemilih dari database. jika status false maka pemilih dinyatakan belum menggunakan hak pilih akan tetapi jika bernilai true maka pemilih sudah menggunakan hak pilih. setelah itu operator akan membuka bilik suara yaitu dengan menampilkan halaman pemilih pada bilik dengan menggunakan remote rmi dimana sistem akan mengecek terlebih dahulu apakah UI pemilih pada bilik

masih tampil atau tidak jika masih tampil maka akan muncul pesan bilik sedang digunakan bila tidak maka bilik akan terbuka dan pemilih dapat menggunakan hak pilihnya di bilik tersebut. untuk selengkapnya proses cara kerja aplikasi adalah sebagai berikut.

4.2.1 Server Pemilu

4.2.1.1 HalamanAwal.java

Pada awal aplikasi server di run maka yang pertama kali dijalankan adalah kelas Halaman awal, halaman ini berfungsi untuk menampilkan UI Halaman Utama Server yang berisi tombol setup database dan tombol aktifkan server.

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {

new SettingDB().setVisible(true); this.dispose();

}

listing program diatas akan mengaktifkan kelas SettingDB.java ketika tombol tersebut diklik

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { new ServeruI().setVisible(true);

this.dispose(); }

listing program diatas akan mengaktifkan kelas Serverui.java ketika tombol tersebut diklik.

4.2.1.2 SettingDB.java

Ketika tombol setup databasediklik maka akan dilakukan eksekusi pada program ini.

public class SettingDB extends javax.swing.JFrame { SetupDatabase setup=new SetupDatabase(); public SettingDB() {

initComponents();

Object obj = new tools1().StreamToObyek(); if (obj != null) {

setup = (SetupDatabase) obj;

jTextField1.setText(setup.getUsername()); jPasswordField1.setText(setup.getPassword()); }

}

Listing program diatas untuk akan mengecek apakan sudah ada simpanan data settingDB.ser, jika ya maka akan diambil datanya menggunakan kelas tools1.java lalu data tersebut akan digunakan untuk mengisi kolom textfield pada UI SettingDB.java

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { setup.setUsername(jTextField1.getText());

setup.setPassword(jPasswordField1.getText()); boolean DBKonek = false;

if (new tools1().ObyekTostream(setup)) { try {

Connection con = (Connection) Koneksi.getInstance().getKoneksi(); DBKonek = true;

jLabel4.setText("Koneksi Sukses"); jLabel4.setForeground(Color.GREEN);

JOptionPane.showMessageDialog(this, "Data Berhasil Disimpan"); this.dispose();

new HalamanAwal().setVisible(true); } catch (SQLException ex) {

jLabel4.setText("Gagal Tersambung ke DATABASE"); jLabel4.setForeground(Color.red);

Logger.getLogger(SettingDB.class.getName()).log(Level.SEVERE, null, ex);

} } else {

JOptionPane.showMessageDialog(this, "Data GAGAL Disimpan"); }

listing program diatas untuk meng get username dan password yang diisikan user dikolom textfield lalu memasukkannya kedalam obyek setup, setelah itu akan disimpan distream menggunakan kelas tools jika tidak berhasil maka akan muncul pesan error, jika berhasil maka akan dicek apakah bisa terkoneksi kedalam database, jika tidak akan muncul pesan tidak berhasil tersambung kedatabase, jika berhasil akan muncul pesan koneksi sukses.

4.2.1.3 ServerUi.java

Kelas merupakan kelas untuk menampilkan settingan IP server pemilu yang akan digunakan untuk menghubungkan dengan client.

public class ServeruI extends javax.swing.JFrame { ServerPemiluImplement remote; String ip; public ServeruI() { initComponents(); try { IP = Inet4Address.getLocalHost().getHostAddress(); } catch (UnknownHostException ex) {

Logger.getLogger(ServeruI.class.getName()).log(Level.SEVERE, null, ex);

}

jTextField1.setText(ip); }

Listing diatas digunakan untuk mengambil alamat IP pada komputer yang tersambung ke lan untuk ditampilkan pada kolom textfield.

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { try {

if (remote.start(jTextField1.getText())) {

jLabel4.setText("Server Aktif \n IP Server= " + jTextField1.getText()); jButton1.setEnabled(false);

jTextField1.setEnabled(false); }

} catch (RemoteException ex) {

setLabelKoneksi("Server Disconected");

Logger.getLogger(ServeruI.class.getName()).log(Level.SEVERE, null, ex);

} }

Listing diatas akan membuat objek remote dari kelas serverPemiluImplements.java yang akan digunakan untuk mengaktifkan server, jika server berhasil naik maka akan muncul pesan server aktif berikut alamat IP yang digunakan server untuk tersambung. jika server tidak berhasil naik maka akan muncul pesan server disconected.

4.2.1.4 ServerPemiluImplements.java

Pada saat tombol konek pada serverUi.java diklik maka kelas ini akan dijalankan.

ServerPemiluImplement(ServeruI aThis) throws RemoteException { super();

this.ui=aThis; }

String ipserv; Registry Server;

public boolean start(String ip) { boolean result= false;

try { Server = LocateRegistry.createRegistry(1099); Naming.rebind("//" + IP + ":1099/PemiluUSD", ServerPemiluImplement.this); System.out.println("Server waiting..."); ipserv=ip;

result=true;

} catch (java.net.MalformedURLException me) { result=false;

ui.setLabelKoneksi("Server Disconected");

System.out.println("Malformed URL: " + me.toString()); } catch (RemoteException re) {

result=false;

ui.setLabelKoneksi("Server Disconected");

System.out.println("Remote exception: " + re.toString()); }

return result; }

Listing program diatas untuk mengaktifkann server RMI pemilu sehingga dapat diakses client RMI pada IP yang telah diisikan di kelas

serverUi.java listing program Server =

LocateRegistry.createRegistry(1099); digunakan untuk mendaftarkan

keregistry bahwa port 1099 digunakan untuk server RMI pemilu BEMU. Listing program Naming.rebind("//" + IP + ":1099/PemiluUSD",

ServerPemiluImplement.this); digunakan untuk membuat alamat koneksi

dimana IP adalah IP server yang terhubung ke client melalui jaringan, alamat ini berfungsi sebagai url oleh client yang akan berkomunikasi dengan server. jika server gagal naik maka akan muncul pesan error server disconected dan result bernilai false, jika server berhasil naik maka result akan bernilai true.

4.2.2 Operator

4.2.2.1 Ceknim.java

Dihalaman utama operator terdapat cek pemilih dimana fungsi ini digunakan mencari dan mengecek pemilih yang akan menggunakan hak suara.

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { remote.konek(setting.getipSErver());

if (remote.CekdataPemilih(jTextField1.getText())) {

Pemilih = remote.getDataPemilihDarinim(jTextField1.getText()); bilik = new Bilik(Pemilih, Operator, Ceknim.this);

bilik.setVisible(true); this.dispose(); } else {

JOptionPane.showMessageDialog(rootPane, "Maaf Anda Tidak Terdaftar Atau Hak pilih Anda Sudah Digunakan");

} }

Listing program diatas digunakan terdapat remote.konek(setting.getiserver); perintah ini digunakan untuk merujuk method konek yang berada pada objek remoteuntuk membuat koneksi keserver pemilu.

4.2.2.2 RemoteServerUtama.java

public boolean konek(String ip) { boolean result = false; String value = null; try {

System.out.println("Security Manager loaded"); String url = "//" + IP + ":1099/PemiluUSD";

remoteObject = (ServerEpemilu) Naming.lookup(url); System.out.println("Got remote object");

System.out.println("res=" + result); } catch (NotBoundException ex) { new Setting().setVisible(true);

Logger.getLogger(remoteServerUtama.class.getName()).log(Level.SEVERE, null, ex);

} catch (MalformedURLException ex) { new Setting().setVisible(true);

Logger.getLogger(remoteServerUtama.class.getName()).log(Level.SEVERE, null, ex);

} catch (RemoteException ex) { new Setting().setVisible(true); Logger.getLogger(remoteServerUtama.class.getName()).log(Level.SEVERE, null, ex); } return result; }

Listing diatas berada pada kelas remoteServerUtama yang bertugas untuk membuat koneksike serverPemillu jika koneksi sukses maka return akan bernilai true, jika tidak akan bernilai false. setelah terkoneksi maka remote.cekdatapemilih bernilai true berarti pemilih terdaftar dan belum menggunakan hak pilih maka halaman buka bilik suara akan terbuka. jika tidak maka akan muncul pesan maaf anda tidak terdaftar atau hak pilih telah digunakan.

4.2.2.3 Bilik.java

private void OkBilik1ActionPerformed(java.awt.event.ActionEvent evt) {

remoteUtama.konek(setting.getipSErver());

String jumlahKandidat = remoteUtama.GetjumlahKandidat(); if (remoteUtama.cekwaktuMulai() > 0) { if (remoteUtama.cekwaktuSelesai() < 0) { remote.konek(setting.getArrayip()[jComboBox1.getSelectedIndex()]); if (!remote.CekBilik(jumlahKandidat)) { if (remote.OpenUI(Pemilih, setting.getIDTPS(), jumlahKandidat)) {

JOptionPane.showMessageDialog(null, "Bilik Berhasil DIbuka");

GuiCeknim.clear_field(); GuiCeknim.setVisible(true); this.dispose();

} else {

JOptionPane.showMessageDialog(null, "Bilik Gagal Dibuka");

this.dispose(); }

} else {

JOptionPane.showMessageDialog(null, jComboBox1.getSelectedItem().toString() + " Sedang Digunakan");

}

} else {

JOptionPane.showMessageDialog(null, "Waktu Pemilihan Sudah Selesai");

this.dispose(); }

} else {

JOptionPane.showMessageDialog(null, "Waktu Pemilihan Belum Dimulai");

this.dispose(); }

Listing diatas merupakan isi dari tombol ok pada halaman buka bilik yang berfungsi untuk mengecek bilik suara apakah sedang digunakan atau tidak dan membuka bilik suara. jika sedang digunakan akan muncul pesan bilik sedang digunakan, jika gagal dibuka karena koneksi putus atau hal lainnya maka akan muncul pesan bilik gagal dibuka, jika waktu

pemungutan suara telah selesai akan muncul pesan waktu pemilihan sudah selesai. jika berhasil dibuka maka akan muncul pesan bilik berhasil dibuka.

4.2.3 Pemilih

4.2.3.1 SetupBilik.java

Saat aplikasi pemilih di run maka yang pertama kali dijalankan adalah kelas setupbilik ini merupakan UI yang berisi settingan pemilih.

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

boolean Bilikserver = false; boolean Serversuara = false; boolean Printer;

SampleServerImplement serv = null; Serversuara = new

remoteServerUtama().konek(jTextField2.getText()); Printer = new

cetakPrinter().Cetak(jComboBox1.getSelectedItem().toString(), " TEST PRINTER \n =========================\n SUKSES \n

==========================\n Printer Ini digunakan\n Untuk Mencetak Suara");

if (Serversuara) {

jLabel4.setForeground(Color.BLACK); if (Printer) {

jLabel3.setForeground(Color.BLACK); set = new Setup();

set.setipBilik(jTextField1.getText()); set.setipserrverUtama(jTextField2.getText()); set.setNamaPRinter(jComboBox1.getSelectedItem().toString()); if (new tools().ObyekTostream(set)) { try {

serv = new SampleServerImplement(set); Bilikserver = serv.start(jTextField1.getText()); } catch (RemoteException ex) {

Logger.getLogger(SetupBilik.class.getName()).log(Level.SEVERE, null, ex); } if (Bilikserver) { new PemilihAktif(set,serv).setVisible(true); this.dispose(); } else { jLabel2.setForeground(Color.red); JOptionPane.showMessageDialog(rootPane, "ERROR: IP Bilik Suara salah");

} } else {

JOptionPane.showMessageDialog(rootPane, "ERROR :Tidak Dapat Menyimpan Data"); }

} else {

jLabel3.setForeground(Color.red);

JOptionPane.showMessageDialog(rootPane, "ERROR: Printer Tidak Dapat Mencetak Data"); }

} else {

jLabel4.setForeground(Color.red);

JOptionPane.showMessageDialog(rootPane, "ERROR: IP Server Pemilu salah");

}

Listing program diatas akan mengecek Printer, koneksi ke server utama, menaikkan server bilik yang akan diremote dari operator dan menyimpan semua settingan. jika salah menginputkan IP bilik suara maka akan muncul pesan Error:ip bilik suara salah, jika data tidak dapat tersimpan maka kan muncul pesan Error:tidak dapat menyimpan data jika semua sukses maka akan muncul pesan bilik aktif, jika semua sukses maka printer akan mencetak test printer dan akan muncul pesan bilik suara aktif.

4.2.4 KPU

4.2.4.1 HalamanVote.java

Untuk menampilkan hasil vote maka kelas yang dijalankan pertama adalah HasilVote.java, saat dijalankan pertama kali akan menjalankan konstruktor dengan listing program

HasilVote2(panitia KPU) { initComponents(); this.setLocationRelativeTo(this); this.Pemilih = Pemilih; this.KPU = KPU; remote.konek(); listKandidat = remote.GetDataKandidat(); setFoto(); setlablNilai(); }

pada listing diatas terdapat perintah listKandidat =

remote.GetDataKandidat(); yang akan mengget semua data

kandidat termasuk termasuk skor kandidat dari serverpemilu. setelah data didapet maka akan ditampilkan dengan perintah

setFoto(); untuk menampilkan foto kandidat dan setlablNilai(); untuk menapilkan skor kandidat.

4.2.4.2 RemoteServerUtama.java

Kelas ini Merupakan kelas kontroleryang menghubungkan antara kelas UI dengan kelas ServerPemilu.java yang terhubung dengan server pemilu. Pada saat menampilkan skor kandidat maka yang akan digunakan adalah listing program:

public ArrayList<kandidat> GetDataKandidat() {

ArrayList<kandidat> result = new ArrayList<kandidat>(); try {

byte[] byte1 = remoteObject.GetDataKandidat(); try {

result = (ArrayList<kandidat>) tools.toObject(byte1); } catch (IOException ex) {

Logger.getLogger(remoteServerUtama.class.getName()).log(Level.SEVE RE, null, ex);

} catch (ClassNotFoundException ex) {

Logger.getLogger(remoteServerUtama.class.getName()).log(Level.SEVE RE, null, ex);

}

} catch (RemoteException ex) {

Logger.getLogger(remoteServerUtama.class.getName()).log(Level.SEVE RE, null, ex);

}

return result; }

Pada kelas diatas terdapat perintah byte[] byte1 = remoteObject.GetDataKandidat(); perintah ini akan mengambil data kandidat beserta skor dari server melalui rmi, karena jaringan tidak dapat mengirim data dalam satu blok objek maka objek dikirim dalam bentuk array byte. setelah itu array byte akan dikonversi menjadi arraylist kandidat yang akan ditampilkan di UI halaman vote.

Dokumen terkait