Triển khai chi tiết các kỹ thuật có trong hệ thống

Một phần của tài liệu Dự án hệ điều hành và mạng máy tính: Xây dựng hệ thống quản lý phòng máy (Trang 35 - 47)

CHƯƠNG 2. PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG

2.3. Xây dựng ứng dụng

2.3.2. Triển khai chi tiết các kỹ thuật có trong hệ thống

2.3.2.1.Xử lý việc lấy danh sách ứng dụng đang chạy ở máy client thông qua powershell

Hình 11: Hàm xử lý sự kiện Gửi danh sách ứng dụng

- Câu lệnh: “powershell.exe gps | where {$_.mainwindowhandle -ne 0} | select ProcessName, Id” nhằm thực hiện lấy danh sách các ứng dụng đang chạy, cụ thể:

- gps: viết tắt của ‘Get-Process’ nhằm thực hiện lấy thông tin các tiến trình đang chạy trong hệ thống

- where {$_.mainwindowhandle -ne 0}: nhằm lọc ra các tiến trình có 1 cửa sổ chính (hay có giao diện) đang hiển thị

- select ProcessName, Id: nhằm lấy ra tên tiến trình và Id của tiến trình.

Hình 12: Hàm xử lý sự kiện Đóng ứng dụng

- Sau đó thực hiện gửi danh sách ứng dụng của máy client sang và hiển thị lên giao diện của phía server để quản lí và có thể tắt ứng dụng, thông qua lệnh

taskkill /F /PID appId” trong Cmd

2.3.2.2.Xử lý các sự kiện của chuột, phím khi đang sử dụng remote desktop

Hình 13: Hàm xử lý sự kiện Điều khiển chuột

- Client lắng nghe các sự kiện chuột từ server. Các sự kiện này có thể bao gồm nhấn chuột, thả chuột, di chuyển chuột, kéo chuột, và cuộn chuột. Mỗi sự kiện đi kèm với tọa độ (x, y) và thông tin về nút chuột (chuột trái, giữa, phải).

- Các phương thức của lớp Robot như mouseMove(), mousePress(), mouseRelease() và mouseWheel() được sử dụng để thực hiện các hành động chuột trên máy client.

Điều này cho phép client nhận các sự kiện từ server một cách chính xác và tự động.

Hình 14: Hàm xử lý sự kiện Điều khiển bàn phím

- Tương tự, ta cũng thực hiện nhận sự kiện phím từ server và dùng lớp robot để xử lý - Đối với sự kiện "KEY_TYPED", mã sẽ đọc một chuỗi văn bản và sử dụng phương

thức setClipboardContents(text) để sao chép văn bản đó vào clipboard. Sau đó, nó sẽ gọi pasteFromClipboard(robot) để dán nội dung từ clipboard vào vị trí con trỏ hiện tại.

- Điều này đặc biệt hữu ích cho các ký tự Unicode, chẳng hạn như tiếng Việt, vì khi gõ các ký tự này, mã keycode có thể không được nhận diện chính xác. Việc sao chép vào clipboard và dán lại giúp đảm bảo rằng ký tự được nhập chính xác.

2.3.2.3.Xử lý sự kiện Remote Desktop và Stream

Hình 15: Hàm xử lý sự kiện chức năng Remote Desktop và Stream

- Chúng ta sử dụng thư viện Robot trong Java để thực hiện việc chụp màn hình của máy client và truyền ảnh này dưới dạng byte đến server. Quá trình chụp màn hình diễn ra liên tục với tần suất 10ms, giúp cập nhật hình ảnh trên giao diện remote desktop ở phía server một cách liên tục và mượt mà.

- Đầu tiên, một đối tượng Robot được khởi tạo để chụp toàn bộ màn hình của máy client. Hình ảnh chụp được sau đó được chuyển đổi thành mảng byte thông qua ByteArrayOutputStream, với định dạng JPEG. Ta sẽ gửi kích thước của mảng byte trước khi gửi chính dữ liệu hình ảnh. Điều này giúp server nhận biết kích thước dữ liệu mà nó sắp nhận.

