ĐỌC TIN NHẮN

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Xây dựng hệ thống nhắn tin nội bộ dựa trên các thiết bị thông tin không dây (Trang 54 - 57)

Cơ sở dữ liệu

5.4 ĐỌC TIN NHẮN

Sau khi đã phát hiện được tin nhắn, có hai vấn đề cần đặt ra:

Thứ nhất, số máy của tin nhắn gửi đến có hợp lệ khơng. Điều này để giúp cho hệ thống không phải trả lời những số máy không được phép nhằm mục đích giảm chi phí. Tất nhiên, người sử dụng có thể chọn phương án hệ thống sẽ trả lời tất cả các số máy gửi tin đến.

Thứ hai, sau khi đã kiểm tra tính hợp lệ của số máy gửi, nếu tin nhắn là hợp lệ cần phải đọc được nội dung của tin nhắn và xem lệnh được gửi tới qua tin nhắn là lệnh gì (ứng với dịch vụ gì).

Sau khi phát hiện được tin nhắn, ta có thể sử dụng lệnh „AT+CMGL=”ALL” „ để yêu cầu môđem gửi trả nội dung của các tin nhắn, đáp ứng của môđem sau lệnh +CMGL có dạng sau:

+CMGL: 1,"REC READ","+84904139379",,"04/05/18,20:38:59+28" I will go to your home soon I will go to your home soon

+CMGL: 2,"REC READ","+84903410464",,"04/05/21,00:18:29+28" Tham Tham

+CMGL: 3,"REC UNREAD","+84903400007",,"04/05/21,09:03:35+28" Gi vay Gi vay

OK

Mơđem sẽ đáp ứng với 2 dịng text cho mỗi tin nhắn: dòng thứ nhất bao bắt đầu bằng chuỗi „+CMGL:‟ tiếp theo là chỉ số của tin nhắn trong bộ nhớ, trạng thái của tin nhắn, số máy gửi đến, thời gian gửi đến. Dòng tiếp theo sẽ là nội dung của tin nhắn.

Như vậy, việc đọc lần lượt từng tin nhắn SMS từ bộ nhớ ra tuy khơng phải dễ dàng (nó địi hỏi các kỹ thuật xử lý chuỗi ký tự khá phức tạp ), tuy nhiên cùng khơngphải là q khó. Vì vậy, chúng tơi chỉ xin dẫn ra cách gửi lệnh và cách đọc dữ liệu từ bộ đệm nhận như được minh hoạ một cách đơn giản trong chương trình 5-4. Cơng việc sau đó chỉ hồn tồn thuần tuý là xử lý xâu ký tự nhận được dựa trên cấu trúc của đáp ứng đã trình bày ở trên.

Chƣơng trình 5-4

Private Sub FetchSMS_Click()

Hệ thống nhắn tin nội bộ trên cơ sở ghép nối môđem GSM ứng dụng SMS

Comm1.Output = "AT+CMGL=" & Chr(34) & "ALL" & Chr(34) & vbCrLf

„Đợi Môđem trả lời Wait

„Đọc bộ nhớ đệm vào biến smsString Do

smsString=smsString & Comm1.Input Loop while Comm1.InBufferCount

„Nếu mơđem trả lời OK thì gọi chương trình xử lý nội dung If bOK then

ReadMessage End if

End sub

Trong đoạn chương trình kể trên, tồn bộ đáp ứng của môđem sau lệnh +CMGL sẽ được lưu vào biến smsString. Sau khi nhận được chuỗi smsString này, ta có thể thực hiện việc lọc từng tin nhắn ra qua các đoạn chương trình xử lý chuỗi ký tự.

Tuy nhiên một điều rất quan trọng là sau khi đã xác định được số máy gửi đến của mỗi tin nhắn, chúng ta cần phải kiểm tra xem số máy đó có được phép gửi hay khơng. Tính năng kiểm tra này nhằm giúp cho người khai thác giảm được chi phí cho việc gửi trả lại tin nhắn đến những số máy khơng cần thiết. Tuy nhiên người dùng có thể lựa chọn kích hoạt hoặc khơng kích hoạt tính năng này. Việc này được thực hiện bằng một ô lựa chọn trên giao diện của chương trình được đặt tên là AucROn . Kiểm tra giá trị của ô lựa chọn này, rỗi chạy chương trình con kiểm tra số máy với cơ sở dữ liệu chứa các số máy được phép , nếu số máy là hợp lệ thì tiếp tục xử lý, nếu khơng thì bỏ qua:

