Lớp tương tác với các Solve r SolverHandler

Một phần của tài liệu xây dựng hệ thống giải bài toán smt hiệu năng cao – phần máy chủ (Trang 37 - 39)

CHƯƠNG 5 THIẾT KẾ CHI TIẾT SERVER

5.8.Lớp tương tác với các Solve r SolverHandler

Lớp này thể hiện sự tương tác giữa Solver và Server. Cách thức tương tác giữa Solver và Server dựa trên session_id. Server sẽ chuyển giao bài toán SMT đến cho Solver, sau đó chờ Solver phản hồi kết quả về cho Server để Server chuẩn hóa kết quả rồi trả về cho người dùng, chú ý là Solver có thể giải một lúc nhiều bài toán khác nhau.

Khi có một Solver kết nối đến Server, Server sẽ tạo ra một đối tượng SolverHander cho socket đó. Sau đó, thông tin của Solver (tên) sẽ được gửi cho Server để Server lưu thông tin đó lại. Dựa vào tên của Solver, Server sẽ biết được kiểu output nào để chuẩn hóa đầu ra.

Mỗi SolverHander quản lý một số các Session_id trong mảng SessionArr – Mảng chứa các session, số lượng các session_id đang hoạt động chính là số lượng các bài toán đang được giải quyết trong thời điểm hiện tại của các Solver.

+ AddContentSession (int sess_id, String addContent): Nối tiếp thêm nội dung của session có mã bằng với sess_id.

+ AddNewSession (int sess_id): Thêm một session trong SessionArr của SolverHandler.

+ DeleteSession (int sess_id): Xóa bỏ một session trong SessionArr, bằng cách thay đổi trạng thái hoạt động của session đó và chuyển nội dung của session đó thành trống, giải phóng bộ nhớ (Hình 5.12).

public void DeleteSession(int sess_id) { for (int i = 0; i< ServerSMT.maxThreads; i++) if (SesstionArr[i].session_id == sess_id){ SesstionArr[i].session_id = 0; SesstionArr[i].content = ""; SesstionArr[i].active = false; break; } }

Hình 5.12 Phương thức xóa bỏ một Session thuộc lớp SolverHandler.

+ getContentFromMessage(String mess): Lấy ra phần nội dung của một dòng dữ liệu gửi đến Server bằng cách tách bỏ phần session_id phía trước của dòng đó.

+ getSessionIdFromMessage (string mess): Xác định dòng dữ liệu được gửi đến Server thuộc về Session nào.

+ killSesstionProcess (int Sess_id): Hủy bỏ tiến trình đang chạy của Solver có session_id bằng giá trị sess_id được truyền vào sau khi bài toán đã được giải bởi 1 trong số các Solver của hệ thống. Việc này nhằm tiết kiệm tài nguyên máy, tạo không gian để Solver có thể giải quyết các bài toán khác.

+ returnResult (int sess_id): Khi nhận được kết quả của bài toán từ Solver trả về, ta phải chuyển kết quả về cho RequestThread để RequestThread xác định xem bài toán đó thuộc về User nào để chuyển kết quả cho người dùng.

quả nó sẽ đọc cho đến khi có tín hiệu kết thúc của kết quả đó rồi mới gửi kết quả đó về cho RequestThread chuyển cho User.

Một phần của tài liệu xây dựng hệ thống giải bài toán smt hiệu năng cao – phần máy chủ (Trang 37 - 39)