sms gateway

34
1 | http://onta-programing.blogspot.com/ SMS GATEWAY By : BlackOnta http://onta-programing.blogspot.com Desember 2009

Upload: ilham

Post on 23-Jun-2015

422 views

Category:

Documents


8 download

TRANSCRIPT

Page 1: Sms Gateway

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

SMS GATEWAY

By : BlackOnta

http://onta-programing.blogspot.com

Desember 2009

Page 2: Sms Gateway

2 | 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

Page 3: Sms Gateway

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

Pembukaan

Gak usah lama-lama baca pembukaan segala langsung ke halaman

selanjutnya

Page 4: Sms Gateway

4 | 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

Page 5: Sms Gateway

5 | 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):

Page 6: Sms Gateway

6 | 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):

Page 7: Sms Gateway

7 | 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

Page 8: Sms Gateway

8 | 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,

Page 9: Sms Gateway

9 | 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:

Page 10: Sms Gateway

10 | 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

Page 11: Sms Gateway

11 | 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

Page 12: Sms Gateway

12 | 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:

Page 13: Sms Gateway

13 | 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 <[email protected]>

*/

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) {

Page 14: Sms Gateway

14 | 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 <[email protected]>

*/

Page 15: Sms Gateway

15 | 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 <[email protected]>

*/

public class SMSReadService {

//panel status

private Status status = null;

private JTextArea textArea;

Page 16: Sms Gateway

16 | 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());

Page 17: Sms Gateway

17 | 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

Page 18: Sms Gateway

18 | 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,?,?,?,?,?,?)";

Page 19: Sms Gateway

19 | 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:

Page 20: Sms Gateway

20 | 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

Page 21: Sms Gateway

21 | 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());

}

Page 22: Sms Gateway

22 | 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:

Page 23: Sms Gateway

23 | 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() +" % ");

Page 24: Sms Gateway

24 | 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.

Page 25: Sms Gateway

25 | 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;

Page 26: Sms Gateway

26 | 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);

Page 27: Sms Gateway

27 | 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

Page 28: Sms Gateway

28 | 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:

Page 29: Sms Gateway

29 | 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);

Page 30: Sms Gateway

30 | 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

Page 31: Sms Gateway

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

Setelah Service di Start

Jika melihat Pesan masuk Namun Service belum dilakukan start

Dialog Pesan Masuk

Page 32: Sms Gateway

32 | 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

Page 33: Sms Gateway

33 | 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

Page 34: Sms Gateway

34 | 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.