If AucROn.Value = 1 Then AucR If SenderValid Then SMSCheck

End If

AucROn.Value = 1 cho thấy người dùng đã khích hoạt tính năng kiểm tra này, chương trình con sẽ đặt giá trị biến SenderValid thành True nếu số máy này là hợp lệ, chương trình con này được minh họa dưới đây:

SenderValid = True Dim AucRdbs As Database Dim AucRMobNo As Recordset

Hệ thống nhắn tin nội bộ trên cơ sở ghép nối môđem GSM ứng dụng SMS

Set AucRdbs = OpenDatabase("..\Databases\AucR.mdb")

sqlstr = "select MobNo from AucR where MobNo = " & "'" & SenderNo & "'"

Set AucRMobNo = AucRdbs.OpenRecordset(sqlstr, dbOpenDynaset) If AucRMobNo.RecordCount = 0 Then SenderValid = False AucRMobNo.Close Exit Sub End If AucRdbs.Close 5.5 GỬI TIN NHẮN

Vấn đề đặt ra là sau khi đã tìm ra câu trả lời tương ứng với tin nhắn nhận được, cần phải gửi trả lại người gửi một tin nhắn chứa thơng tin trả lời. Điều này có thể thực hiện bằng cách gửi lệnh „+CMGS‟ ra cổng nối tiếp tới mơđem thơng qua đặc tính Comm.Output của MSComm trong Visual Basic.

Chương trình 5-5 minh hoạ gửi nội dung tin nhắn cần gửi được lưu trong biến SMSTxT. Chƣơng trình 5-5 If Len(Trim(SenderNo)) = 0 Then SMSTxT = "" Exit Sub Else bGreaterSign = False

Comm1.Output = "AT+CMGS=" & Chr(34) & Trim(SenderNo) & Chr(34) & vbCrLf

„ Đợi cho đến khi môđem trả lại dấu nhắc “>” While Not bGreaterSign

DoEvents Wait Wend

„Nếu môđem trá lại dấu nhắc “>” thì đưa nội dung tin cần gửi „ vào

If bGreaterSign Then

Comm1.Output = Trim(SMSTxT) & Chr(26) & vbCrLf bOK = False

bError = False ' Đợi môđem trả lời While Not bOK Or bError DoEvents

Wait Wend

' nếu môđem trả lời OK, tức là tin nhắn đã được gửi If bOK Then

SentOK = True End If

Hệ thống nhắn tin nội bộ trên cơ sở ghép nối môđem GSM ứng dụng SMS End If End If SMSTxT = "" SenderNo = "" End Sub

Như trình bày ở trong phụ lục 1 về cú pháp lệnh +CMGS, khi muốn gửi một tin nhắn, trước tiên ta phải gửi ra môđem số máy cần gửi tin nhắn đến, sau đó đợi mơđem trả lời với dấu nhắc “>” thì đưa tiếp nội dung của tin nhắn vào. Dấu nhắc này được phát hiện thông qua thủ tục On_Comm đã trình bày ở chương trình 5-2.

Trong chương trình 5-5 trên, số máy cần gửi đã được lưu vào biến SenderNo trước đó thơng qua các đoạn chương trình khác.

Nội dung của tin nhắn trả lời dịch vụ SMSTxT được thực hiện qua các chương trình con có nhiệm vụ xác định lệnh và tìm thơng tin trả lời dịch vụ. Chúng ta có thể tìm hiểu kỹ hơn ở phần tiếp theo của chương này.

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Xây dựng hệ thống nhắn tin nội bộ dựa trên các thiết bị thông tin không dây (Trang 54 - 57)

Tải bản đầy đủ (PDF)

(84 trang)