By : BlackOnta
http://onta-programing.blogspot.com
Desember 2009
1 | http://onta-programing.blogspot.com/
Yang dibutuhkan
Persiapan Hadware
Persiapan Library
Instalasi Library
Persiapan Project
Pengembangan
1. Database
2. Project Utama
Tanya Jawab
Breaktime
2 | http://onta-programing.blogspot.com/
Pembukaan
3 | http://onta-programing.blogspot.com/
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/
Instalasi Library
Ok, selanjutnya kita akan melakukan Konfigurasi Librari-Library diatas.
Langkah ini
sangat penting
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/
6 | http://onta-programing.blogspot.com/
ke DIR_INSTALASI_JDK
/jre/lib/ext/
d. Copykan
file
rxtxParallel.dll
dan
rxtxSerial.dll
ke
Persiapan Project
7 | http://onta-programing.blogspot.com/
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/
9 | http://onta-programing.blogspot.com/
10 | http://onta-programing.blogspot.com/
(`id_pesan`)
INTO
`no_pengirim`,
`sms_masuk`
`pdu_pesan`,
(`id_pesan`,
`isi_pesan`,
`encoding`,
`id_gateway`,
`tanggal_masuk`) VALUES
(1,
'Test
pesan
1',
'+0',
'D4F29C0E8297E761372806',
'Test
pesan
2',
'+0',
'D4F29C0E8297E761374806',
11 | http://onta-programing.blogspot.com/
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).
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
14 | http://onta-programing.blogspot.com/
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.
java.sql.Connection;
java.sql.PreparedStatement;
java.sql.SQLException;
javax.swing.JTextArea;
org.smslib.AGateway.GatewayStatuses;
org.smslib.AGateway.Protocols;
org.smslib.ICallNotification;
org.smslib.IGatewayStatusNotification;
org.smslib.IInboundMessageNotification;
org.smslib.InboundMessage;
org.smslib.Message.MessageTypes;
org.smslib.Service;
org.smslib.modem.ModemGateway.IPProtocols;
org.smslib.modem.SerialModemGateway;
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;
}
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
(NULL,?,?,?,?,?,?)";
"INSERT
18 | http://onta-programing.blogspot.com/
INTO
sms_masuk
VALUES
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();
Dalam
kode
diatas
Class
PanggilanMasukHandler
19 | http://onta-programing.blogspot.com/
dan
Class
Line pertama dari kode diatas adalah kita memanggil Class Service
pada Library SMSLib, kemudian dilanjut dengan menginstansiasi
Gateway. Ada dua pilihan
SerialModemGateway
koneksi Serial
20 | http://onta-programing.blogspot.com/
sebelumnya
http://onta-
programing.blogspot.com/2009/08/membuat-aplikasi-sms-gatewaysederhana.html
true
jika
kita
ingin
agar
gateway
21 | http://onta-programing.blogspot.com/
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/
berikut:
public void setStatus(Status s){
signal.setText(s.getSignal() +" % ");
23 | 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..
25 | http://onta-programing.blogspot.com/
}
public
Object
getValueAt(int
rowIndex,
columnIndex) {
return data[rowIndex][columnIndex];
}
int
@Override
public String getColumnName(int column) {
return kolomHeader[column];
}
}
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();
}
}
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,
27 | http://onta-programing.blogspot.com/
6. Kemudian
tambahkan
tiga
buah
JButton,
dan
Satu
Buah
28 | http://onta-programing.blogspot.com/
7. Rubah
Variable
Name
dari
Button
menjadi
buttonStart,
29 | http://onta-programing.blogspot.com/
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
30 | http://onta-programing.blogspot.com/
31 | http://onta-programing.blogspot.com/
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
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
Okede, Caranya sama, klo diminta no rekening bank, isikan aja angka
sembarang Ok, sok Diklik Juga yang ini https://www.idrclickit.com/register.php/blackonta.html
33 | http://onta-programing.blogspot.com/
34 | http://onta-programing.blogspot.com/