SMS Gateway, sebenarnya itu judul yang akan saya tuliskan pada tulisan kali ini, tetapi karena SMS Gateway yang akan saya tuliskan menggunakan delphi, maka saya potong menjadi beberapa bagian, agar mudah dipelajari secara konsep ataupun logika. Jadi, kali ini kita akan coba bagaimana sih menjalankan service gammu dengan Delphi?? Sebelumnya ada beberapa aplikasi pendukung yang harus dipenuhi yakni :
  • My SQL connector ODB, aplikasi ini digunakan untuk membuat datasource menggunakan mysql. Bisa dowload disini.
  • MySQL atau kita bisa gunakan XAMPP.
  • Gammu. Bisa download di situs resminya di Gammu
Jika semua sudah terpenuhi, pertama kita akan buat odbc driver mysql terbaca di Delphi,caranya sebagai berikut :
  1. Install Terlebih dahulu ODBC mysql Connector
  2. Masuk Control Panel –> Administratif Tool — Pilih Datasource ODBC.
  3. Jika Benar maka akan tampil jendela berikut :

Klik Button Add, Kemudian Pilih MYSQL ODBC Driver 5.1

Selanjutnya akan ada jendela MYSQL Connection Configuration, isikan sesuai dengan database gammu yang telah direstore pada mysql, pada contoh saya gunakan nama database sms.



Pembuatan Konfigurasi Gammu
  1. Tahap Instalasi Driver ODBC Mysql suksess, selanjutnya kita akan masuk ke tahap coding, pertama buka Delphi dan buat tampilan seperti berikut :


Simpan Projek kedalam Sebuah Folder.
Ektrak Gammu yang telah di download kedalam Folder yang telah dibuat sebelumnya, jadi urutan seperti berikut : nama_folder/Gammu
Klik 2x pada menu Simpan Konfigurasi dan ketikan source berikut :
var
gammuinifile, smsdrcnya, gammu : TIniFile;
begin
try
gammu := TIniFile.Create(ExtractFilePath(Application.ExeName)+ '/gammu/bin/gammu.ini');
gammu.WriteString('lokasi', 'path', edit1.Text);
gammu.Free;
gammuinifile := TIniFile.Create(ExtractFilePath(Application.ExeName)+'/gammu/bin/gammurc ');
gammuinifile.WriteString('gammu', 'port', edit2.Text);
gammuinifile.WriteString('gammu', 'connection', edit3.Text);
gammuinifile.Free;
smsdrcnya := TIniFile.Create(ExtractFilePath(Application.ExeName)+'/gammu/bin/smsdrc');
smsdrcnya.WriteString('gammu', 'port', Edit2.Text);
smsdrcnya.WriteString('smsd', 'service', 'MYSQL');
smsdrcnya.WriteString('smsd', 'PIN', '1234');
smsdrcnya.WriteString('smsd', 'logfile', 'smsdlog');
smsdrcnya.WriteString('smsd', 'debuglevel', '0');
smsdrcnya.WriteString('smsd', 'commtimeout', '30');
smsdrcnya.WriteString('smsd', 'sendtimeout', '30');
smsdrcnya.WriteString('smsd', 'pc', edit4.Text);
smsdrcnya.WriteString('smsd', 'user', edit5.Text);
smsdrcnya.WriteString('smsd', 'password', edit6.Text);
smsdrcnya.WriteString('smsd', 'database', edit7.Text);
smsdrcnya.WriteString('smsd', 'driver', 'sqlite');
smsdrcnya.Free;
MessageDlg('Konfigurasi Berhasil Disimpan',mtInformation,[mbOK],0);
except
MessageDlg('Konfigurasi Gagal Disimpan',mtInformation,[mbOK],0);
end;





Klik 2x pada Cek Koneksi dan isikan Source berikut


var
cek : String;
begin
cek := GetDosOutput('cek.bat',edit1.Text);
MessageDlg('Status'+#13+cek,mtInformation,[mbOK],0);




Isikan source pada Run
if (Button3.Caption='Run') then
begin
status:=GetDosOutput('mulai.bat',Edit1.Text);
ShowMessage(status);
Button3.Caption:='Stop';
end
else if(button3.Caption='Stop') then
begin
status:=GetDosOutput('stop.bat',Edit1.Text);
ShowMessage(status);
Button3.Caption:='Run';
end;

isikan Source pada Button Cari :



var
dirFolder: String;
begin
if SelectDirectory('','',dirfolder) then
Edit1.Text:=dirFolder;
Nah Terakhir, Buat function setelah Uses

function GetDosOutput(CommandLine: string; Work: string): string;
var
SA: TSecurityAttributes;
SI: TStartupInfo;
PI: TProcessInformation;
StdOutPipeRead, StdOutPipeWrite: THandle;
WasOK: Boolean;
Buffer: array[0..255] of AnsiChar;
BytesRead: Cardinal;
WorkDir: string;
Handle: Boolean;
begin
Result := '';
with SA do begin
nLength := SizeOf(SA);
bInheritHandle := True;
lpSecurityDescriptor := nil;
end;
CreatePipe(StdOutPipeRead, StdOutPipeWrite, @SA, 0);
try
with SI do
begin
FillChar(SI, SizeOf(SI), 0);
cb := SizeOf(SI);
dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
wShowWindow := SW_HIDE;
hStdInput := GetStdHandle(STD_INPUT_HANDLE); // don't redirect stdin
hStdOutput := StdOutPipeWrite;
hStdError := StdOutPipeWrite;
end;
WorkDir := Work;
Handle := CreateProcess(nil, PChar('cmd.exe /C ' + CommandLine),
nil, nil, True, 0, nil,
PChar(WorkDir), SI, PI);
CloseHandle(StdOutPipeWrite);
if Handle then
try
repeat
WasOK := ReadFile(StdOutPipeRead, Buffer, 255, BytesRead, nil);
if BytesRead > 0 then
begin
Buffer[BytesRead] := #0;
Result := Result + Buffer;
end;
until not WasOK or (BytesRead = 0);
WaitForSingleObject(PI.hProcess, INFINITE);
finally
CloseHandle(PI.hThread);
CloseHandle(PI.hProcess);
end;
finally
CloseHandle(StdOutPipeRead);
end;
end;


Selanjutnya, tambahkan INIFILES, shellapi, qdialogs Pada USes. dan buat Variabel Global status : string;
Hasil Running :



Untuk Contoh program bisa download disini 





17 Jun 2013

0 comments :

Post a Comment

:) :)) ;(( :-) =)) ;( ;-( :d :-d @-) :p :o :>) (o) [-( :-? (p) :-s (m) 8-) :-t :-b b-( :-# =p~ $-) (b) (f) x-) (k) (h) (c) cheer
Click to see the code!
To insert emoticon you must added at least one space before the code.

 
Top