Anda di halaman 1dari 34

SMS GATEWAY

By : BlackOnta

http://onta-programing.blogspot.com

Desember 2009

1 | http://onta-programing.blogspot.com/
Yang akan di bahas:

Sepintas tentang SMS Gateway


Persiapan
 Yang dibutuhkan
 Persiapan Hadware
 Persiapan Library
 Instalasi Library
 Persiapan Project

Pengembangan
1. Database
2. Project Utama

Error dan Penanganannya

Tanya Jawab

Breaktime

2 | http://onta-programing.blogspot.com/
Pembukaan

Gak usah lama-lama baca pembukaan segala langsung ke halaman


selanjutnya 

3 | http://onta-programing.blogspot.com/
SEPINTAS TENTANG SMS GATEWAY
Cari Aja yah di Google hehe

PERSIAPAN
 Yang dibutuhkan
Untuk membuat SMS Gateway ini ada beberapa hal yang harus
dipersiapka, antara lain:
Hardware:
1. Komputer (Disaran kan yang High End )
2. HP sebagai modem. Adapun spesifikasi HP yang bias digunakan
ada pada bagian akhir tutorial.
3. Konekstor Hp. Konektor digunakan untuk menghubungkan HP
dengan Komputer.

Software:
1. SUN JDK 1.5 atau yang terbaru Download aja di situsnya SUN.
2. Netbeans, saya gunakan Netbeans 6.1
3. Driver Modem/HP
4. Library-Library. Lebih detail tentang Library, akan dibahas pada sub
berikutnya.

 Persiapan Hardware
Persiapkan HP yang akan kita gunakan sebagai Modem (Jenis-jenis
HP yang bisa digunakan ada pada bagian akhir tutorial). Sambungkan
HP Ke Komputer, melalui konektor, kemudian Jika Diminta Driver
Instalkan Drivernya. Slesai.

 Persiapan Library
Kalau kita ikuti referensi dari Developer SMSLib, maka akan banyak
banget library yang kita harus persiapkan , tp tenang dengan
blackonta selalu ada jalan yang mudah untuk membuat seuatu
program , karena memang setelah beberapa kali membuat program

4 | http://onta-programing.blogspot.com/
SMS Gateway, ternyata hanya beberapa Library aja yang kita
perlukan.
Ok library-library tersebut adalah sebagai berikut:
1. SMSLib
2. Java Communications Library
3. Simple logging facade for Java (slf4j)
4. MySQL Server
5. dan untuk databasenya kita membutukkan MySQL Driver (Sudah
ada di netbeans).

 Instalasi Library
Ok, selanjutnya kita akan melakukan Konfigurasi Librari-Library diatas.
Langkah ini sangat penting untuk dillakukan dengan benar,
supaya tidak terjadi kesalahan-kesalahan yang tidak perlu.
1. Tidak Ada Perlakuan Khusus untuk SMSLib, kita tinggal Extract lalu
masukan di Project (dibahas pada bagian persiapan Project).
2. Java Communications Library
Java Communications Library terdiri dari dua library, yaitu java
comm, dan RxTx.
 Kita mulai dengan konfigurasi Java Comm, Temen-temen
bisa Download Library terbaru ini di
http://code.google.com/p/smslib/downloads/list.
Atau temen-temen bisa menggunakan yang ada dalam source
code yang disertakan di tutorial ini.
Download sesuai Sistem Operasi yang temen-temen gunakan,
karena saya menggunakan Windows maka saya mendownload
untuk yang windows. Sejanjutnya ikuti langkah2 berikut:
a. Extract File yang telah didownload. Maka temen-temen akan
melihat file file sebagai berikut (Tergantung lib yang
didownload linux or Windows):

5 | http://onta-programing.blogspot.com/
b. Perhatikan saja file file ini (Sekali lagi saya gunakan library
java comm. Untuk windows):
 File comm.jar, Copykan file ini ke
DIR_INSTALASI_JDK/jre/lib/ext/
 File javax.comm.properties, Copykan file ini ke
DIR_INSTALASI_JDK /jre/lib/
 File win32com.dll Copykan file ini ke
DIR_INSTALASI_JDK/jre/bin/

c. Selesai untuk konfigurasi java comm..


 Untuk Mendownload library RxTx temen2 bisa mampir di
http://rxtx.qbang.org/pub/rxtx/rxtx-2.1-7-bins-r2.zip. Kalau sudah
bisa ikuti langkah2 mudah berikut:
a. Extract File yang telah didownload. Maka temen-temen akan
melihat file file sebagai berikut (Tergantung lib yang
didownload linux or Windows):

6 | http://onta-programing.blogspot.com/
b. Yang akan kita gunakan hanya dua file yaitu RXTXComm,jar
dan file yang sesuai dengan Sistem Operasi Kita (Saya Pilih
Windows).
c. Copykan file RXTXComm,jar ke DIR_INSTALASI_JDK
/jre/lib/ext/
d. Copykan file rxtxParallel.dll dan rxtxSerial.dll ke
DIR_INSTALASI_JDK/jre/bin/. (rxtxParallel.dll untuk modem
parallel, dan rxtxSerial.dll untuk Modem yang Serial)
e. Selesai.

3. Simple logging facade for Java (slf4j)


Untuk Simple logging facade for Java (slf4j) juga tidak ada
perlakuan khusus hanya tinggal di extract saja, temen2 bisa
mendownload Library ini di http://www.slf4j.org/download.html,
namun ada beberapa hal yang harus diperhatikan.
a. Ketika selesai di extract, Maka kita akam mendapatkan banyak
file:

b. Wah buanyak bener ya hehe , tenang, dari file2 yang banyak


itu kita hanya memerlukan dua file koq, yaitu slf4j-api-1.5.6, dan
slf4j-simple-1.5.6. Kita tinggal masukan dua library itu ke
Project (dibahas pada bagian persiapan Project).

(Library library yang diperlukan sudah ada dalam source code)

 Persiapan Project

7 | http://onta-programing.blogspot.com/
1. Buat Sebuah Project Baru di Netbeans.
2. Masukan Library2 yang kita perlukan, caranya, dalam Tree Project
ada Folder Libray.

3. Klik Kanan, Kemudian Add Jar/Folder

4. Tambahkan Library SMSLib, dan Simple logging facade for Java


(slf4j).
5. Ingat Cuma Library SMSLib, dan Simple logging facade for Java
(slf4j). untuk Java Comm, dan RxTx nya gak usah, (Kan udah di
Copy-in ke Folder JRE).
6. Untuk Mempermudah saya sudah jadikan satu Library SMSLib, dan
Simple logging facade for Java (slf4j) yang diperlukan di folder
core_library.
7. Tambahkan juga library Mysql Connector, dengan cara Klik Kanan
Folder Library -> Add Library -> MySQL JDBC Driver.

Fyuh, Akhirnya selesai juga proses persiapan, Are You Ready to Rock?
hehehe

PENGEMBANGAN
1. Database
Banyak jalan menuju Mekah , Pembuatan database pun bisa
dilakukan dengan banyak cara. Bisa Langsung dari MySQL Console,

8 | http://onta-programing.blogspot.com/
Pake PhpMyAdmin, Pake SQLTools, Ataupun Pake Netbeans. Supaya
gak terlalu banyak tools, saya tunjukan saja pake Netbeans Aja OK.
 Pastikan dalam Kompie kita udah terinstall MySQL Server.
 Pada Bagian Kiri Atas Pilih Bagian Service

 Kemudian Pilih MsSQL (Connector/J driver) Kemudian Klik


kanan dan pilih Connect Using.

 Maka Akan Muncul Kotak Dialog Ini:

9 | http://onta-programing.blogspot.com/
 Isikan Keterangan yang dimaksud, untuk password isikan
sesuai dengan password MySQL Temen2
 Jika sudah dilakukan maka akan ada tambahan pada panel
service. Klik Kanan Kemudian pilih Connect.

 Setelah terkoneksi, Klok Kanan Kembali Kemudian Pilih


Execute Command

10 | http://onta-programing.blogspot.com/
 Setelah Itu Akan Muncul Sebuah Jendela Editor, Kemudian
Copy Patekan Kode Berikut (Atau ada dalam source Code):
CREATE DATABASE sms_center;

use sms_center;

