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

Sms Gateway

  • Upload
    bhism4

  • View
    35

  • Download
    0

Embed Size (px)

DESCRIPTION

sms gateway

Citation preview

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

    SMS GATEWAY

    By : BlackOnta

    http://onta-programing.blogspot.com

    Desember 2009

  • 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

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

    Pembukaan

    Gak usah lama-lama baca pembukaan segala langsung ke halaman

    selanjutnya

  • 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

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

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

  • 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

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

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

  • 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

  • 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

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

  • 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

    */

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

  • 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

    */

  • 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

    */

    public class SMSReadService {

    //panel status

    private Status status = null;

    private JTextArea textArea;

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

  • 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

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

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

  • 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

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

    }

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

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

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

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

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

  • 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

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

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

  • 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

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

    Setelah Service di Start

    Jika melihat Pesan masuk Namun Service belum dilakukan start

    Dialog Pesan Masuk

  • 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

  • 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

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