CHƯƠNG 5 THIẾT KẾ CHI TIẾT SERVER
5.7. Lớp thực hiện tương tác với User RequestHandler
Lớp RequestHandler thể hiện sự tương tác giữa Server và User. Khi có một kết nối đến từ hệ thống, socket được tạo ra và lớp RequestHandler sẽ sử dụng nó để tương tác với User. Lớp này sẽ nhận bài toán và các thông số khác (timeout) để hệ thống chuyển bài toán đến các Solver giải bài toán đó.
Khi có một User kết nối đến Server, User đầu tiên sẽ gửi lời chào đến hệ thống. Sau khi nhận được lời chào đó, hệ thống sẽ gửi lời chào lại đến User để User có thể biết được kết nối đến Server đã thành công và sinh ra một mã session_id mới để làm việc.
Sau khi gửi lời chào đến Server, User sẽ gửi thông tin về thời gian tối đa giải quyết bài toán cho Server thông qua cặp thẻ <timeout> và </timeout> (Hình 5.11).
<timeout> xx </timeout>
Hình 5.11 Cách thông số timeout lên Server.
Trong đó xx thuộc kiểu nguyên là thời gian tối đa thực hiện bài toán tính bằng giây. Điều kiện là xx phải lớn hơn 0 và nhỏ hơn gia trị tối đa được thiết lập trong hệ thống. Nếu người dùng truyền vào một giá trị lớn hơn giá trị tối đa của hệ thống, hệ thống sẽ tự cập nhật
này kèm với session_id để các Solver biết được thời gian thực hiện giải bài toán của session ấy tối đa là bao nhiêu.
Sau đó, lớp RequestHandler sẽ nhận toàn bộ nội dung của bài toán qua inputstream truyền về và chuyển trực tiếp cho các Solver trong hệ thống. Bài toán được gửi đến Solver và hệ thống sẽ chờ kết quả bài toán từ Solver. Khi kết quả được trả về cho hệ thống, hệ thống sẽ trả kết quả về cho người dùng qua lớp RequestThread giống như mô tả của lớp này phía trên sử dụng phương thức sendResultToClient(String result) của lớp này.
Một điều đặc biệt, đó là trong khi làm việc vì một lí do nào đó có thể kết nối nó thể bị gián đoạn, việc bắt ngoại lệ đã được xử lý ở trong lớp này. Khi kết nối bị ngắt đột ngột, ta sẽ hủy bỏ Session đã tạo ra, ngắt tất cả các tiến trình của phiên làm việc đó và đóng kết nối giữa Server với User đó.