CREATE TABLE IF NOT EXISTS `sms_masuk` (


`id_pesan` int(10) unsigned NOT NULL auto_increment,
`isi_pesan` varchar(255) NOT NULL,
`no_pengirim` varchar(15) NOT NULL,
`pdu_pesan` varchar(255) NOT NULL,
`encoding` varchar(20) NOT NULL,
`id_gateway` varchar(20) NOT NULL,
`tanggal_masuk` date NOT NULL,
PRIMARY KEY (`id_pesan`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=12
;

--
-- Dumping data for table `sms_masuk`
--

INSERT INTO `sms_masuk` (`id_pesan`, `isi_pesan`,


`no_pengirim`, `pdu_pesan`, `encoding`, `id_gateway`,
`tanggal_masuk`) VALUES
(1, 'Test pesan 1', '+0', 'D4F29C0E8297E761372806',
'ENC7BIT', 'Motorola.COM3', '2009-12-11'),
(4, 'Test pesan 2', '+0', 'D4F29C0E8297E761374806',
'ENC7BIT', 'Motorola.COM3', '2009-12-11');

 Kemudian Tekan Tombol Run SQL

11 | http://onta-programing.blogspot.com/
 Yup Database Telah Selesai Dibuat dengan nama smscenter
dan telah dibuat pula table sms_masuk.

Ok Selesai Sudah Persiapan Database, sekarang kita bisa buat Project


Utama.

Minum Dulu Kopinya, Makan Cemilannya, lalu siap membuat Project


Utamannya .

2. Project Utama
Kembali pada project yang telah kita buat pada persiapan project.
Sekarang buat buat 4 buah package, berikut package yang saya buat:
a. ovq.smsgateway.image
Package ini berfungsi untuk menampung image yang akan kita
gunakan.

b. ovq.smsgateway.obj
Package ini digunakan untuk menampung Class-Class Beans
(Class yang mempunya method setter dan getter).

c. ovq.smsgateway.service
Package ini digunakan untuk menampung Class-Class Service
SMS.

d. ovq.smsgateway.ui
Package ini digunakan untuk menampung Class-Class User
Interface.

Setelah dibuat project kita akan terlihat kurang lebih seperti ini:

12 | http://onta-programing.blogspot.com/
Ok, setelah Package kita buat, masukan image-image yang akan kita
gunakan (Ada pada Folder Image di source code).

Setelah itu buat Sebuah Class pada package ovq.smsgateway.obj,


kemudian beri nama Status. Lalu Ketikan Kode di bawah ini:
package ovq.smsgateway.obj;

/**
*
* @author taopik ridwan <blackonta@gmail.com>
*/
public class Status {
private String manufacture;
private String model;
private String serialNo;
private String simImsi;
private int signal;
private int baterai;

public int getBaterai() {


return baterai;
}

public void setBaterai(int baterai) {


this.baterai = baterai;
}

public String getManufacture() {


return manufacture;
}

public void setManufacture(String manufacture) {

13 | http://onta-programing.blogspot.com/
this.manufacture = manufacture;
}

public String getModel() {


return model;
}

public void setModel(String model) {


this.model = model;
}

public String getSerialNo() {


return serialNo;
}

public void setSerialNo(String serialNo) {


this.serialNo = serialNo;
}

public int getSignal() {


return signal;
}

public void setSignal(int signal) {


this.signal = signal;
}

public String getSimImsi() {


return simImsi;
}

public void setSimImsi(String simImsi) {


this.simImsi = simImsi;
}
}

Clas ini merupakan Beans untuk status dari HP/Modem yang kita
gunakan.

Selanjutnya buat sebuah Class pada package


ovq.smsgateway.service. Kemudian Beri nama MYSQLConnection.
Dari namanya kita bisa mengetahui bahwa fungsi dari Class ini adala
untuk membuat koneksi ke database. Kemudian Ketikan Kode berkut:
package ovq.smsgateway.service;

import java.sql.Connection;
import java.sql.DriverManager;

/**
*
* @author taopik ridwan <blackonta@gmail.com>
*/

14 | http://onta-programing.blogspot.com/
public class MYSQLConnection {
public static Connection buatKoneksi() throws Exception{
String url = "jdbc:mysql://localhost/sms_center";
String user = "root";
String pass = "*";
Connection koneksi = null;
Class.forName("com.mysql.jdbc.Driver").newInstance();
koneksi = DriverManager.getConnection(url, user, pass);

return koneksi;
}
}

Untuk username dan passwordnya sesuaikan dengan konfigurasi


MySQLnya masing2.

Setelah itu, kita buat sebuah Class yang paling penting dari
keseluruhan Program ini. Karena semua aktifitas yang berhubungan
dengan Aktifitas SMS Gateway di kerjakan Oleh Class Ini.

Buat Class pada package ovq.smsgateway.service, kemudian beri


nama SMSReadService. Kemudian Ketikan Kode Berikut:

package ovq.smsgateway.service;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.swing.JTextArea;
import org.smslib.AGateway.GatewayStatuses;
import org.smslib.AGateway.Protocols;
import org.smslib.ICallNotification;
import org.smslib.IGatewayStatusNotification;
import org.smslib.IInboundMessageNotification;
import org.smslib.InboundMessage;
import org.smslib.Message.MessageTypes;
import org.smslib.Service;
import org.smslib.modem.ModemGateway.IPProtocols;
import org.smslib.modem.SerialModemGateway;
import ovq.smsgateway.obj.Status;

/**
*
* @author taopik ridwan <blackonta@gmail.com>
*/
public class SMSReadService {
//panel status
private Status status = null;
private JTextArea textArea;

15 | http://onta-programing.blogspot.com/
Service service;
private Connection koneksi;

public SMSReadService(
Connection koneksi,
JTextArea textArea) {
this.koneksi = koneksi;
this.textArea = textArea;
}

public void setStatus(Status status) {


this.status = status;
}

public void startService() throws Exception {


PesanMasukHandler pesanMasuk =
new PesanMasukHandler();

PanggilanMasukHandler panggilanMasuk =
new PanggilanMasukHandler();

GatewayStatusHandler statusGateway =
new GatewayStatusHandler();

this.service = new Service();

SerialModemGateway gateway = new SerialModemGateway (


"Motorola.COM3", //nama GAteway
"COM3", //Port yang digunakan
57600, //baudrate
"Motorola", //merk HP
"C380");//Tipe HP

gateway.setIpProtocol(IPProtocols.BINARY);

gateway.setProtocol(Protocols.PDU);

gateway.setInbound(true);

gateway.setOutbound(true);

gateway.setSimPin("0000");

this.service.setInboundMessageNotification(pesanMasuk);
this.service.setCallNotification(panggilanMasuk);

this.service.setGatewayStatusNotification(statusGateway);

this.service.addGateway(gateway);

this.service.startService();

if(status != null ) {

this.status.setManufacture(gateway.getManufacturer());
this.status.setModel(gateway.getModel());
this.status.setSerialNo(gateway.getSerialNo());
this.status.setSimImsi(gateway.getImsi());
this.status.setSignal(gateway.getSignalLevel());

16 | http://onta-programing.blogspot.com/
this.status.setBaterai(gateway.getBatteryLevel());
}
}

class PesanMasukHandler
implements IInboundMessageNotification {

public void process(


String idGateway,
MessageTypes tipePesan,
InboundMessage pesanMasuk) {
if(tipePesan == MessageTypes.STATUSREPORT) return;

try {
String sql = "INSERT INTO sms_masuk VALUES
(NULL,?,?,?,?,?,?)";
PreparedStatement prepare =
koneksi.prepareStatement(sql);
prepare.setString(1, pesanMasuk.getText());
prepare.setString(2,
"+"+pesanMasuk.getMpRefNo());
prepare.setString(3,
pesanMasuk.getPduUserData());
prepare.setString(4,
pesanMasuk.getEncoding().name());
prepare.setString(5,
pesanMasuk.getGatewayId());
prepare.setDate(6, new
java.sql.Date(pesanMasuk.getDate().getTime()));

prepare.executeUpdate();
} catch (SQLException ex) {
System.out.println("Pesan Gagal Disimpan");
System.out.println(ex.getMessage());
}

textArea.append("\nPesan Diterima:\n"+
pesanMasuk.getSmscNumber() +"\n"+
pesanMasuk.getText());
textArea.append("\n-----------------------------");

try {
SMSReadService.this.service.deleteMessage(pesanMasu
k);
} catch (Exception e){
}
}
}

class PanggilanMasukHandler implements ICallNotification {


public void process(
String idGateway,
String noHP) {

class GatewayStatusHandler implements

17 | http://onta-programing.blogspot.com/
IGatewayStatusNotification {
public void process(
String idGateway,
GatewayStatuses statusLama,
GatewayStatuses statusBaru) {

}
}
}

Penjelasan:
Kita mulai dari Konstruktor Class SMSReadService
public SMSReadService(
Connection koneksi,
JTextArea textArea) {
this.koneksi = koneksi;
this.textArea = textArea;
}

Konstuktor dari Class SMSReadService membutuhkan dua parameter,


yaitu Connection, yang nantinya dibutuhkan ketika menyimpan SMS
kedalam Database, kemudian JTextArea, yang dibutuhkan nanti ketika
kita menampilkan Log SMS.

Kemudian Method startService().


Method ini merfungsi untuk memulai Service, sehingga program kita
akan mulai memonitor sms yang masuk.
PesanMasukHandler pesanMasuk =
new PesanMasukHandler();

PesanMasukHandler Class ini adalah Class yang nantinya di jalankan

ketika ada SMS yang masuk. Jadi jika ada pesan/SMS masuk. Maka
PesanMasukHandler akan dijalankan. Adapun isi dari Class
PesanMasukHandler adalah:
class PesanMasukHandler
implements IInboundMessageNotification {
public void process(
String idGateway,
MessageTypes tipePesan,
InboundMessage pesanMasuk) {
if(tipePesan == MessageTypes.STATUSREPORT) return;

try {
String sql = "INSERT INTO sms_masuk VALUES
(NULL,?,?,?,?,?,?)";

18 | http://onta-programing.blogspot.com/
PreparedStatement prepare =
koneksi.prepareStatement(sql);

prepare.setString(1, pesanMasuk.getText());
prepare.setString(2, "+"+pesanMasuk.getMpRefNo());
prepare.setString(3, pesanMasuk.getPduUserData());

prepare.setString(4
pesanMasuk.getEncoding().name());

prepare.setString(5, pesanMasuk.getGatewayId());

prepare.setDate(6,
new java.sql.Date(pesanMasuk.getDate().getTime()));

prepare.executeUpdate();
} catch (SQLException ex) {
System.out.println("Pesan Gagal Disimpan");
System.out.println(ex.getMessage());
}

textArea.append("\nPesan Diterima:\n"+
pesanMasuk.getSmscNumber() +"\n"+
pesanMasuk.getText());
textArea.append("\n-----------------------------");
try {
SMSReadService.this.service.deleteMessage(pesanMasuk);
} catch (Exception e){
}
}
}

Dalam kode diatas, jika ada pesan masuk maka program akan
memasukan pesan kedalam database, kemudian menampilkannya
kedalam JTextArea.

PanggilanMasukHandler panggilanMasuk =
new PanggilanMasukHandler();
GatewayStatusHandler statusGateway =
new GatewayStatusHandler();

PanggilanMasukHandler Berfungsi sebagai Class yang menangani jika

terjadi penggilan masuk pada HP/Modem yang kita gunakan.


Sedangkan GatewayStatusHandler berfungsi sebagai Class yang
menangani perubahan Status Gateway.

Dalam kode diatas Class PanggilanMasukHandler dan Class


GatewayStatusHandler sebagai berikut:

19 | http://onta-programing.blogspot.com/
class PanggilanMasukHandler implements ICallNotification {
public void process(String idGateway, String noHP) {

}
}

class GatewayStatusHandler implements


IGatewayStatusNotification {
public void process(
String idGateway,
GatewayStatuses statusLama,
GatewayStatuses statusBaru) {

}
}

Lho, Class diatas kan kosong????, yupz benar, untuk penanganan


panggulan dan perubahan gateway kita biarkan kosong, jadi ketika
terjari panggilan atau perubahan status Gateway, tidak akan ada
reaksi apa2.

this.service = new Service();

SerialModemGateway gateway = new SerialModemGateway (


"Motorola.COM3",
"COM3",
57600,
"Motorola",
"C380");

gateway.setIpProtocol(IPProtocols.BINARY);

gateway.setProtocol(Protocols.PDU);

gateway.setInbound(true);

gateway.setOutbound(true);

gateway.setSimPin("0000");

Line pertama dari kode diatas adalah kita memanggil Class Service
pada Library SMSLib, kemudian dilanjut dengan menginstansiasi
Gateway. Ada dua pilihan
 SerialModemGateway Berfungsi pada HP/Modem dengan tipe
koneksi Serial
 IPModemGateway Berfungsi pada HP/Modem dengan tipe koneksi IP

20 | http://onta-programing.blogspot.com/
Namun parameter untuk keduanya adalah sama.
Penjelasan lebih lanjut mengenai parameternya bias temen2 lihat di
postingan sebelumnya http://onta-
programing.blogspot.com/2009/08/membuat-aplikasi-sms-gateway-
sederhana.html

Kemudian Selanjutnya kita mengeset parameter-parameter pada


gateway.
gateway.setInbound(true); true jika kita ingin agar gateway
menerima pesan masuk, dan false untuk sebaliknya.
gateway.setOutbound(true); true jika kita ingin agar gateway bisa

mengirim pesan, dan false untuk sebaliknya


gateway.setSimPin("0000"); jika HP/Modem yang kita gunakan
menggunakan pin. Ganti 0000 dengan pin HP/Modem.

this.service.setInboundMessageNotification(pesanMasuk);
this.service.setCallNotification(panggilanMasuk);
this.service.setGatewayStatusNotification(statusGateway);

Mengeset Handler-Handler yang telah di instansiasi pada Service.

this.service.addGateway(gateway);
this.service.startService();

Line pertama menambahkan gateway pada service, line kedua


memulai service, sehingga program dalam keadaan Stand By untuk
menerima SMS.

Kode yang terakhir:


if (status != null ) {
this.status.setManufacture(gateway.getManufacturer());
this.status.setModel(gateway.getModel());
this.status.setSerialNo(gateway.getSerialNo());
this.status.setSimImsi(gateway.getImsi());
this.status.setSignal(gateway.getSignalLevel());
this.status.setBaterai(gateway.getBatteryLevel());
}

21 | http://onta-programing.blogspot.com/
Mengeset properties Status,

Ok, kalau ada yang masih kurang jelas bisa Tanya jawab di Blog or di
FB.

Pembuatan GUI
Dalam Tutorial Kali Ini Kita Akan membuat sebuah SMS Gateway
Control Panel sebagai berikut:

22 | http://onta-programing.blogspot.com/
Pertama Kita Akan Buat Panel Indikator/Panel Status HP/Modem.
1. Buat Sebuah Panel baru pada package ovq.smsgateway.ui.
2. Beri Nama Panel tersebut dengan nama PanelIndikator.
3. Lalu Tambahkan Komponen-komponen sehingga tampak sebagai
berikut:

4. Ubah Variable name dari label lebe yang ditandai menjadi


(Berurutan): signal, baterai, manufacture, model, serialNo, dan imsi.
5. Mengenai property yang lainnya lihat di Source code

6. Beralih Ke mode Code , kemudian tambahkan kode


berikut:
public void setStatus(Status s){
signal.setText(s.getSignal() +" % ");

23 | http://onta-programing.blogspot.com/
baterai.setText(s.getBaterai() + " %");
manufacture.setText("Modem Manufacture: "+
s.getManufacture());
model.setText("Model : "+s.getModel());
serialNo.setText("Serial No/IMEY: "+
s.getSerialNo());
imsi.setText("SIM IMSI : " + s.getSimImsi());
}

7. Done, Selsesai. Error dan penanganannya dibahas pada bagian


error dan penanganannya.

Ok, Minum lagi kopinya, makan lagi cemilannya, trus kita lanjutin .
Selanjutnya kita akan membuat Panel Status Bar.
1. Buat Sebuah Panel baru pada package ovq.smsgateway.ui.
2. Beri Nama Panel tersebut dengan nama PanelStatus.
3. Lalu Tambahkan sebuah JLabel sehingga tampak sebagai berikut

4. Beralih Ke mode Code , tambahkan variable berikut:


public static final int KONEKSI_ERROR = 0;
public static final int TERSAMBUNG = 1;
public static final int TERPUTUS = 3;

5. kemudian tambahkan kode berikut:


public void setStatusKoneksi(int status, String s){
if(status == KONEKSI_ERROR ){
jLabel1.setIcon(new ImageIcon(getClass()
.getResource("/ovq/smsgateway/image/error.png")));
jLabel1.setText(s);
}else if(status == TERSAMBUNG ){
jLabel1.setIcon(new ImageIcon(getClass()
.getResource("/ovq/smsgateway/image/mobile_phone.png")));
jLabel1.setText(s);
}else if(status == TERPUTUS ){
jLabel1.setIcon(new ImageIcon(getClass()
.getResource("/ovq/smsgateway/image/mobile_phone_off.png")));
jLabel1.setText(s);
}
}

6. Done, Selesai. Error dan penanganannya dibahas pada bagian


error dan penanganannya.

24 | http://onta-programing.blogspot.com/
Sekarang, kIta buat sebuah dialog untuk melihat pesan yang masuk.
1. Buat Seuah JDialog pada package ovq.smsgateway.ui, kemudian
beri nama JDialog tersebut dengan nama DialogPesanMasuk.
2. Ubah Layout dari JDialog tersebur menjadi BorderLayout dengan
Cara Klik Kanan Pada dialog, kemudian pilih Set Layout, dan pilih
BorderLayout.
3. Tambahkan sebuah JTable pada JDialog, ubah variable namenya
menjadi tabelPesan..

4. Beralih Ke mode Code ,


5. tambahkan Kode berikut, sebagai model untul JTable.
class TabelModel extends AbstractTableModel {
String[] kolomHeader = {
"Id SMS","SMS", "No SMS", "PDU",
"Encoding", "Id Gtateway", "Tanggal"};
Object[][] data;

public void addData(Object[][] obj){


data = obj;
fireTableDataChanged();
}

public int getRowCount() {


return data.length;
}

public int getColumnCount() {


return kolomHeader.length;

25 | http://onta-programing.blogspot.com/
}

public Object getValueAt(int rowIndex, int


columnIndex) {
return data[rowIndex][columnIndex];
}

@Override
public String getColumnName(int column) {
return kolomHeader[column];
}
}

6. Lalu tambahkan variable berikut:


public void setKoneksi(Connection koneksi){
this.koneksi = koneksi;
try {

String sql = "SELECT * FROM sms_masuk";


PreparedStatement prepare =
koneksi.prepareStatement(sql);

ResultSet res = prepare.executeQuery();


res.last();
int n = res.getRow();

Object[][] data = new Object[n][7];


int p = 0;

res.beforeFirst();

while (res.next()) {
data[p][0] = res.getInt(1);
data[p][1] = res.getString(2);
data[p][2] = res.getString(3);
data[p][3] = res.getString(4);
data[p][4] = res.getString(5);
data[p][5] = res.getString(6);
data[p][6] = res.getDate(7);
p++;
}

TabelModel model = new TabelModel();


model.addData(data);

tabelPesan.setModel(model);

//modifikasi lebar kolom

tabelPesan.getColumnModel().getColumn(0).setPreferredWidth(2
5);

tabelPesan.getColumnModel().getColumn(1).setPreferredWidth(2
55);

tabelPesan.getColumnModel().getColumn(2).setPreferredWidth(5
5);

26 | http://onta-programing.blogspot.com/
tabelPesan.getColumnModel().getColumn(3).setPreferredWidth(2
55);

tabelPesan.getColumnModel().getColumn(4).setPreferredWidth(5
5);

tabelPesan.getColumnModel().getColumn(5).setPreferredWidth(5
5);

tabelPesan.getColumnModel().getColumn(6).setPreferredWidth(5
5);
} catch (SQLException ex) {
ex.printStackTrace();
}
}

7. Selesai, Error dan penanganannya dibahas pada bagian error dan


penanganannya.

Masih tersisa kopinya minum lagi deh hehe. Ok, Sekarang kita akan
membuat GUI Utama.
1. Buat sebuah JFrame pada package ovq.smsgateway.ui, kemudian
beri nama JFrame tersebut dengan nama SMSGatewayView.
2. Kemudian Drag PanelStatus dan PanelIndikator yang telah kita
buat sebelumnya ke JFrame.
3. Jika temen2 mendapatkan pesan seperti ini saat men-drag
PanelStatus dan PanelIndikator,

4. Maka Lakukan Compile. Caranya Klik Kanan Pada Project,


kemudian pilih Clean and Build

27 | http://onta-programing.blogspot.com/
5. Nah Sekarang Coba lagi lakukan langkah 2.

6. Kemudian tambahkan tiga buah JButton, dan Satu Buah


JTextArea, untuk membuat lebih enak dilihat, tambahkan pula
Sebuah JLabel Sebagai Header. Atur sehingga Frame tampak
seperti berikut:

28 | http://onta-programing.blogspot.com/
7. Rubah Variable Name dari Button menjadi buttonStart,
buttonLihatPesan, buttonKeluar, dan JTextArea menjadi logSMS.
8. Kemudian Tambahkan Action Performed pada buttonStart:
try{
koneksi = MYSQLConnection.buatKoneksi();
}catch(Exception e){
panelStatus1.setStatusKoneksi(
PanelStatus.KONEKSI_ERROR,
"Error saat Koneksi ke database");
return;
}

if(koneksi == null){
return;
}

SMSReadService smsService = new SMSReadService(koneksi,


logArea);
smsService.setStatus(status);
try {
smsService.startService
panelIndikator1.setStatus(status);
panelStatus1.setStatusKoneksi(
PanelStatus.TERSAMBUNG,
"Service tersedia");
} catch (Exception ex) {
panelStatus1.setStatusKoneksi(
PanelStatus.TERSAMBUNG,
"Erros saat mulai Service");
}

9. Kemudian Tambahkan Action Performed pada buttonKeluar:


System.exit(0);

29 | http://onta-programing.blogspot.com/
10. Kemudian Tambahkan Action Performed pada buttonLihatPesat:
if(koneksi == null ){
JOptionPane.showMessageDialog(this, "Start Service
terlebih dahulu!!");
return;
}
DialogPesanMasuk dlgPesan = new DialogPesanMasuk(this,
true);
dlgPesan.setKoneksi(koneksi);
dlgPesan.setVisible(true);

11. Selesai. Error dan penanganannya dibahas pada bagian error dan
penanganannya.
Sampai tahap ini program kita sudah jadi. Dan kalau tidak ada eeror,
maka kita bisa compile dan run.

Screenshoot

Sebelum Service di Start

30 | http://onta-programing.blogspot.com/
Setelah Service di Start

Jika melihat Pesan masuk Namun Service belum dilakukan start

Dialog Pesan Masuk

31 | http://onta-programing.blogspot.com/
Error dan Penanganannya
Error yang mungkin terjadi dalam mengikuti turoal ini adalah sebagai
berikut:
1. Kalau diikuti dengan baik insya Allah gak ada Error, hehe
2. Kalau Masih ada Error, silahkan Komentar di Blog or do FB.

Tanya Jawab
Tanya jawabnya di Bolg aja ya ato di FB

-----------------------
Huhuy kuta sekarang punya aplikasi SMS Gateway Sendiri, Selamat
Berjuang, and Keep Moving Forward. Tp Sebelum Ditutup Gak salah Kalo
Baca dulu Breaktime nya, hehe

32 | http://onta-programing.blogspot.com/
Breaktime
Berikut ini daftar Pay Per Click Artinya Sekali Klik Dapat Uang,
Caranya gampang tinggal klik disini
http://www.neobux.com/?r=blackonta

Isikan keterangan yang diminta, kemudian Verifikasei keanggotaan


temen2. Kemudian Login dan Klik Ads Surf, trus tingal Klik Deh, tunggu 30
dtk dan walahhhhh anda mendapatkan 0.01 Dolar.

Tp kalau nanti temen2 punya referral, dan referalnya itu ngklik iklan, maka
temen2 juga dapat bagian, gampangkan??? Sok atuh di klik aja linknya
http://www.neobux.com/?r=blackonta

Yang ini juga sama Cuma yang ini versi Indonesia


https://www.idr-clickit.com/register.php/blackonta.html

Okede, Caranya sama, klo diminta no rekening bank, isikan aja angka
sembarang Ok, sok Diklik Juga yang ini https://www.idr-
clickit.com/register.php/blackonta.html

33 | http://onta-programing.blogspot.com/
Daftar HP Yang bisa digunakan
 Billionton: PCMCIA PCGPRSQ-B.
 EagleTec: GSM modems.
 Fargo Maestro 20.
 ITengo: 3000, WM1080A.
 Janus: GSM864Q.
 Nokia: 6070, 6100, 6210, 6310, 6310i, 6230, 6230i, 6681, 8250, 8310, 6610, 6800, 7210,
6810, 7250i, 6103, 6020, 3220, 6822, 5140, 5140i, 30 (terminal).
 Multitech: Multimodem GPRS (SMSLib for Java can also drive the Multitech Multimodem via
its IP port).
 Sharp: GX30, GX32.
 Siemens: MC35i, M35, M50, M65, C45, TC35i, C65, M55, TC65t.
 SIMCOM Ltd: SIMCOM_SIM100S.
 Sony Ericsson: K300i, SE K800i, K700i, K750i, SE W850i, W880i, GC89, Z550a, W800, W580i,
W810, i320, GT48.
 Ubinetics: GDC201.
 Wavecom: M1206B, M1306B, WMOD2 Wismo, Fastrack Supreme 10, WISMOQCDMA CDMA.
 Huawei: E220 (may require the forced setting of SMSC address).
 Motorola: V3, C380.
 Teltonika: ModemUSB.
 Samsung: D520.

34 | http://onta-programing.blogspot.com/