Vừa rồi báo cáo đã trình bày qua về thiết kế CSDL và thiết kế cho server. Trong hệ thống này, server được xây dựng nhằm phục vụ nhu cầu của thiết bị Android và web client. Phần tiếp theo của báo cáo sẽ trình bày về các modul này.
3.3.2.1 Hệ giám sát xe sử dụng Google Map
Như đã nói ở trên, mục đích chính của việc xây dựng ứng dụng web cho tổng đài là để giám sát vị trí của các taxi trên lộ trình. Mục này được dùng để trình bày về vấn đề đó.Yêu cầu của hệ thống giám sát taxi này là:
Có bản đồ của tỉnh, thành phố cần giám sát. Trên bản đồ có hiển thị vị trí của các taxi trong hệ thống. Vị trí của các taxi này phải được cập nhật liên tục trong một khoảng thời gian xác định.
Phải có chức năng giám sát riêng từng taxi, di chuyển bản đồ theo taxi đó và quan sát lộ trình của taxi, theo dõi các điểm dừng, đỗ của taxi.
Phải có danh sách các taxi được hiển thị để người điều phối chọn và thực hiện các thao tác riêng, như gửi tin nhắn, xem thông tin taxi, gửi cảnh báo...
a) Sơ đồ thiết kế class
Dưới đây là sơ đồ thiết kế class diagram dành cho web client. Tất cả các class file này đều được viết trên ngôn ngữ javascript theo chuẩn hướng đối tượng.
Mô tả sơ đồ thiết kế class
Sơ đồ thiết kế class này bao gồm 7 class chính phục vụ cho việc giám sát taxi trên bản đồ, cho việc gửi và nhận các tin nhắn/ cảnh báo đến cho các taxi và cho việc quản lý các điểm tắc đường cho taxi. Các class này được mô tả như sau:
Login: Class này làm nhiệm vụ quản lý việc đăng nhập của người dùng. MainController: Class này làm nhiệm vụ quản lý tổng quát của hệ thống, bao
gồm:
o Khởi tạo hệ thống: Khởi tạo các controller khác như taxiController, mapController...Nạp các dữ liệu nguồn như dữ liệu về các taxi, tin nhắn, khách hàng...
o Thiết lập một vòng lặp liên tục liên lạc với server trong vòng 5 phút cập nhật thông tin một lần.
MapController: Là class chuyên dùng để quản lý bản đồ hiển thị trong hệ thống. Chức năng của class này là:
o Chứa đối tượng google map, để hiển thị các thông tin trên bản đồ.
o Tìm kiếm địa điểm trên bản đồ. Dịch từ địa điểm địa lý thành GPS.
o Hiển thị vị trí khách hàng và vị trí các điểm tắc đường trên bản đồ. TaxiController: Là class chuyên dùng để quản lý danh sách các taxi, class
này có chức năng:
o Khởi tạo danh sách các taxi. Cập nhật danh sách các taxi.
o Tìm kiếm các taxi. Thực hiện các hành động khác trên từng taxi: Gửi tin nhắn, xem thông tin lái xe...
Taxi: Là class chứa toàn bộ nội dung của một taxi cần quản lý. Bao gồm các thuộc tính như mã taxi, tên lái xe, thông tin lái xe, vị trí GPS… Cùng các phương thức liên lạc khác...
TrafficController: Là class thực hiện các thao tác về xử lý điểm tắc đường. MessageController: Là class thực hiện các thao tác về liên lạc.
Hình 18: Sơ đồ sequence chức năng khởi tạo và cập nhật taxi Mô tả sơ đồ
Theo sơ đồ trên, sau khi server gửi thông tin kết quả đăng nhập về cho Login, nếu đăng nhập thành công thì ứng dụng web tự chuyển sang trang điều khiển chính của chương trình. Tại đây có 2 quá trình diễn ra chủ yếu:
Bước 1: MainController khởi tạo các đối tượng của MapController và TaxiController. Sau đó, gửi thông tin lên server để lấy các thông tin đầu tiên về các taxi, khởi tạo các taxi.
Bước 2: MainController thực hiện hàm setInterval để thực hiện quá trình lặp liên tục, lấy các thông tin taxi trên server để cập nhật cho từng taxi trong mảng danh sách taxi nó đang quản lý. Đồng thời thông báo cho MapController để nó hiển thị lại vị trí các taxi trên bản đồ.
logOut(): Đăng xuất cho taxi từ tổng đài, trong trường hợp thiết bị bị lỗi không đăng xuất được.
c) Các sơ đồ khác của mục giám sát taxi
Ngoài các thiết kế về giám sát xe, còn có thêm các thiết kế khác được lưu trong mục phụ lục 2 như sau:
Sơ đồ sequence chức năng tìm kiếm bản đồ Sơ đồ sequence chức năng cập nhật thông tin taxi Sơ đồ sequence các chức năng làm việc với taxi
3.3.2.2 Hệ thống gửi thông điệp a) Web client gửi tin lên server
Mục này trình bày quy trình liên lạc giữa thiết bị Android và web client. Theo như yêu cầu thì người điều phối viên có thể liên lạc và gửi các thông tin cho người lái taxi. Sau đây là sơ đồ activity cách thức liên lạc giữa webclient với thiết bị Android. Quy trình này có 2 bước, trước hết là bước cập nhật thông tin liên lạc từ web client lên server.
act Send_message_to_server sendMessageEvent ComposeMessage Start Step 1 createAjaxRequest
chooseTaxi createContent chooseMessageType
updateDatabase buttonClick updateMessageTable updateNewsTable stop Step 1
Hình 19: Sơ đồ activity chức năng gửi thông điệp bước 1
Như vậy, để web client có thể gửi tin nhắn cho thiết bị Android thì web client chỉ cần thực hiện bước một đó là gửi thông điệp cho server cập nhật hai table trong CSDL, đó là bảng tin nhắn chứa nội dung tin nhắn và bảng News là hòm thư thông báo để server báo cho thiết bị Android biết.
Như báo cáo đã trình bày ở trên, hệ thống ứng dụng công nghệ web service để liên lạc giữa thiết bị Android và server. Tuy nhiên trên thực tế, công nghệ này chỉ đáp ứng cho một chiều liên lạc, tức là phía server sẽ duy trì các phương thức, hay còn gọi là các dịch vụ để các client bên ngoài có thể triệu gọi, khi các client triệu gọi thì nó sẽ chuyển các dữ liệu lên server và lấy về các kết quả cần thiết. Nhưng đặt hệ thống của ta trong trường hợp cần chuyển tin ngược lại thì làm thế nào? Tức là làm thế nào để server có thể thông báo cho thiết bị Android biết các thay đổi
không đồng bộ. Phần tiếp theo sẽ trình bày cách để server có thể thông báo cho thiết bị Android biết.
b) Mô tả phương thức comet- Server gửi thông báo cho android
Comet là một phương thức dùng để tạo các cảnh báo cho client biết mỗi khi server muốn gửi thông tin cho client thông qua web service. Phương pháp này yêu cầu client phải hỗ trợ xử lý không đồng bộ, tức là việc thực hiện gọi service không ảnh hưởng gì đến quá trình chạy của hệ thống, mỗi khi có kết quả trả về từ web service, thì hệ thống sẽ tự thực hiện theo kết quả đó. Quy trình thực hiện của kĩ thuật này như sau:
Server: Mỗi khi client bắt đầu gọi một phương thức, gọi là phương thức bắt
đầu(1), thì server thực hiện việc vòng lặp kiểm tra xem có thay đổi gì trong hệ thống không( sự thay đổi này có thể lưu trong một bảng CSDL - 2 ).
o Nếu có sự thay đổi(3), thì trả kết quả về cho client để thực hiện hành động(4), và client lại tiếp tục quá trình gọi này.
o Nếu không có sự thay đổi, server sleep một khoảng thời gian nhất định.
Client: Triệu gọi liên tục một phương thức service đến server, đợi kết quả trả
về, thực hiện nó, và tiếp tục gọi phương thức.
Sơ đồ quy trình gửi tin nhắn, phía server:
Sơ đồ quy trình gửi tin nhắn phía thiết bị Android
Hình 21: Quy trình nhận tin nhắn phía thiết bị Android
Trong sơ đồ này, nhờ vào việc sử dụng một tác vụ chạy không đồng thời với UI thread mà ứng dụng có thể vừa đợi các notification từ server gửi về, vừa thực hiện các thao tác khác với UI thread. Chỉ khi có notification, tác vụ nhận tin nhắn sẽ xử lý notification đó để lên server lấy dữ liệu, sau đó lại tự khởi động lại tác vụ chờ notification.