Skip to content

Instantly share code, notes, and snippets.

@nugraha16
Created June 6, 2012 07:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nugraha16/2880519 to your computer and use it in GitHub Desktop.
Save nugraha16/2880519 to your computer and use it in GitHub Desktop.
Hospitalization Information System applications with the SMS Gateway
package newbieilmu.rawatinap;
import javax.swing.*;
import javax.comm.*;
import java.net.*;
import java.io.*;
import java.util.*;
import java.util.regex.Pattern;
import java.sql.*;
import java.awt.*;
import java.awt.event.*;
import com.jtattoo.plaf.mcwin.McWinLookAndFeel;
public class Broadcast extends JFrame implements ActionListener{
Koneksi objKoneksi = new Koneksi();
Connection con ;
Statement state;
ResultSet rs;
String sql;
private Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
//private JLabel lblPasien = new JLabel("Nama");
//private JTextField txtPasien = new JTextField("");
private JLabel lblNoTelp = new JLabel("To");
private JTextField txtNoTelp = new JTextField("");
private JLabel lbltxAPesan = new JLabel("Message text");
private JTextArea txAPesan = new JTextArea("");
private JButton btnKirim = new JButton("Kirim",new ImageIcon("src/newbieilmu/rawatinap/image/kirim.jpeg"));
private JButton btnKeluar = new JButton("Keluar",new ImageIcon("src/newbieilmu/rawatinap/image/close.jpeg"));
private JButton btnBersih = new JButton("Bersih",new ImageIcon("src/newbieilmu/rawatinap/image/clear.jpg"));
public Broadcast(){
super("Broadcast");
setLocation(d.height/2-getHeight()/2,d.width/2-getWidth()/2);
setIconImage(getToolkit().getImage("src/newbieilmu/rawatinap/image/kurir.jpeg"));
setSize(500,300);
setVisible(true);
getContentPane().setLayout(null);
//getContentPane().add(lblPasien);
//getContentPane().add(txtPasien);
getContentPane().add(lblNoTelp);
getContentPane().add(txtNoTelp);
getContentPane().add(lbltxAPesan);
getContentPane().add(txAPesan);
getContentPane().add(btnKirim);
getContentPane().add(btnKeluar);
getContentPane().add(btnBersih);
//lblPasien.setBounds(10,10, 120,20);
//txtPasien.setBounds(120, 10, 200,20);
lblNoTelp.setBounds(10,40, 120,20);
txtNoTelp.setBounds(120, 40, 200,20);
lbltxAPesan.setBounds(10,80, 120,20);
txAPesan.setBounds(120, 80, 300, 100);
btnKirim.setBounds(120, 200, 120,25);
btnKeluar.setBounds(260, 200, 120,25);
btnBersih.setBounds(120, 230, 120,25);
//txtPasien.addActionListener(this);
txtNoTelp.addActionListener(this);
btnKirim.addActionListener(this);
btnKeluar.addActionListener(this);
btnBersih.addActionListener(this);
}
InputStream input;
OutputStream output;
private void kirimAT(String atCmd, int delay) {
Boolean tungguDelay = new Boolean(true);
boolean getDelay = false;
// Membuat antrian proses
synchronized (tungguDelay) {
try
{
// Menulis AT Commmand
output.write( (atCmd).getBytes());
output.flush();// Hapus OutputStream
} //Akhir Try
catch (IOException e) {
System.out.println (e.getMessage());
}
try
{
tungguDelay.wait(delay);
} // Akhir try
catch (InterruptedException ie)
{
System.out.println (ie.getMessage());
getDelay = true;
} // Akhir catch
} // Akhir syncronized
}
private static StringBuffer pesanPDUKirim = null;
private static int panjangNotlpTujuan= 0;
private static int panjangPesanKirim = 0;
private static String PduPesan = null;
private static int panjangKarakter= 0;
private static StringBuffer stringBuffer = null;
private static String balikKarakter(String karakter) {
panjangKarakter = karakter.length();
stringBuffer = new StringBuffer(panjangKarakter);
for (int i = 0; (i + 1) < panjangKarakter; i = i + 2) {
stringBuffer.append(karakter.charAt(i + 1));
stringBuffer.append(karakter.charAt(i));
}
return new String(stringBuffer);
}
private static char[] hexa;
private static char[] karakter;
private static String PduKirimSms(String notlp, String pesan) {
pesanPDUKirim = new StringBuffer(320); // 320 = 160 * 2 (panjang max)
// Tambahkan nilai PDU Type ---> Default = 11
pesanPDUKirim.append("11");
// Tambahkan nilai MR ---> Default = 00
pesanPDUKirim.append("00");
// Tambahkan nilai panjang nomor pengirim
panjangNotlpTujuan = notlp.length();
pesanPDUKirim.append(rubahKeHexa(panjangNotlpTujuan));
// Tambah nilai format no. telepon --> format internasional = 91
pesanPDUKirim.append("91");
// Tambahkan nilai nomor telepon pengirim
// Jika panjang notlp adalah ganjil
if ( (notlp.length() % 2) == 1) {
notlp = balikKarakter(notlp + "F");
}
// Jika panjang notlp adalah genap
else {
notlp = balikKarakter(notlp);
}
pesanPDUKirim.append(notlp);
// tambahkan nilai PID ---> Default = 00
pesanPDUKirim.append("00");
// tambahkan nilai DCS ---> Default = 00
pesanPDUKirim.append("00");
// tambahkan nilai VP = 4 hari ---> AA h
pesanPDUKirim.append("AA");
panjangPesanKirim = pesan.length();
PduPesan = tujuhKeDelapanBit(pesan);
System.out.println ("pesan "+pesan);
System.out.println ("PDU Pesan "+PduPesan);
pesanPDUKirim.append(rubahKeHexa(panjangPesanKirim));
pesanPDUKirim.append(PduPesan);
return new String(pesanPDUKirim);
}
private static String rubahKeHexa(int a) {
char[] hexa = {
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D',
'E', 'F'};
karakter = new char[2];
// Mengambil hanya 8 bit 255d = 11111111 b
a = a & 255;
// hasil pembagian dengan 16
karakter[0] = hexa[a / 16];
System.out.println ("karakter "+karakter[0]);
// sisa hasil pembagian dengan 16
karakter[1] = hexa[a % 16];
System.out.println ("karakter "+karakter[1]);
return new String(karakter);
}
private static char[] asciiToGsmMap;
private static String tujuhKeDelapanBit(String pesan) {
StringBuffer msg = new StringBuffer(pesan);
StringBuffer encmsg = new StringBuffer(2 * 160);
int bb = 0, bblen = 0, i;
char o = 0, c = 0, tc;
for (i = 0; i < msg.length() || bblen >= 8; i++) {
if (i < msg.length()) {
c = msg.charAt(i);
System.out.println ("asciiToGsmMap "+asciiToGsmMap[c]);
tc = asciiToGsmMap[c];
c = tc;
System.out.println ("c= ");
c &= ~ (1 << 7);
// System.out.println ("1<<7 "+1<<7);
System.out.println ("c= "+c);
bb |= (c << bblen);
bblen += 7;
}
while (bblen >= 8) {
o = (char) (bb & 255);
encmsg.append(rubahKeHexa(o));
bb >>>= 8;
bblen -= 8;
}
}
if ( (bblen > 0)) {
encmsg.append(rubahKeHexa(bb));
}
return encmsg.toString();
}
private static char[] gsmToAsciiMap; // GSM ==> ASCII
static {
final int lastindex = 255;
gsmToAsciiMap = new char[lastindex + 1];
asciiToGsmMap = new char[lastindex + 1];
int i;
for (i = 0; i <= lastindex; i++) {
gsmToAsciiMap[i] = asciiToGsmMap[i] = (char) i;
}
}
private void prosesKirimSms(String notlp, String pesan) {
//if(cekNomor()) {
try {
// Merubah pesan menjadi Format PDU (Protocol Data Unit)
String pesanPDUKirim = PduKirimSms(notlp.trim(), pesan.trim());
System.out.println ("Pesan dikirim : "+pesanPDUKirim);
// Proses Mengirim Pesan
kirimAT("AT+CMGS=" + (pesanPDUKirim.length() / 2) + "\15", 500);
kirimAT("00" + pesanPDUKirim, 2500); // Kirim Pesan Format PDU
kirimAT("\032", 100); // Ctrl + Z
JOptionPane.showMessageDialog(Broadcast.this,
"Pesan Dikirim ke : "+notlp+
"\nIsi pesan : "+pesan,
"Pesan dikirim",
JOptionPane.INFORMATION_MESSAGE);
// Berikan waktu sleep agar terminal siap kembali untuk mengirim pesan
Thread.currentThread().sleep(10000);
} // Akhir try
catch (Exception e) {
System.out.println (e.getMessage());
}
// }
// else {}
}
private String infoSmsc = null;
private int nilaiSmsc = 0;
private int nomorSmsc = 0;
private String panjangNotlp = null;
private int nilaiPanjangNotlp = 0;
private int nilaiNotlp = 0;
private String Notlp = null;
private String dapatNotlp = null;
private String panjangPesan = null;
private int nilaiPanjangPesan = 0;
private String pesanPDU = null;
private String pesan = null;
public boolean cekNomor() {
if(txtNoTelp.getText().trim().equals("") || txAPesan.getText().trim().equals("")) {
JOptionPane.showMessageDialog(Broadcast.this,
"Isi pesan atau nomor hp tujuan terlebih dahulu",
"Warning", JOptionPane.WARNING_MESSAGE);
return false;
}
else if(!txtNoTelp.getText().matches("[0-9]*")) {
JOptionPane.showMessageDialog(Broadcast.this,
"nomor hp tujuan belom bener tuch!",
"Warning", JOptionPane.WARNING_MESSAGE);
return false;
}
else
{
return true;
}
}
void bersih(){
txtNoTelp.setText("");
//txtPasien.setText("");
txAPesan.setText("");
}
void broadcast(){
try
{
Connection Koneksi = objKoneksi.open_a_Connection();
state = Koneksi.createStatement();
sql ="select NoTelp from anggota where Status = 1";
rs = state.executeQuery(sql);
System.out.println(sql);
while(rs.next())
{
//txtNoTelp.setText(rs.getString(1));
//txtPasien.setText(rs.getString(2));
//txAPesan.setText(rs.getString(3));
prosesKirimSms(rs.getString(1),txAPesan.getText());
JOptionPane.showMessageDialog(this,"Sukses Mengirim Balik");// + pesan);
}
state.close();
Koneksi.close();
}
catch(SQLException ex)
{
System.out.println(ex);
}
}
public void actionPerformed(ActionEvent arg0) {
if(arg0.getSource()==txtNoTelp){
broadcast();
}
if(arg0.getSource()==btnKeluar){
JOptionPane.showMessageDialog(null, "Yakin ingin Keluar?");
System.exit(0);
}
if(arg0.getSource()==btnKirim){
//prosesKirimSms(txtNoTelp.getText().trim(), txAPesan.getText().trim().toLowerCase());
broadcast();
}
if(arg0.getSource()==btnBersih){
bersih();
}
}
public static void main(String[] args) throws Exception, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException{
UIManager.setLookAndFeel("com.jtattoo.plaf.mcwin.McWinLookAndFeel");
new Broadcast();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment