TNewMessageReceived, sebuah event TSmsGateway

Bagaimana mendeteksi sms masuk secara otomatis, seperti handphone kita ?. Enggak usah banyak kata deh, mari kita ikuti langkah berikut.
buat sebuah event !, Kita kasih nama TNewMessageReceived yang menjadi.


TNewMessageReceived = Procedure (Sender: TObject; From, Content: String) of Object;

pada kelas TSmsGateway kita buat variable menjadi

FOnNewMessageReceived: TNewMessageReceived;

dan tentu saja pada section published kita deklasikan property seperti

property OnNewMessageReceived: TNewMessageReceived read FOnNewMessageReceived write FOnNewMessageReceived;

Kemudian kita buat event trigerring menggunakan TThread, kenapa pake thread ? .. coba deh buat pake timer !. lihatlah bedanya?


TSmsThread = class(TThread) // background monitoring event
private
FSmsGateway: TSmsgateaway; // ini udah ada di artikel saya sebelumnya
protected
procedure execute; override;
public
constructor Create(aSmsGateway: TSmsgateaway);
end;

pada procedure execute kita isi seperti ini :

procedure TSmsThread.execute;
const
secs = 3;
var
I: Integer;
begin
inherited;
I := 0;
while not Terminated do
begin
Inc(I);
if I >= Secs then
begin
I := 0;
FSmsGateway.DetectNewMessage(FSmsGateway);
end;
Sleep(1000); // 1 detik, secs = 3. jadi cek modem setiap 3 x 1 = 3 detik
end;
end;

Kemudian kita lihat procedure DetectNewMessage, yang bisa berisi input AT Command seperti TE+CNMI akan tetapi karena banyak perbedaan penggunaan perintah ini, di masing-masing modem maka saya lebih suka pake AT+CMGL=0 atau AT+CMGL=”REC UNREAD” tergantung dari AT+CMGF nya. sehingga isi dari procedure DetectNewMessage adalah

procedure TSmsgateaway.DetectNewMessage(Sender: TObject);
var
sres : String;
Strings: TStrings;
msTemp: TMessageSpec;
begin
if SerrialUsed = False then // antisipasi penggunaan modem bersamaan !!
begin
msTemp := FMessageSpecs;
FMessageSpecs := msRECUNREAD; // set property untuk sms blom terbaca
try
RetrieveSMS; // perintah at+cmgl ada disini yg langsung tersimpan di TCollectionItem
if Assigned(FOnNewMessageReceived) then // jika terjadi event maka otomatis masuk
FOnNewMessage(Self,FSmsList.Item[0].sender,FSmsList.Item[0].body); // kesini
except on ex:ESynaSerError do
FMessageSpecs := msTemp;
end;
FMessageSpecs := msTemp;
end;
SerrialUsed := False;
end;

nah … sudah selesai, silakan coba!!,

2 thoughts on “TNewMessageReceived, sebuah event TSmsGateway

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s