Trƣờng Đại học Công nghệ - Đại học Quốc gia Hà Nội
BÁO CÁO BÀI TẬP LỚN
XÂY DỰNG CHƢƠNG TRÌNH CHAT TRÊN ĐIỆN THOẠI DI ĐỘNG
Ngƣời thực hiện: Đoàn Ngọc Phƣơng
Nguyễn Thị Thu Hằng
Lớp cao học CNTT K17
Lời nói đầu
Hệ thống chat là một hệ thống đa ngƣời dùng và thực hiện chức năng truyền thông
điệp giữa các ngƣời dùng trong hệ thống, với tính chất là thông điệp đƣợc gửi từ ngƣời
dùng A đến ngƣời dùng B (đang online – hay đang sử dụng hệ thống) phải đƣợc thực hiện
ngay với thời gian trễ rất nhỏ, đủ để thể hiện một cuộc trò chuyện thông thƣờng.
Với đặc điểm nhƣ vậy hệ thống chat cũng có điểm tƣơng đồng với hệ thống mail,
đó là khả năng truyền thông điệp: nếu ngƣời nhận không online – hay đang không sử dụng
hệ thống thì hệ thống chat cũng giống nhƣ hệ thống mail, các thông điệp chỉ đƣợc tải về
máy ngƣời nhận khi ngƣời nhận đăng nhập và tiến hành xem thông điệp. Nhƣng nếu
ngƣời nhận online, thì thông điệp trong chƣơng trình chat phải đƣợc tải về ngay và hiển thị
trên cửa sổ chat của ngƣời nhận. Nhƣ vậy có thể nói điểm khác biệt chủ yếu của hai hệ
thống là thời gian truyền thông điệp.
Qua phân tích, và dựa trên những công cụ hiện có là J2ME để lập trình trên điện
thoại di động, một ngôn ngữ lập trình luôn hỗ trợ giao thức http trên mọi dòng máy, nhóm
em đã quyết định xây dựng hệ thống chat trên điện thoại di động trên mô hình client –
server. Nhƣ vậy, mọi ngƣời dùng trong hệ thống sẽ đƣợc coi là các client, trong hệ thống
sẽ tồn tại một máy chủ để tiến hành lƣu các thông điệp gửi đi và tải các thông điệp về máy
điện thoại di động của ngƣời nhận khi ngƣời nhận, hay máy client có yêu cầu nhận thông
điệp.
Việc nhận thông điệp trong mắt ngƣời sử dụng là một quá trình tự nhiên, không
phải qua khâu kết nối hay yêu cầu (request) tới máy chủ, cho nên việc làm này phải đƣợc
2. Giới thiệu chƣơng trình ..................................................................................................... 17
3. Các chức năng của chƣơng trình ....................................................................................... 18
2
PHÂN TÍCH, THIẾT KẾ
1. Phân tích và thiết kế tổng quát
1.1. Lựa chọn kiểu kết nối
Hệ thống đƣợc xây dựng trên mô hình Client – Server và sử dụng giao thức Http.
Kết nối Http là kết nối phi trạng thái, khó để quản lý phiên làm việc của từng ngƣời
dùng, nhất là đối với ngƣời dùng sử dụng một chƣơng trình, chứ không phải một trang
web trên một thiết bị di động. Do đó để luôn cập nhập đƣợc các thông điệp và trạng thái
nhập/xuất của các thành viên, thì chƣơng trình phía client dùng cách theo định kỳ gửi
yêu cầu về phía server để luôn luôn cập nhật đƣợc mọi thông tin. Chi tiết cụ thể đƣợc
nêu dƣới đây.
1.2. Kiểu dữ liệu phía server
Một ngƣời dùng khi muốn sử dụng chƣơng trình chat thì cần phải có tài khoản.
Tài khoản của ngƣời dùng trong chƣơng trình chat còn có thêm một giá trị trạng thái để
xác định việc ngƣời đó đang online hay offline.
Một ngƣời có thể có rất nhiều bạn bè là các tài khoản khác sử trong hệ thống và
cũng có rất nhiều tin nhắn từ những ngƣời dùng khác, các tin nhắn này có thể giống hệt
nhau cả về ngƣời nhận, ngƣời gửi, và nội dung thông điệp. Ngoài ra một thông điệp của
một chƣơng trình chat cũng ngắn, nên có thể lƣu thành một trƣờng của cơ sở dữ liệu.
Trên cơ sở những phân tích đó, phía server dữ liệu đƣợc lƣu thành ba bảng:
Hình 1:
Cơ sở dữ liệu
3
lƣu lại, và thƣờng xuyên đƣợc cập nhập. Hai mảng này chỉ là tạm thời để xử lý, nội dung
chính đƣợc lƣu trong một list, một kiểu cửa sổ có dạng danh sách, mỗi một thành viên
của danh sách lại có biểu tƣợng kèm theo thể hiện trạng thái nhập/xuất.
4
2. Phân tích và thiết kế chi tiết
2.1. Các chức năng cần xây dựng của chƣơng trình, biểu đồ user case
Hệ thống gồm có hai tác nhân chính là ngƣời dùng và server.
Hình 2:
Biểu đồ user case cho tác nhân người dùng
Những thông tin mà ngƣời dùng yêu cầu luôn luôn thay đổi, ngƣời dùng đăng
nhập hay đăng xuất thì trạng thái của ngƣời dùng sẽ thay đổi, nên chức năng show friend
list cần cập nhập trạng thái của những tài khoản có mặt trong danh sách…Vì lý do đó mà
chƣơng trình cần cung cấp chức năng update để liên tục cập nhập những thông tin cần
thiết.login, logout là chức năng đăng nhập và đăng xuất, show friend list là chức năng
hiển thị danh sách bạn bè với trạng thái nhập/xuất kèm theo, show offline message là
chức năng hiển thị tin nhắn offline, chức năng add new friend để thêm bạn bè vào danh
sách friend list, multi talking là chức năng trò chuyện với nhiều ngƣời, save in to a file là
chức năng ghi lại đoạn hội thoại mà ngƣời dùng mong muốn.
5
Hình 3:
Biểu đồ user case cho tác nhân server
Mọi việc server thực hiện đều phải tiến hành cập nhập lại cơ sở dữ liệu, vì vậy
mọi user case của server đều cần phải sử dụng các chức năng và thuộc tính của user case
khi đó các tiến trình khác có thể hoạt động.
Trong phƣơng thức run() có nhiều đoạn mã khác nhau dành cho những yêu cầu
khác nhau của ngƣời dùng. Việc bắt đầu đoạn mà nào phụ thuộc vào một số biến
boolean hay còn gọi là cờ trạng thái. Nếu ngƣời dùng chọn chức năng nào thì cờ tƣơng
ứng với chức năng ấy cũng đƣợc bật, và đoạn mã xử lý chức năng đó sẽ đƣợc thực thi
trong lần hoạt động tiếp theo của tiến trình. Khi ngƣời dùng nhấn back để thoát khỏi
chức năng nào đó, cờ trạng thái tƣơng ứng cũng bị tắt và đoạn mã tƣơng ứng sẽ không
đƣợc xử lý cho đến khi cờ trạng thái lại đƣợc bật lại.
Mặt khác do đặc thù của chƣơng trình chat, cần có nhiều cửa sổ để giao lƣu với
nhiều ngƣời, cho nên toàn bộ chƣơng trình sẽ đƣợc phân rã thành các cửa sổ, mỗi chức
năng ngƣời dùng sử dụng sẽ đƣợc cung cấp bằng một cửa sổ. Do đó lớp chính sẽ có
thuộc tính là các cửa sổ này. Ngƣời dùng yêu cầu chức năng nào thì sẽ cho hiển thị cửa
sổ tƣơng ứng.
2.2.2. Chức năng đăng nhập và đăng xuất
Nếu ngƣời dùng nhấn nút login đƣợc gắn với form, thì một sự kiện sẽ phát sinh,
cờ login sẽ đƣợc bật, tham số đƣợc xác định và thread mới đƣợc tạo ra để bắt đầu phục
vụ ngƣời dùng, trong phƣơng thức run của lớp chính, chuỗi url login sẽ đƣợc dùng để
kết nối với server, nếu thành công, midlet sẽ hiện cửa sổ chính của chƣơng trình, ngƣợc
lại nếu tài khoản không hợp lệ, cờ login sẽ bị tắt, chƣơng trình sẽ không thực hiện kết
nối, và một thông báo yêu cầu nhập lại sẽ đƣợc hiện ra trên form login.
Trong đoạn mã thực hiện nhiệm vụ login của lớp chính, kết quả sẽ chia ra làm
hai nửa: phần thể hiện danh sách bạn bè đƣợc cắt ra dựa vào dấu hiệu “offm” để đƣa
vào lớp friendList, lớp hiển thị danh sách bạn bè của ngƣời dùng, tên và trạng thái của
ngƣời dùng sẽ đƣợc bóc tách ra, một hình ảnh tƣơng ứng sẽ đƣợc gắn vào tên để hiển
thị trạng thái nhập xuất. Phần còn lại đƣợc đƣa vào lớp offlineMessage-lớp hiển thị tin
nhắn offline, lớp này là một form, nó nhận dữ liệu, xử lý và gắn tin nhắn vào cửa sổ
của nó, khi có yêu cầu xem tin offline form này sẽ đƣợc gọi hiển thị và không cần xử lý gì
thêm, trạng thái của ngƣời dùng khi đó sẽ đƣợc server cập nhật lại thành trạng thái online.
thái để thực hiện đoạn mã tƣơng ứng trong hàm run().
2.2.4. Chức năng thêm bạn bè
Tƣơng tự, chức năng này cũng là một form, và tƣơng tự nó cũng có cờ trạng thái
nhƣ các chức năng khác. Chỉ có điều nó có các thuộc tính khác mà thôi. Form này gồm
một textfield để nhập tên ngƣời cần thêm vào danh sách bạn bè, và hai nút nhấn, một để
thay đổi tham số, gửi yêu cầu đến server để thêm bạn bè. Một để quay lại chƣơng trình
chính. Nếu chuỗi nhập vào không đúng quy cách là một tên tài khoản, chƣơng trình sẽ
xử lý ngay và không cho phép gửi lên server. Sau khi đã thêm thành công thì vấn đề cần
xử lý là update lại danh sách bạn bè, do đó lớp chính phải gọi phƣơng thức update của
form chứa danh sách này.
11
Hình 8:
Biểu đồ trình tự của user case add new friend
2.2.5. Chức năng trò chuyện
Đây là chức năng quan trọng và phức tạp nhất của chƣơng trình, tại một thời
điểm sẽ có nhiều thông điệp đƣợc gửi lên server, sự tranh chấp tài nguyên có thể khiến
12
thông điệp không đƣợc gửi đi, làm mất tính an toàn và ổn định của chƣơng trình, do đó
phía server cần phải có những xử lý cho vấn đề tranh chấp tài nguyên.
Hình 9:
Biểu đồ trình tự của user case multi talking
13
và password. Nếu so sánh thấy đúng thì tiếp tục thực hiện, còn sai phải thông báo lại
client. Tiếp đó là kiểm tra xem trạng thái của tài khoản đó, nếu đã login rồi thì không
đƣợc phép login nữa và trả về thông báo. Nếu hoàn toàn thỏa mãn điều kiện thì tiến
hành sửa đổi lại trạng thái cho tài khoản đó là “on” thay vì “off”. Thông tin phản hồi là
danh sách bạn bè của tài khoản này lấy từ bảng friend và các tin nhắn offline lấy từ
14
bảng message. Các record sẽ đƣợc nối lại với nhau trƣớc khi truyền theo đúng quy cách
đã đƣợc giới thiệu ở trên.
Servlet logoff cũng tƣơng tự nhƣ vậy, cũng chỉ gồm hai tham số nhƣ servlet
logoff. Mọi công việc tƣơng tự chỉ có điều là bây giờ phải đổi từ “on” sang “off”.
Không có thông tin gì để trả lại cho client trong servlet này cả, trừ thông báo lỗi.
Servlet getFriends để lấy lại các thông tin phàn hồi tƣơng tự nhƣ servlet login,
nó hoàn toàn tƣơng tự login, chỉ khác là lúc này tài khoản đã đăng nhập rồi và client
đang yêu cầu thông tin để cập nhập chứ không phải để login.
Các servlet khác cũng có các kiểm tra tham số ban đầu tƣơng tự nhƣ servlet
login, ngoài ra còn bao gồm những kiểm tra dữ liệu riêng.
Nhƣ servlet add, để thêm bạn, tên ngƣời cần thêm phải có trong bảng user, cho
nên cần phải có thêm dòng mã kiểm tra tham số tƣơng ứng, nếu hợp lệ thì mới đƣợc
thêm vào, ngƣợc lại sẽ trả lại cảnh báo.
Còn servlet recieveMe, là servlet để nhận thông điệp đƣợc gửi giữa các server,
servlet sẽ lƣu lại trong CSDL cho đến khi đƣợc lấy ra, nó sẽ bị xóa. Servlet này cần thêm
thông điệp vào bảng message, và kiểm tra ngƣời gửi ngƣời nhận có hợp lệ hay không.
Vì mục tiêu của bài toán không đƣợc đặt vào servlet, cho nên server đƣợc thiết
kế an toàn, nhƣng sự thành công của nó có sức ảnh hƣởng lớn đến bài toán, nên dù đơn
giản nhƣng vẫn đảm bảo tính tiện dụng và an toàn.
2.4. Biểu đồ lớp
Dựa vào các biểu đồ trình tự ta có thể nhìn thấy đƣợc phần lớn các lớp cần
xây dựng của chƣơng trình, một lớp chính là một ứng dụng midlet, các lớp form
đáp ứng nhờ việc kết nối với server theo chuỗi url của lớp chính.
16
GIỚI THIỆU VỀ CHƢƠNG TRÌNH VÀ CÁC CÔNG CỤ XÂY
DỰNG CHƢƠNG TRÌNH
1. Các công cụ xây dựng chƣơng trình
Để xây dựng chƣơng trình các công cụ sau đƣợc sử dụng:
- Chƣơng trình trên Client (trên điện thoại di động) đƣợc xây dựng bằng J2ME:
J2ME là một phiên bản của JAVA, đƣợc xây dựng để đƣa sức mạnh lập trình của JAVA
đến với các thiết bị cầm tay, hiện nay J2ME là một ngôn ngữ rất phổ biến để lập trình
trên điện thoại di động.
- Chƣơng trình trên Server đƣợc xây dựng bằng Servlet của JAVA: Servlets là tập
mã lệnh java đƣợc chạy trên ứng dụng web (do đó tên Servlets, tƣơng tự nhƣ Applets
phía client) để trả lời những yêu cầu từ phía client. Servlets sử dụng các chuẩn mở rộng
của java nhƣ class trong gói javax.servlet và javax.servlet.http.
- Server chạy trên trình chủ Tomcat: Tomcat là trình chủ mã nguồn mở
Webserver hỗ trợ Java rất nổi tiếng. Có thể download miễn phí tại mã nguồn và bộ cài
TomCat tại địa chỉ .
- Cơ sở dữ liệu đƣợc dùng là hệ quản trị SQL SERVER 2000
2. Giới thiệu chƣơng trình
Các chức năng chính của chƣơng trình chat:
Đăng nhập
Đăng xuất
Hiển thị danh sách bạn bè với trạng thái nhập/xuất
Hiển thị tin nhắn offline
Thêm bạn bè vào danh sách
Chat với nhiều ngƣời
Mặc dù chƣơng trình còn nhiều hạn chế, tuy nhiên đã hoàn thành căn bản những
Hình 12:
Tài khoản không hợp lệ
Giao diện chính của chƣơng trình - cửa sổ hiện danh sách bạn bè với trạng thái
nhập/xuất và một menu chứa các chức năng của chƣơng trình:
Hình 13:
Giao diện chính của chương trình
19
Nhấn vào nút menu trên giao diện chính, ngƣời dùng có thể thấy danh sách các
chức năng của chƣơng trình:
Offline message: nhấn vào đây để xem các tin nhắn offline
Addfriend: thêm bạn mới
Talk: chọn một ngƣời trong danh sách sau đó nhấn tùy chọn này để bắt đầu
trò chuyện.
Tùy chọn logoff bên trái cho phép ngƣời dùng đăng xuất khỏi chƣơng trình.
Trong đó mỗi khi ngƣời dùng chọn một mục trên menu, chƣơng trình sẽ cho hiển
thị một cửa sổ riêng thực thi chức năng đã đƣợc chọn đó. Các chức năng đều có
thiết kế tƣơng tự nhau, đều gồm hai nút nhấn, một để thực hiện công việc và một
để quay lại giao diện chính.
Hình 14:
Các cửa sổ chức năng
Chức năng talk: ngƣời dùng có thể dùng nút back để quay lại và chọn một ngƣời
khác để trò chuyện, khi ngƣời dùng quay lại nói chuyện với những ngƣời trƣớc
đó, nội dung cuộc trò chuyện vẫn đƣợc giữ nguyên, những tin nhắn vẫn luôn
đƣợc cập nhật trong lúc ngƣời dùng rời khỏi cửa sổ đó.