III.1. Đặt vấn đề
Chơng trình hội nghị đợc thiết kế dựa trên công cụ là Java, các chơng trình Java applet có khả năng gắn vào các trang Web đây là một điểm thuận tiện để xây dựng các ứng dụng trên Web. Chơng trình hội nghị từ xa ở phía client có nhiệm vụ nh sau:
♦ Thứ nhất: Nhận các thông điệp từ phía server, phân tích và xử lý các thông điệp này theo đúng chuẩn của giao thức IRC.
♦ Thứ hai: Nhận các thông điệp của ngời sử dụng, phân tích và gửi các thông điệp này đến server.
Một vấn đề cần đặt ra là các thông điệp mà server đa đến không tuân theo một quy luật nào hết bởi lẽ khi có nhiều các client khác nối vào thì các thông điệp mà server đa đến cho từng client cũng sẽ nhiều lên và ngợc lại. Do đó nếu phía client cứ nhận đợc một thông điệp, đem xử lý và sau đó quay lại nhận thông điệp tiếp theo thì có thể xảy ra trờng hợp là trong khi client còn đang phải xử lý thông điệp trớc thì đã có rất nhiều thông điệp của server đã đợc gửi đến nh vậy sẽ xảy ra trờng hợp dữ liệu bị mất. Để giải quyết vấn đề này, phía client phải có một tiến trình chỉ làm một nhiệm vụ duy nhất đó là đợi các thông điệp đến từ server. Mỗi khi nó nhận đợc một thông điệp, tiến trình này chỉ làm một việc đó là kiểm tra xem hàng đợi đã đầy cha, nếu nh hàng đợi đã đầy thì báo lỗi, nếu nh hàng đợi cha đầy thì đa thông điệp đó vào hàng đợi chờ đến lợt đ- ợc xử lý nh vậy thì toàn bộ các thông điệp đợc đa đến từ server sẽ không bị mất. Tiến trình thứ hai mà phía client phải có đó là tiến trình xử lý các thông điệp, tiến trình này chỉ làm một việc đó là kiểm tra xem trong hàng đợi có còn thông điệp để xử lý không, nếu còn thì lấy ra xử lý, nếu hết thì thôi và chờ đến khi có thông điệp để xử lý. Một tiến trình chính ở phía client dó là tiến trình giao tiếp với ngời sử dụng. Tiến trình này làm một nhiệm các tác vụ nh giao tiếp với ngời sử dụng, nhận các thông điệp mà ngời sử dụng đa vào để phân tích và gửi các thông điệp này đến server để server xử lý.
Với ba tiến trình này và một hàng đợi có kích thớc tơng đối lớn thì phía client đã có thể đáp ứng yêu cầu của dịch vụ này.
Đồ án tốt nghiệp Giới thiệu Java và cơ sở dữ liệu trên mạng
Trên đây là nhiệm vụ đặt ra mà phía client phải làm trong quá trình thực hiện một phiên hội nghị. Sau đây xin trình bày đến nội dung cụ thể của thuật toán để xây dựng dịch vụ này.
III.2. Lu đồ thuật toán
III.2.1. Sơ đồ khối các khối cơ bản
Với các yêu cầu của phía client đã đợc phân tích và đề cập ở phần trên, sau đây xin trình bày các khối cơ bản của chơng trình.
Bắt đầu
Tiến trình giao tiếp với ng ời sử
dụng Tiến trình nhận
thông điệp từ máy chủ gửi đến
Tiến trình xử lý thông điệp trong hàng đợi
Kết thúc ?
Kết thúc
Không
Có
Hình 5. Sơ đồ khối của các khối chính của chơng trình.
II.2.2. Lu đồ thuật toán của từng khối
II.2.2.1. Khối nhận thông điệp từ Server
Nh đã đề cập ở trên, khối nhận thông điệp làm các nhiệm vụ sau:
♦ Chờ thông điệp đến từ server.
♦ Nếu có thông điệp đến thì trớc tiên kiểm tra xem đó có phải là thông điệp kiểm tra đờng truyền của server không (thông điệp kiểm tra xem kết nối có còn đợc duy trì không) nếu đúng thì đáp lại, nếu không phải thông điệp kiểm tra kết nối thì kiểm tra
Đồ án tốt nghiệp Giới thiệu Java và cơ sở dữ liệu trên mạng
hàng đợi, nếu hàng đợi cha đầy thì đa thông điệp vào hàng đợi, nếu hàng đợi đầy thì thông báo lỗi.
♦ Kiểm tra xem đã kết thúc cha.
♦ Nếu cha kết thúc, quay trở lại bớc một để chờ thông điệp tiếp theo. Nếu kết thúc thì kết thúc tiến trình này.
Lu đồ thuật toán cụ thể nh trang bên:
Trong lu đồ thuật toán này thì việc dừng tiến trình này là hoàn toàn do tiến trình mẹ (là tiến trình gọi tiến trình này) thực hiện. Khi tiến trình gọi đến phơng thức stop() trong tiến trình này thì phơng thức stop() sẽ làm cho biết logic trong phơng thức run() của tiến trình này lật trạng thái và phơng thức run() kết thúc.
Trong thuật toán có nói đến lệnh PING và lệnh PONG. Theo chuẩn của IRC thì sau một khoảng thời gian nào đó mà Server không nhận đợc tín hiệu từ phía client thì để xác định xem liệu đờng truyền (kết nối) giữa server và client có còn đợc duy trì không thì server gửi một lệnh PING đến client, nếu nh server sau khi gửi lệnh PING đến client mà không nhận đợc trả lời PONG từ phía client thì nó coi nh kết nối (đ- ờng truyền) đến client đó không còn nữa và tự động đống kết nối với client đó. Điều này rất có ích khi xảy ra trờng hợp là do một yếu tố nào đó mà làm cho đờng truyền từ client đến server bị ngắt hay quá xấu chẳng hạn khi đó nếu nh không có sự kiểm tra này thì server cứ phục vụ một client trong khi client đó đã bị ra khỏi mạng (vì yếu tố ngoại cảnh tác động) nh vậy làm cho hoạt động của server là tối u vì không phải phục vụ thừa trong khi không cần thiết.
bắt đầu bắt đầu chờ dữ liệu từ máy chủ chờ dữ liệu từ máy chủ gửi lệnh pong gửi lệnh pong
thông báo lỗi
thông báo lỗi
đ a dữ liệu vào hàng đợi
đ a dữ liệu vào hàng đợi
kết thúc kết thúc lệnh = null ? lệnh = ping ? hàng đợi đầy kết thúc ? Có Không Có Không Có Không Có Không
Đồ án tốt nghiệp Giới thiệu Java và cơ sở dữ liệu trên mạng
II.2.2.2. Khối phân tích và xử lý thông điệp từ hàng đợi
Nhiệm vụ của khối phân tích và xử lý thông điệp từ hàng đợi gồm:
♦ Kiểm tra xem hàng đợi có rỗng không.
♦ Nếu không rỗng thì lấy một thông điệp trong hàng đợi ra, phân tích và xử lý. Sau đó, kiểm tra xem đã có tín hiệu kết thúc cha, nếu có thì kết thúc, nếu không thì lại quay lại bớc một.
♦ Nếu hàng đợi rỗng thì kiểm tra xem đã có tín hiệu kết thúc cha, nếu có thì kết thúc, nếu không thì lại quay lại bớc một.
Lu đồ thuật toán của khối này nh sau:
bắt đầu bắt đầu lấy một lệnh từ hàng đợi ra, phân tích và xử lý lấy một lệnh từ hàng đợi ra, phân tích và xử lý kết thúc kết thúc hàng đợi rỗng ? kết thúc ? Có Không Không Có
Đồ án tốt nghiệp Giới thiệu Java và cơ sở dữ liệu trên mạng
II.2.2.3. Khối giao tiếp với và nhận thông điệp của ngời sử dụng
Nhiệm vụ của khối này nh sau:
♦ Nhận thông điệp của ngời sử dụng.
♦ Kiểm tra xem thông điệp đó có hợp lệ không, nếu không hợp lệ thì thông báo lỗi và qua lại bớc một. Nếu có hợp lệ thì kiểm tra xem thông điệp đó có phải là lệnh thoát không. Nếu đúng là lệnh thoát thì kết thúc chơng trình. Nếu không thì xử lý thông điệp và quay lại bớc một.
Trong phần kết thúc ở đây, ngoài việc gửi lệnh thoát đến server ra thì tiến trình này phải gọi các phơng thức stop() của hai tiến trình trên (đó là tiến trình nhận thông điệp và tiến trình xử lý thông điệp).
Đồ án tốt nghiệp Giới thiệu Java và cơ sở dữ liệu trên mạng
III.3. Hớng dẫn sử dụng chơng trình
Khi bạn chạy chơng trình thì cửa sổ yêu cầu bạn nhập tên và mật khẩu xuất hiện. Bạn hãy vào tên và mật khẩu mà bạn đăng ký vào mạng, sau đó ấn nút vào hội thoại hoặc ấn ENTER. Nếu bạn vào sai tên hoặc mật khẩu, bạn có thể vào lại bằng cách bấm nút huỷ bỏ và làm lại hoặc
bạn cũng có thể sửa tên và mật khẩu của bạn sau đó ấn ENTER hoặc
bấm nút vào hội thoại.
bắt đầu
bắt đầu
gọi đến hai tiến trình con
gọi đến hai tiến trình con
Nhận lệnh của ng ời sử dụng Nhận lệnh của ng ời sử dụng phân tích và xử lý lệnh phân tích và xử lý lệnh kết thúc kết thúc lệnh hợp lệ ? kết thúc ? Có Không Không Có
Đồ án tốt nghiệp Giới thiệu Java và cơ sở dữ liệu trên mạng
Nếu nh bạn vào sai tên hoặc mật khẩu, bạn sẽ nhận đợc thông báo lỗi phía cuối bên dới màn hình.
Nếu bạn vào đúng tên và mật khẩu thì cửa sổ tiếp theo là cửa sổ của phần hội thoại và bạn nhận đợc thông báo dới dòng thông báo là bạn đã vào mạng với tên lóng là gì đó.
Đồ án tốt nghiệp Giới thiệu Java và cơ sở dữ liệu trên mạng
Trên đây, tôi đã vào mạng với tên lóng (nickname) là AnhTuân. Trên màn hình bạn thấy là có các phần sau:
♦ Các kênh hội thoại: Là một bảng dang sách các kênh hiện đã đợc tạo ra trên mạng. Khi bạn vào mạng thì đã có 5 kênh đợc tạo sẵn, đây là các chủ đề thông dụng nh văn hoá xã hội,...
♦ Những ngời trong mạng: Là danh sách của tất cả những ng- ời hiện đang tham gia vào dịch vụ hội nghị từ xa này.
♦ Các thao tác: Là các thao tác mà bạn có thể thực hiện đợc, gồm có:
1. Đổi mật khẩu:Cho phép bạn đổi mật khẩu của bạn. 2. Đổi tên lóng: Cho phép bạn đổi tên lóng (nickname). 3. Trục xuất ngời sử dụng ra khỏi mạng: Thao tác này
chỉ giành riêng cho ngời điều hành hệ thống. Điều này để ngời điều hành hệ thống khi có một ai đó có hành vi không đợc lấy gì làm lịch sự lắm thì để đảm bảo tính trong sáng của các cuộc nói chuyện.
4. Nhắn tin cho ngời khác đang tham gia hội thoại:
Đồ án tốt nghiệp Giới thiệu Java và cơ sở dữ liệu trên mạng
hội thoại. Khi bạn nhắn tin cho ai đó thì chỉ có ngời đó xem đợc còn những ngời khác cũng đang tham gia hội thoại nhng không thể xem đợc.
5. Tạo một kênh mới: Cho phép bạn tạo một kênh mà trên danh sách kênh cha có. Bạn có thể tạo một kệnh kiểu công cộng (public), với loại kênh này bất kỳ ai trên mạng cũng có thể vào nói chuyện đợc. Nhng bạn cũng có thể tạo một kênh hoàn toàn bí mật (secret). Đối với kênh bí mật bạn phải vào mật khẩu cho kênh và khi kênh đợc tạo thì chỉ có những ngời có mật khẩu của kênh đó mới vào đợc (trừ ngời điều hành hệ thống). Đây là một điều rất thuận lợi nếu bạn muốn nói chuyện riêng với ai đó mà không muốn những ngời khác trên dịch vụ này không thể quấy nhiễu bạn. Để làm điều đó, bạn tạo một kênh bí mật sau đó nhắn tin báo cho ngời bạn muốn nói chuyện riêng và cho họ biết tên kênh và mật khẩu của kênh đó.
6. Vào một kênh đã có trên danh sách kênh: Chức năng này cho phép bạn vào nói chuyện với những ngời khác trên các kênh đã đợc tạo. Nếu nh kênh bạn muốn vào là kênh công cộng thì bạn chỉ việc nháy đúp vào tên kênh sau đó ấn ENTER hoặc ấn nút thực hiện lệnh vừa
chọn là bạn có thể vào nói chuyện đợc. Nếu nh kênh bạn
muốn vào là một kênh bí mật (có mật khẩu) thì chơng trình sẽ nhắc bạn vào mật khẩu cho kênh đó. Nếu bạn vào sai mật khẩu thì không thể vào kênh đó đợc.
♦ Phần các nút thực hiện gồm có hai nút là thực hiện lệnh vừa
chọn để chơng trình thực hiện lênh mà bạn vừa chọn. Nút Thoát khỏi hội thoại để bạn thoát ra khỏi dịch vụ hội thoại
này.
Khi bạn vào một kênh, sẽ có một nút tơng ứng trên cùng đợc nổi lên và tên nút là tên của kênh đó. Bạn có thể tham gia cùng một lúc tham gia hội thoại với 6 kênh khác nhau.