- Quá trình này lặp lại liên tục, với mỗi lần chụp và gửi hình ảnh mới sau khoảng thời gian 10ms. Nhờ vào cơ chế này, hình ảnh màn hình của máy client sẽ luôn được cập nhật trên giao diện remote desktop ở phía server, tạo ra trải nghiệm tương tác trực tiếp cho người dùng.

2.3.2.4.Xử lí sự kiện chặn tên miền

Hình 16: Hàm xử lý sự kiện chức năng Chặn tên miền

- Câu lệnh ‘New-NetFirewallRule -DisplayName “Block IP name” -Direction Outbound -Action Block -RemoteAddress ip’ cụ thể:

- New-NetFirewallRule: Tạo ra 1 quy luật tường lửa mới

- DisplayName: Tên của quy luật này, ta bổ sung thêm phần name để xác định được tên domain bị block, tiện cho việc huỷ quy luật này sau này

- Direction: Chọn Outbound vì ta cần chặn lưu lượng ip từ máy client tới domain này

- Action: Hành dộng ở đây được xác định là Block(chặn) - RemoteAddress: Địa chỉ IP của tên miền.

- Câu lệnh powershell này được chạy dưới quyền administrator nên ta cần bổ sung thêm “-Verb RunAs”.

2.3.2.5.Xử lí sự kiện webcam

Hình 17: Hàm xử lý sự kiện chức năng Bật camera và gửi hình ảnh ở Client - VideoCapture: Là một đối tượng của OpenCV để truy cập camera.

- Capture.open(0): Mở camera mặc định trên máy.

- Mat: Là đối tượng lưu trữ một khung hình của OpenCV.

- MatOfByte: Là đối tượng lưu trữ dữ liệu ảnh của OpenCV

- Capture.read(frame): Lấy một khung hình từ camera và lưu vào frame.

- Imgcodecs.imencode(".jpg", frame, matOfByte): Chuyển khung hình frame thành định dạng JPG và lưu vào matOfByte.

- matOfByte.toArray(): Chuyển đổi dữ liệu ảnh từ MatOfByte thành mảng byte (byte[]).

- capture.release(): Giải phóng (tắt) camera.

Hình 18: Hàm xử lý sự kiện nhận hình ảnh từ Client - matOfByte: Chuyển đổi mảng byte thành dữ liệu ảnh

- Imgcodecs.imdecode(matOfByte, Imgcodecs.IMREAD_COLOR): Giải mã dữ liệu ảnh thành đối tượng Mat (ma trận ảnh).

- convertMatToImage(frame): Hàm hỗ trợ để chuyển đổi ảnh từ Mat sang BufferredImage.

- Imgcodecs.imencode(".jpg", frame, matOfByte): Chuyển khung hình frame thành định dạng JPG và lưu vào matOfByte.

- ImageIO.read(byteArrayInputStream): Đọc dữ liệu từ luồng để tạo một đối tượng BufferedImage.

2.3.2.6.Xử lí sự kiện truyền file

Hình 19: Hàm xử lý sự kiện chức năng Truyền file

- Đoạn mã sử dụng một mảng byte với kích thước 8192 bytes (8 KB) để đọc dữ liệu từ DataInputStream. Kỹ thuật này cho phép chia nhỏ file thành các phần nhỏ hơn, giúp xử lý các file có kích thước lớn mà không gặp phải vấn đề về bộ nhớ.

- Trong khi tổng số byte đã đọc chưa đạt kích thước file, vòng lặp sẽ tiếp tục đọc dữ liệu từ stream vào buffer và ghi vào file. Điều này đảm bảo rằng toàn bộ dữ liệu được truyền tải cho đến khi file hoàn tất.

Một phần của tài liệu Dự án hệ điều hành và mạng máy tính: Xây dựng hệ thống quản lý phòng máy (Trang 35 - 47)

Tải bản đầy đủ (PDF)

(59 trang)