Quản lý phòng máy

Tài liệu Quản lý phòng máy: ... Ebook Quản lý phòng máy

pdf233 trang | Chia sẻ: huyen82 | Lượt xem: 1968 | Lượt tải: 1download
Tóm tắt tài liệu Quản lý phòng máy, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
1 Chương 1 Tổng quan 1.1 Chương trình quản lý phòng máy bao gồm những gì? Trong quá trình khảo sát các chương trình quản lý phòng máy đang sử dụng tại Việt Nam, chúng em tạm phân loại các yêu cầu đề ra là : các yêu cầu cần, các yêu cầu đủ, và các yêu cầu mở rộng. 1.1.1 Các yêu cầu cần: Bản thân chương trình quản lý máy thuê Internet phải có khả năng tính tiền cước hợp lý cho người sử dụng. Người thuê máy cần cảm thấy việc tính cước đúng và làm họ hài lòng. Ngoài ra, nếu phòng máy còn có phục vụ món ăn, dịch vụ như: tạp chí, sách báo… thì một yêu cầu cần khác là cần tính phí phục vụ cho người dùng. Đối với người dùng, họ cảm thấy hài lòng khi việc phục vụ được nhanh chóng và chu đáo. 1.1.2 Các yêu cầu đủ: Ngoài hai yêu cầu trên, việc bảo mật bảo mật và kiểm duyệt nội dung web cũng rất quan trọng do nó cũng ảnh hưởng một phần đến việc kinh doanh (chẳng hạn, thể gây ảnh hưởng uy tín phòng máy khi lướt web đen…). Vì vậy, các yêu cầu kiểm soát hệ thống máy khách được đặt ra như quan sát màn hình máy khách, đọc nội dung người dùng gõ… 1.1.3 Các yêu cầu mở rộng: Ngoài các dạng yêu cầu trên, các yêu cầu còn lại là các yêu cầu mở rộng. Thật ra, các yêu cầu mở rộng chỉ có tính tương đối. Tùy thuộc yêu cầu đặt ra cho phần mềm mà ta có thể xem xét thêm các yêu cầu mở rộng như là yêu cầu đủ. Các yêu cầu mở rộng thường thấy là : lọc liên kết web, nội dung web, nhắn tin di động, chat nội bộ giữa các máy khách với nhau, đa ngôn ngữ… 2 1.2 Các chương trình quản lý phòng máy hiện nay ở Việt Nam. 1.2.1 Cyber Station Manager Cyber Station Manager là phần mềm quản lý khách hàng, thời gian sử dụng máy trạm, điều khiển máy trạm do công ty trách nhiệm hữu hạn Đan Thanh viết. Chương trình có các chức năng chính: o Quản lý thông tin các máy trạm o Quản lý thông tin các hội viên o Quản lý hóa đơn 1.2.2 Internet Café Software: Do công ty PA Việt Nam 65 đường Sư Vạn Hạnh nối dài Q.10 Tp. Hồ Chí Minh viết. Các tính năng chính: o Quản lý thông tin các máy trạm 1.2.3 iSystem 3.0 : Hệ phần mềm chuyên nghiệp cho máy dịch vụ game – Internet, gồm hai phần : o iSystem hỗ trợ quản trị mạng từ bất cứ máy nào trong mạng nội bộ, hỗ trợ lọc web đen, biên tập danh bạ web, phân vùng khởi động, hỗ trợ kết nối Internet và ADSL. o iNetman hỗ trợ quản lý đồng thời nhiều loại dịch vụ (game, Internet…) và quản lý bán hàng. Do công ty TBNet 111 Lý Thường Kiệt Tp Thái Bình – tỉnh Thái Bình. 1.2.4 EasyCafe : Do công ty Tinasoft tại Thổ Nhĩ Kỳ viết. Các chức năng: o Quản lý thông tin các máy trạm. 3 o Quản lý thông tin các hội viên. o Quản lý hóa đơn. o Lọc thông tin. o Nhắn tin di dộng. o Điều khiển từ xa các máy trạm. 1.3 Các ưu khuyết điểm của các chương trình trên. 1.3.1 Cyber Station Manager Ưu điểm : Phần mềm quản lý chi tiết việc phân loại khách hàng gồm : hội viên, khách vãng lai và người quản trị cả Server và Client. Các cách tính cước cho người dùng phong phú: trả tiền trước, trả tiền sau, cộng dồn tiền cước các máy(cho phép đổi máy sử dụng khi đang sử dụng máy nào đó). Cộng thêm thời gian sử dụng miễn phí cho khách. Thêm phí tự động cho khách khi khách có yêu cầu. Khuyết điểm: Cài đặt phức tạp( do dùng MySQL). Sử dụng Tiếng Việt không dấu. Các chức năng quản lý máy trạm đơn giản. Các chức năng điều khiển từ xa còn ít. 1.3.2 Internet Café Software Ưu điểm : - Giao diện đơn giản, dễ dùng. Có thể chuyển đổi máy cho khách hàng. - Màn hình screen che khá hiệu quả . Khuyết điểm: - Các chức năng không đầy đủ( Chương trình chỉ có phần tính cước, in báo biểu). 4 - Phải đổi tên máy ngay khi bắt đầu sử dụng bên phía Server. Máy phải khởi động lại. 1.3.3 iSystem 3.0 Ưu điểm : - Giao diện đơn giản, dễ dùng. Có thể chuyển đổi máy cho khách hàng. Khuyết điểm: - Mặc dù có một số chức năng quản trị máy từ xa, nhưng vẫn còn rất ít (chỉ có tắt máy, nhắn tin từ máy chủ). - Phải đổi tên máy ngay khi bắt đầu sử dụng bên phía Server. Máy phải khởi động lại. 1.3.4 Easy Café: Ưu điểm : - Có gần như đầy đủ tất cả các chức năng quản lý cần thiết và mở rộng. - Hỗ trợ đa ngôn ngữ. - Có thể xem đây phần mềm điển hình về việc quản lý các máy trạm ở phòng cho thuê dịch vụ Internet. Khuyết điểm: - Vì phải quản lý chi tiết mọi thứ nên giao diện phức tạp, khó dùng. - Không hỗ trợ tiếng Việt mặc dù là phần mềm đa ngôn ngữ. 5 Chương 2 Xây dựng chương trình quản lý phòng máy 2.1 Xác định yêu cầu: 2.1.1 Các yêu cầu chức năng: Xây dựng phần mềm quản lý phòng thuê Internet, chương trình có yêu cầu quản lý những tính năng cần là: Các tính năng cần là: Tính cước sử dụng máy Tính cước phục vụ món Quản lý báo cáo Các tính năng đủ là: Kiểm soát các họat động máy khách và nội dung sử dụng của người dùng 2.1.2 Các yêu cầu phi chức năng: 2.2 Phân tích thiết kế hệ thống: 2.2.1 Xây dựng Use Case: 2.2.1.1 Xác định Actor và Use Case phía Server: Actor: Người sử dụng chương trình Server ở máy chủ - Người quản lý. Use Case: Start Server: Chạy chương trình Server. Login: Cho phép Client sử dụng máy tính với trạng thái username=”anonymous” , password=””. Logout: Không cho phép Client sử dụng máy tính. Paid: Tính tiền người dùng. 6 Banner: Thông tin (các nội quy của phòng máy ) người quản lý muốn cho khách hàng biết. Report : Report Debit: Thống kê các khách hàng nợ. Report Daily: Thống kê các thông tin kết nối của các máy khách hằng ngày. Report Month: Thống kê tình trạng sử dụng các máy theo tháng. Option : Manage Cafeteria: Người quản lý có thể xem, sửa hay bổ sung các loại món ăn, thức uống. Manage Kind of Food: Người quản lý có thể xem, sửa hay bổ sung các món ăn, thức uống. Manage Price Day: Người quản lý có thể xem, sửa hay bổ sung giá truy cập internet theo ngày cụ thể. Manage Debit: Người quản lý thêm vào cơ sở dữ liệu khách hàng còn nợ. Manage Member: Người quản lý có thể xem, sửa hay bổ sung thành viên. Administration: Lock Key: Cho phép người quản lý có thể khóa tất cả các phím hay một số phím trên một máy khách đang sử dụng. Log Key: Cho phép người quản lý có thể ghi nhận lại các phím khách hàng sử dụng trên một máy khách đang sử dụng. Manage Application: Cho phép người quản lý có thể biết được các ứng dụng chạy trên máy khách, và người quản lý cũng có thể bật hay tắt một ứng dụng nào đó. Manage Service: Cho phép người quản lý có thể biết được các service chạy trên máy khách, và người quản lý cũng có thể thay đổi loại 7 khởi động (Automatic, Manual hay Disable) hay cũng có thể trạng thái service(Start hay Stop). Manage Remote Computer: Cho phép người quản lý có thể Logout, Restart hay Shutdown một máy khách bất kỳ hay cho tất cả các máy theo các tinh chỉnh về thời gian thực hiện. Send Message: Cho phép người quản lý có thể gởi tin nhắn đến một máy khách bất kỳ hay cho tất cả các máy. Snapshot: Cho phép người quản lý có thể chụp hình tĩnh hay hình động máy khách. Khi chụp tĩnh, tối đa chụp được 4 máy khách. Khi chụp động thì chụp được 1 máy khách. 2.2.1.2 Xác định các Actor và Use Case phía Client: Actor: Người sử dụng chương trình Screen. Use Case: Connect: thực hiện kết nối với Server để vào trạng thái chờ. Login Member: thực hiện login vào Server dưới hình thức Member. Actor: Người sử dụng chương trình Client. Use Case: Connect: thực hiện kết nối với Server để vào trạng thái sử dụng. Order: thực hiện đặt món ăn từ danh sách với Server. 2.2.1.3 Mô hình Use Case: 2.2.1.3.1 Phía Server 8 Paid (from User Case) Start Server (from Use Case) Login (from Use Case) Logout (from Use Case) Set Banner (from Use Case) Report (from Use Case) Change Option (from User) Administration (from User) Service order (from User) User Hình 2-1 Mô hình Use Case tổng quát Month Report (from User) Daily Report (from User) Debit Report (from User) User Hình 2-2 Mô hình Use Case Report 9 Manage Cafeteria (from User) Manage Debit (from User) Manage Price Day (from User) Manage Kind of Food (from User) User Manage Member (from User) Hình 2-3 Mô hình Use Case Manage Manage Remote Computer (from User) Lock Key (from User) Log Key (from User) Manage Application (from User) Manage Service (from User) Send Message (from User) Snap Shot (from User) User Apply Policy (from User) Hình 2-4 Mô hình Use Case Administrator 10 2.2.1.3.2 Phía Client: 2.2.1.3.2.1 Screen: Connect (from User) Login Member (from User) User Hình 2-5 Mô hình Use case Screen 2.2.1.3.2.2 Client: Connect Order (from User) User Hình 2-6 Mô hình Use case Client 11 2.2.2 Đặt tả Use Case: 2.2.2.1 Phía Server: 2.2.2.1.1 Start Server Use Case: Tên Use Case: Start Server. Mô tả : Server khởi động và lắng nghe kết nối. Dòng sự kiện : - Dòng sự kiện chính : + Người dùng khởi động chương trình. + Chương trình sẽ thực hiện việc mở cơ sở dữ liệu. + Kiểm tra thông tin kết nối . + Thực hiện việc lắng nghe các kết nối từ máy khách. - Dòng sự kiện khác: + Nếu có lỗi về việc mở cơ sở dữ liệu thì chương trình sẽ báo lỗi và thoát ra khỏi chương trình. + Nếu không có thông tin về số lượng máy có thể kết nối thì sẽ xuất thông báo yêu cầu nhập thông tin. + Nếu lần trước Server bị “chết”, thì bây giờ Server sẽ kiểm tra lại kết nối từ các máy khách. - Điều kiện tiên quyết: + Phải có cơ sở dữ liệu. - Điều kiện bổ sung : + Chương trình phải đăng ký các Active X về List View. - Điểm mở rộng: + Không có. 2.2.2.1.2 Login Use Case : Tên Use Case : Login. Mô tả : 12 Người quản lý có thể cho máy khách login với tư cách là anonymous. Dòng sự kiện : -Dòng sự kiện chính : + Use case này bắt đầu khi người quản lý chọn Login. + Server kiểm tra xem máy khách có đang ở trạng thái chờ ? + Nếu hợp lệ Server gởi thông điệp đến máy khách. + Client nhận thông điệp sẽ tắt màn hình Screen và gởi thông điệp chấp nhận về Server. + Server nhận thông điệp sẽ cho phép khách hàng ở máy khách có thể sử dụng với tư cách anonymous. Chương trình bắt đầu tính tiền cho khách hàng từ lúc này cho đến lúc khách hàng kết thúc sử dụng - Dòng sự kiện khác : + Nếu Server kiểm tra máy khách không phải ở trạng thái chờ thì không cho Login. - Điều kiện tiên quyết: + Không có. - Hậu điều kiện: + Máy chuyển từ trạng thái chờ sang trạng thái sử dụng. - Điểm mở rộng: + Không có. 2.2.2.1.3 Logout Use Case: Tên Use Case : Logout. Mô tả : Kết thúc việc khách hàng sử dụng máy khách. Dòng sự kiện : - Dòng sự kiện chính : + Use case bắt đầu khi khách hàng chọn Logout. + Server gởi thông điệp cho Client, cập nhật lại database. 13 + Client nhận thông điệp và tắt hết các chương trình đang sử dụng. + Client bật màn hình che( màn hình Screen). + Màn hình che connect lại với Server. - Dòng sự kiện khác: + Không có. - Điều kiện tiên quyết: + Client phải Login vào Server trước. - Hậu điều kiện: + Máy chuyển từ trạng thái sử dụng sang trạng thái chờ. - Điểm mở rộng: + Không có . 2.2.2.1.4 Paid Use Case: Tên Use Case : Paid. Mô tả : Kết thúc việc khách hàng sử dụng máy khách và tính tiền. Dòng sự kiện : - Dòng sự kiện chính : + Use case bắt đầu khi người quản lý chọn Paid. + Server gởi thông điệp cho Client. + Client nhận thông điệp và tắt hết các chương trình đang sử dụng. + Client bật màn hình che( màn hình Screen). + Server tính tiền sử dụng và tiền các dịch vụ liên quan và xuất ra màn hình. - Dòng sự kiện khác: + Không có. - Điều kiện tiên quyết: + Client phải Login vào Server trước. - Hậu điều kiện: + Máy chuyển từ trạng thái sử dụng sang trạng thái chờ. 14 - Điểm mở rộng: + Không có. 2.2.2.1.5 Service Order Use Case: Tên Use Case : Service Order. Mô tả : Phục vụ món ăn cho khách hàng. Dòng sự kiện : - Dòng sự kiện chính : + Use case bắt đầu khi khách hàng yêu cầu phục vụ món ăn thức uống. + Người quản lý chọn máy khách mà khách hàng yêu cầu phục vụ. Khi đó danh sách các món ăn, thức uống mà khách hàng yêu cầu hiện ra. + Người quản lý phục vụ lần lượt các món ăn. Lúc đó, tiền dịch vụ được cập nhật vào trong tiền sử dụng máy. - Dòng sự kiện khác: + Không có. - Điều kiện tiên quyết: + Máy khách đang ở trạng thái sử dụng. - Hậu điều kiện: + Không có. - Điểm mở rộng: + Không có. 2.2.2.1.6 Set Banner Use Case: Tên Use Case: Banner. Mô tả : Thông báo các quy định về sử dụng phòng máy cho khách hàng. Dòng sự kiện : - Dòng sự kiện chính : + Use case bắt đầu khi người quản lý chọn Set Banner. + Nhập các quy định mà người quản lý muốn khách hàng cần biết. 15 + Server gởi thông điệp đến tất cả các máy khách có kết nối với Server. + Client nhận thông điệp sẽ cập nhật thông báo. - Dòng sự kiện khác: + Không có. - Điều kiện tiên quyết: + Máy khách đang ở trạng thái sử dụng. - Hậu điều kiện: + Không có. - Điểm mở rộng: + Không có. 2.2.2.1.7 Daily Report Use Case: Tên Use Case: Daily Report. Mô tả: Hiển thị thông tin kết nối của các máy khách hằng ngày. Dòng sự kiện : - Dòng sự kiện chính : + Use case bắt đầu khi người quản lý chọn thống kê hàng ngày. + Chương trình đọc cơ sở dữ liệu từ bảng Daily Report và xuất ra màn hình. - Dòng sự kiện khác: + Nếu có lỗi cơ sở dữ liệu thì chương trình sẽ hiển thị thông báo. - Điều kiện tiên quyết: + Không có. - Hậu điều kiện: + Không có. - Điểm mở rộng: + Không có. 2.2.2.1.8 Month Report Use Case: 16 Tên Use Case: Daily Report Mô tả: Hiển thị thông tin tiền của máy khách kiếm được trong cả tháng Dòng sự kiện : - Dòng sự kiện chính : + Use case bắt đầu khi người quản lý chọn Month Report. + Chương trình đọc cơ sở dữ liệu từ bảng Month Report và xuất ra màn hình. - Dòng sự kiện khác: + Nếu có lỗi cơ sở dữ liệu thì chương trình sẽ hiển thị thông báo. - Điều kiện tiên quyết: + Không có. - Hậu điều kiện: + Không có. - Điểm mở rộng: + Không có. 2.2.2.1.9 Debit Report Use Case: Tên Use Case: Debit Report. Mô tả: Hiển thị danh sách các khách hàng còn nợ. Dòng sự kiện : - Dòng sự kiện chính : + Use case bắt đầu khi người quản lý chọn biểu tượng Debit Report. + Chương trình đọc cơ sở dữ liệu từ bảng Debit Report và xuất ra màn hình. + Khi người dùng chọn một khách hàng nợ thì thông tin chi tiết về người khách nợ đó sẽ xuất ra màn hình. - Dòng sự kiện khác: + Nếu có lỗi cơ sở dữ liệu thì chương trình sẽ hiển thị thông báo. 17 - Điều kiện tiên quyết: + Không có. - Hậu điều kiện: + Không có. - Điểm mở rộng: + Không có. 2.2.2.1.10 Manage Kind of Food Use Case: Tên Use Case: Kind of Food. Mô tả : Người quản lý có thể xem, sửa hay bổ sung các loại món ăn, thức uống. Dòng sự kiện : - Dòng sự kiện chính : + Use case này bắt đầu khi người quản lý chọn chức năng quản lý loại món ăn, thức uống. + Màn hình xuất danh sách các loại món ăn, thức uống. + Người quản lý có thể chọn chức năng edit để sửa đổi thông tin: luồng sự kiện phụ là sửa đổi một loại thức ăn được kích hoạt. + Người quản lý có thể chọn chức năng Add new để thêm thông tin luồng sự kiện phụ là thêm một loại thức ăn được kích hoạt. + Người quản lý có thể chọn chức năng Delete để xóa thông tin: luồng sự kiện phụ là xóa một loại thức ăn được kích hoạt. Sửa đổi một loại thức ăn: + Chọn loại thức ăn. + Nhập mới tên loại thức ăn. + Chọn chức năng Edit. 18 + Chương trình sẽ cập nhật lại cơ sở dữ liệu. Thêm một loại thức ăn: + Nhập tên loại thức ăn. + Chọn chức năng Add. + Chương trình sẽ cập nhật lại cơ sở dữ liệu. Xóa một lọai thức ăn: + Chọn loại thức ăn. + Chọn chức năng Delete. + Chương trình sẽ cập nhật lại cơ sở dữ liệu. - Dòng sự kiện khác: + Không có. - Điều kiện tiên quyết: + Không có. - Hậu điều kiện: + Không có. - Điểm mở rộng: + Không có. 2.2.2.1.11 Manage Cafeteria Use Case: Tên Use Case: Manage Cafeteria. Mô tả: Người quản lý có thể xem, sửa hay bổ sung các món ăn. Dòng sự kiện : - Dòng sự kiện chính : + Use case này bắt đầu khi người quản lý chọn chức năng quản lý thức ăn, thức uống. + Màn hình xuất danh sách các món ăn, thức uống. + Người quản lý có thể chọn chức năng edit để sửa đổi thông tin: luồng sự kiện phụ là sửa đổi thức ăn, thức uống được kích hoạt. 19 + Người quản lý có thể chọn chức năng Add new để thêm thông tin luồng sự kiện phụ là thêm thức ăn, thức uống được kích hoạt. + Người quản lý có thể chọn chức năng Delete để xóa thông tin:luồng sự kiện phụ là xóa thức ăn, thức uống được kích hoạt. Sửa đổi thức ăn, thức uống: + Chọn thức ăn, thức uống. + Nhập mới các thông tin cần thiết như tên , giá cả… + Chọn chức năng Edit. + Chương trình sẽ cập nhật lại cơ sở dữ liệu. Thêm thức ăn, thức uống: + Nhập mới các thông tin cần thiết như tên , giá cả… của thức ăn, thức uống. + Chọn chức năng Add. + Chương trình sẽ cập nhật lại cơ sở dữ liệu. Xóa thức ăn, thức uống: + Chọn thức ăn, thức uống. + Chọn chức năng Delete. + Chương trình sẽ cập nhật lại cơ sở dữ liệu. - Dòng sự kiện khác: + Không có. - Điều kiện tiên quyết: + Không có. - Hậu điều kiện: + Không có. - Điểm mở rộng: + Không có. 20 2.2.2.1.12 Manage Price Day Use Case: Tên Use Case: Manage Price Day. Mô tả: Người quản lý có thể xem, sửa hay bổ sung giá truy cập internet theo ngày cụ thể. Dòng sự kiện : - Dòng sự kiện chính : + Use case này bắt đầu khi người quản lý chọn chức năng quản lý giá dịch vụ. + Người quản lý chọn ngày cần quản lý. + Màn hình xuất giá truy cập 7 ngày trong tuần mà ngày đã chọn thuộc vào. + Người quản lý chọn các giờ rồi chọn chức năng edit để sửa đổi giá cả. - Dòng sự kiện khác: + Nếu không chọn thì giá cả là mặc định. - Điều kiện tiên quyết: + Không có. - Hậu điều kiện: + Không có. - Điểm mở rộng: + Không có. 2.2.2.1.13 Manage Debit Use Case: Tên Use Case: Manage Debit Mô tả : Người quản lý thêm vào cơ sở dữ liệu khách hàng còn nợ Dòng sự kiện : - Dòng sự kiện chính : + Use case này bắt đầu khi người quản lý chọn chức năng quản lý khách hàng nợ. 21 + Màn hình sẽ hiển thị các thông tin cho người quản lý nhập mới. + Người quản lý chọn máy mà khách hàng đã sử dụng, khi đó danh sách các giờ Login vào máy đó sẽ xuất hiện. Người quản lý chọn một trong số các giờ bắt đầu đó. + Sau đó nhập vào một số thông tin (bao gồm Tên, Địa chỉ, Số điện thoại, tiền trả trước ….). + Sau khi nhập xong, chương trình sẽ lưu xuống cơ sở dữ liệu - Dòng sự kiện khác: + Không có - Điều kiện tiên quyết: + Không có. - Hậu điều kiện: + Không có. - Điểm mở rộng: + Không có. 2.2.2.1.14 Manage Member Use Case: Tên Use Case :Manage Member. Mô tả : Người quản lý Dòng sự kiện : - Dòng sự kiện chính : + Use case này bắt đầu khi người quản lý chọn chức năng quản lý thành viên của phòng máy. + Chương trình xuất hiện cửa sổ mới có danh sách các thành viên. 22 + Người quản lý có thể chọn chức năng edit để sửa đổi thông tin: luồng sự kiện phụ là sửa đổi thành viên được kích hoạt. + Người quản lý có thể chọn chức năng Add new để thêm thông tin luồng sự kiện phụ là thêm thành viên được kích hoạt. + Người quản lý có thể chọn chức năng Delete để xóa 1 record luồng sự kiện phụ là xóa thành viên được kích hoạt. Sửa đổi thành viên: + Chọn thành viên. + Nhập mới các thông tin cần thiết như tên , địa chỉ, số điện thoại… + Chọn chức năng Edit. + Chương trình cập nhật các thông tin thay đổi vào cơ sở dữ liệu. Thêm thức ăn, thức uống: + Nhập mới các thông tin cần thiết như tên , địa chỉ, số điện thoại…của thành viên. + Chọn chức năng Add. + Chương trình lưu thông tin vào cơ sở dữ liệu. Xóa thức ăn, thức uống: + Chọn thành viên. + Chọn chức năng Delete. + Chương trình xóa thông tin trong cơ sở dữ liệu. - Dòng sự kiện khác: + Không có. - Điều kiện tiên quyết: + Không có. - Hậu điều kiện: 23 + Không có. - Điểm mở rộng: + Không có. 2.2.2.1.15 Lock Keys Use Case : Tên Use Case: Lock Keys. Mô tả : Cho phép người quản lý khóa các phím của máy khách. Dòng sự kiện : - Dòng sự kiện chính : + Use case bắt đầu khi người quản lý yêu cầu khóa phím. + Người quản lý chọn máy khách mà người quản lý muốn khóa. + Chọn chế độ khóa là khóa tất cả phím, khóa phím F1- >F2, khóa phím A->Z, khóa phím số , khóa phím dấu, khóa phím hỗ trợ, khóa phím bất kỳ. + Khi đó Server sẽ gởi thông điệp đến máy khách, máy khách nhận thông điệp sẽ thực hiện khóa phím tương ứng với chế độ khóa. + Nếu thực hiện thành công thì máy khách sẽ gởi thông điệp báo cho Server là khóa thành công. + Để kết thúc việc khóa, người quản lý chọn Mở khóa tất cả + Khi đó Server sẽ gởi thông điệp đến máy khách, máy khách nhận thông điệp sẽ thực hiện mở khóa tất cả các phím. + Nếu thực hiện thành công thì máy khách sẽ gởi thông điệp báo cho Server là mở khóa thành công. - Dòng sự kiện khác: + Nếu không thành công thì máy khách gởi thông điệp cho Server báo là không thành công. 24 - Điều kiện tiên quyết: + Không có. - Hậu điều kiện: + Không có. - Điểm mở rộng: + Không có. 2.2.2.1.16 Log Keys Use Case : Tên Use Case: Log Keys. Mô tả : Cho phép người quản lý có thể ghi nhận lại các phím khách hàng sử dụng trên máy khách. Dòng sự kiện : - Dòng sự kiện chính : + Use case bắt đầu khi người quản lý yêu cầu ghi nhận phím. + Người quản lý chọn máy khách mà người quản lý muốn ghi nhận phím. + Chọn bắt đầu ghi nhận. + Khi đó Server sẽ gởi thông điệp đến máy khách, máy khách nhận thông điệp sẽ ghi nhận các phím người dùng đã nhấn. + Người quản lý muốn xem những thông tin đã ghi nhận, sẽ dừng tiến trình ghi nhận thông tin. Khi đó Server sẽ gởi thông điệp đến máy khách, máy khách nhận thông điệp sẽ thực hiện gởi thông tin ghi nhận cho Server + Nếu nhận thông tin thành công Server sẽ thông báo thành công. + Người quản lý có thể xem thông tin ghi nhận. - Dòng sự kiện khác: 25 + Không có. - Điều kiện tiên quyết: + Máy khách phải đang ở trạng thái sử dụng. - Hậu điều kiện: + Không có. - Điểm mở rộng: + Không có. 2.2.2.1.17 Manage Application Use Case: Tên Use Case: Manage Application. Mô tả : Cho phép người quản lý có thể biết được các ứng dụng chạy trên máy khách, và người quản lý cũng có thể bật hay tắt một ứng dụng nào đó. Dòng sự kiện : - Dòng sự kiện chính : + Use case bắt đầu khi người quản lý yêu cầu quản lý ứng dụng trên máy khách. + Người quản lý chọn máy khách mà người quản lý muốn xem danh sách các ứng dụng. + Nếu người quản lý chọn xem danh sách các ứng dụng: Server gởi thông điệp yêu cẩu danh sách đến máy khách, máy khách thực hiện việc ghi lại danh sách các ứng dụng đang chạy ở máy khách và gởi về Server. + Nếu người quản lý chọn bật một ứng dụng: màn hình yêu cầu nhập các thông tin cần thiết (như tên ứng dụng, đường dẫn…) để bật ứng dụng, và Server gởi yêu cầu đến máy khách. Máy khách nhận thông điệp sẽ bật ứng dụng tương ứng. 26 + Nếu người quản lý chọn tắt một ứng dụng: người quản lý chọn một ứng dụng từ danh sách, Server gởi yêu cầu đến máy khách. Máy khách nhận thông điệp sẽ tắt ứng dụng. - Dòng sự kiện khác: + Không có. - Điều kiện tiên quyết: + Không có. - Hậu điều kiện: + Không có. - Điểm mở rộng: + Không có. 2.2.2.1.18 Manage Service Use Case: Tên Use Case: Manage Service. Mô tả : Cho phép người quản lý có thể biết được các service chạy trên máy khách, và người quản lý cũng có thể thay đổi loại khởi động( Automatic, Manual hay Disable) hay cũng có thể thay đổi trạng thái service( Start hay Stop). Dòng sự kiện : - Dòng sự kiện chính : + Use case bắt đầu khi người quản lý yêu cầu quản lý dịch vụ trên máy khách. + Người quản lý chọn máy khách mà người quản lý muốn xem thông tin service. + Nếu người quản lý chọn xem danh sách các dịch vụ: Server gởi thông điệp yêu cầu danh sách đến máy khách, máy khách thực hiện việc ghi lại danh sách các dịch vụ đang chạy ở máy khách và gởi về Server. 27 + Nếu người quản lý chọn thay đổi loại khởi động dịch vụ: màn hình yêu cầu nhập loại tương ứng để thay đổi. Server gởi yêu cầu đến máy khách. Máy khách nhận thông điệp sẽ thay đổi tương ứng. + Nếu người quản lý chọn thay đổi trạng thái dịch vụ: màn hình yêu cầu chọn trạng thái tương ứng để thay đổi. Server gởi yêu cầu đến máy khách. Máy khách nhận thông điệp sẽ thay đổi tương ứng. - Dòng sự kiện khác: + Không có. - Điều kiện tiên quyết: + Không có. - Hậu điều kiện: + Không có. - Điểm mở rộng: + Không có. 2.2.2.1.19 Send Message Use Case: Tên Use Case: Send Message. Mô tả : Cho phép người quản lý có thể gởi tin nhắn đến một máy khách bất kỳ hay cho tất cả các máy.. Dòng sự kiện : - Dòng sự kiện chính : + Use case bắt đầu khi người quản lý yêu cầu gởi tin nhắn. + Gởi đến một máy: người quản lý chọn máy khách mà người quản lý muốn gởi thông điệp. + Nhập thông điệp và yêu cầu Server gởi thông điệp đến máy đã chọn. 28 + Gởi đến tất cả các máy: yêu cầu Server gởi thông điệp đến tất cả các máy. + Máy khách nhận thông điệp sẽ xuất ra màn hình. - Dòng sự kiện khác: + Không có. - Điều kiện tiên quyết: + Không có. - Hậu điều kiện: + Không có. - Điểm mở rộng: + Không có. 2.2.2.1.20 Manage Remote Computer: Tên Use Case: Manage Remote Computer. Mô tả : Cho phép người quản lý có thể Logout, Restart hay Shutdown một máy khách bất kỳ hay cho tất cả các máy. Dòng sự kiện : - Dòng sự kiện chính : + Use case bắt đầu khi người quản lý yêu cầu Logout, Restart hay Shutdown. + Nếu người quản lý yêu cầu Logout: luồng sự kiện phụ yêu cầu Logout được kích hoạt. + Nếu người quản lý yêu cầu Resstart: luồng sự kiện phụ yêu cầu Resstart được kích hoạt. + Nếu người quản lý yêu cầu Shutdown: luồng sự kiện phụ yêu cầu Shutdown được kích hoạt. Logout: + Người quản lý có thể chọn một máy hay tất cả máy. 29 + Người quản lý có thể nhập thời gian. Sau thời gian đó chương trình sẽ thực hiện logout. + Người quản lý yêu cầu Logout. Server sẽ gởi thông điệp đến máy khách yêu cầu máy khách thực hiện logout. tương tự cho Restart và Shutdown - Dòng sự kiện khác: + Không có. - Điều kiện tiên quyết: + Không có. - Hậu điều kiện: + Không có. - Điểm mở rộng: + Không có. 2.2.2.1.21 SnapShot Use Case: Xem phần kỹ thuật. 2.2.2.2 Phía Client: 2.2.2.2.1 Screen 2.2.2.2.1.1 Screen Connect Use Case: Tên Use Case : Screen Connect. Mô tả : Máy khách thực hiện kết nối với Server để vào trạng thái chờ. Dòng sự kiện : - Dòng sự kiện chính : + Use case bắt đầu khi máy khách bắt đầu chạy chương trình. 30 + Chương trình kiểm tra thông tin kết nối và gởi thông điệp đến Server. + Nếu nhận được hồi đáp chấp nhận thì chương trình sẽ thực hiện kết nối với Server và màn hình chờ bật lên( Use Case thành công). - Dòng sự kiện khác: + Nếu các thông tin kết nối không có ( như thông tin về tên máy, địa chỉ IP SERVER, port ) thì sẽ nhập thông báo yêu cầu nhập thông tin lại. + Nếu tên máy trùng với một tên máy đã kết nối trước vào Server( do hồi đáp không chấp nhận của Server) thì cũng sẽ nhập thông báo yêu cầu nhập thông tin lại. + Nếu kết nối không thành công thì sẽ báo lỗi. - Điều kiện tiên quyết: + Server phải khởi động trước khi máy khách muốn kết nối vào màn hình chờ. - Hậu điều kiện: + Máy khách đang ở trạng thái down chuyển sang trạng thái chờ. - Điểm mở rộng: + Không có. 2.2.2.2.1.2 Login Member Use Case: Tên Use Case : Login Member. Mô tả: Máy khách thực hiện login vào Server dưới hình thức Member. Dòng sự kiện : - Dòng sự kiện chính : + Use case bắt đầu khi khách hàng bắt đầu đăng nhập vào Server để sử dụng máy. + Khách hàng nhập thông tin bao gồm Username và Password. 31 + Chương trình gởi thông điệp đến Server. + Nếu nhận được hồi đáp chấp nhận thì màn hình chờ tắt, chương trình chính Client sẽ bật lên để tính giờ và khi đó khách hàng có thể sử dụng được máy này. - Dòng sự kiện khác: + Nếu nhận được hồi đáp từ chối thì màn hình screen vẫn không bị tắt. - Điều kiện tiên quyết: + Server phải khởi động trước. + Máy khách đang ở trạng thái chờ. - Hậu điều kiện: + Máy khách đang ở trạng thái chờ chuyển sang trạng thái sử dụng. - Điểm mở rộng: + Không có. 2.2.2.2.2 Client 2.2.2.2.2.1 Client Connect Use Case: Tên Use Case : Client Connect. Mô tả: Máy khách thực hiện kết nối với Server để vào trạng thái sử dụng Dòng sự kiện : - Dòng sự kiện chính : + Use case bắt đầu khi người dùng login thành công vào Server. + Chương trình kết nối với Server. + Server nhận được thông điệp kết nối sẽ bắt đầu gởi danh sách các món ăn, banner cho Client. + Máy khách sẽ nhận thông điệp từ Server sẽ lưu trữ các thông tin đó. 32 + Máy khách xuất thông báo về nội quy sử dụng phòng máy. - Dòng sự kiện khác: + Nếu kết nối không thành công thì sau 1 khoảng thời gian máy khách sẽ tự động thực hiện kết nối lại với Server. - Điều kiện tiên quyết: + Server phải khởi động trước khi máy khách muốn kết nối vào màn hình chờ. + Máy khách đang ở trạng thái chờ. - Hậu điều kiện: + Không có. - Điểm mở rộng: + Không có. 2.2.2.2.2.2 Order Use Case: Tên Use Case : Order Mô tả : Khách hàng có thể thực hiện đặt món ăn từ danh sách với Server Dòng sự kiện : - Dòng sự kiện chính : + Use case bắt đầu khi khách hàng yêu cầu phục vụ. + Danh sách các thức ăn, thức uống sẽ xuất hiện. + Khách hàng chọn các thông tin cần thiết như món ăn, số lượng… + Khi khách hàng yêu cầu phục vụ các món mình đã chọn thì máy khách sẽ gởi thông điệp cho Server. + Server nhận thông điệp sẽ lần lượt phục vụ các món ăn khách hàng đã yêu cầu. - Dòng sự kiện khác: + Không có. - Điều kiện tiên quyết: 33 + Server phải khởi động trước khi máy khách muốn kết nối vào màn hình chờ. + Phía máy khách đang ở trong trạng thái sử dụng. - Hậu điều kiện: + Không có. - Điểm mở rộng: + Không có. 2.2.3 Thiết kế lớp trên Server: 2.2.3.1 Giao diện Server: 34 Hình 2-7 Thiết kế lớp giao diện Server CD eb itD eta ilR ep ort Dl g CD eb i._.tR ep or tD lg CM on thR ep ort CD ail yR ep ort Dl g CI np utP ric eD lg CD eb itD lg CI np utM em be rD lg CI np utD ish Dl g CI np utV alu eD lg CI np utC ate go ryD lg CA fte rC ra sh Dl g CB an ne rD lg CI nfo Se rve rD lg CB as eT ab Ct rl CC afe Se rve rD lg CE nT ab Ct rl CT ab Ct rlS SL CL oc kK ey Ad dD lg CC hg Sr vS tar tup Dl g CC hg Sr vS tat us Dl g CT ab Pa ge SS L CL og gin gT ab CK ey Lo gT ab CM es sa ge Ta b CS crC ap Ta b CA pp lis tTa b CW ork St ati on Ta b CS erv ice Ta b CA dm inT ab CK ey Lo ck Ta b CP are ntT ab Pa ge CS rvL ist Ta b 35 STT Tên lớp Kế thừa từ lớp Chức năng 1 CBaseTabCtrl CTabCtrl dùng tự vẽ giao diện tab ctrl 2 CEnTabCtrl CBaseTabCtrl dùng tô màu đỉnh Tab theo màu nền 3 CTabCtrlSSL CEnTabCtrl dùng Add Dialog (xem 1 dialog như một trang của tab) 4 CTabPageSSL CDialog dùng để thể hiện dialog như một trang của Tab 5 CParentTabPage CTabPageSSL dùng để tô màu nền và gắn tooltip 6 CLoggingTab CParentTabPage giao diện để điều khiển hoạt động máy tính 7 CKeyLockTab CParentTabPage giao diện để khóa bàn phím 8 CKeyLogTab CParentTabPage giao diện dùng để ghi phím 9 CLockKeyAddDlg CParentTabPage giao diện dùng để cho người dùng nhập các phím cần khóa 10 CMessageTab CParentTabPage giao diện dùng để người quản lý gởi tin nhắn đến một máy 36 hay nhiều máy 11 CScrCapTab CParentTabPage giao diện dùng để chụp màn hình 12 CApplistTab CParentTabPage giao diện dùng để quản lý các ứng dụng phía máy khách 13 CServiceTab CParentTabPage giao diện dùng để quản lý phục vụ các dịch vụ như món ăn, thức uống cho khách hàng 14 CChgSrvStartupDlg CDialog nhập dữ liệu về trạng thái hoạt động của dịch vụ 15 CChgSrvStatusDlg CDialog nhập dữ liệu về trạng thái khởi động của dịch vụ 16 CSrvListTab CParentTabPage giao diện dùng để quản lý các service phía máy khách 17 CAdminTab CParentTabPage dùng để chứa các giao diện quản trị 18 CWorkStationTab CParentTabPage dùng để quản lý việc tính cước, giá cả các dịch vụ kèm theo 19 CAfterCrashDlg CDialog dùng quản lý chương trình sau khi có một client bị đứt kế nối 20 CBannerDlg CDialog giao diện dùng nhập 37 banner, rồi xuất các quy định ở máy khách 21 CInfoServerDlg CDialog giao diện dùng nhập các thông tin về Server lúc bắt đầu 22 CInputCategoryDlg CDialog giao diện dùng quản lý loại thức ăn, nước uống 23 CInputDishDlg CDialog giao diện dùng quản lý các món ăn, thức uống 24 CInputMemberDlg CDialog giao diện dùng quản lý thanh viên tham gia 25 CDebitDlg CDialog giao diện dùng quản lý các khách hàng nợ 26 CInputPriceDlg CDialog giao diện dùng quản lý giá cả các ngày 27 CInputValueDlg CDialog giao diện dùng nhập giá cả của ngày 28 CDailyReportDlg CDialog giao diện dùng thống kê các đăng nhập sử dụng của khách hàng 29 CMonthReport CDialog giao diện dùng thống kê số tiền máy khách kiếm được trong một tháng 30 CDebitReportDlg CDialog giao diện dùng thống kê các khách hàng nợ 31 CdebitDetail- CDialog giao diện dùng xuất 38 ReportDlg chi tiết về một khách hàng nợ 32 CCafeServerDlg CDialog giao diện chương trình Server 2.2.3.2 Xử lý Server: CADOExceptionCADOParameter CADOCommand CADOFieldInfo CADODatabase CADORecordSet CSolveMember CSolveCategory CSolveLogin CSolveDish CSolveFee CSolveTableFee CSolveFeeDay CInputPriceDay CInputDish CInputCategory CSolveDailyReport CSolveMonthReport CSolveDebitList CCafeDB CSolveDebitDetail Hình 2-8 Thiết kế lớp xử lý Server 39 STT Tên lớp Kế thừa từ lớp Chức năng 1 CSolveMember CCafeDB Lớp xử lý việc quản lý các thành viên 2 CSolveCategory CCafeDB Lớp xử lý việc quản lý các loại món ăn, thức uống 3 CSolveDish CCafeDB Lớp xử lý việc quản lý các món ăn, thức uống 4 CSolveLogin CCafeDB Lớp xử lý việc quản lý Login,Logout 5 CSolveFee CCafeDB Lớp xử lý việc tính tiền 6 CSolveTableFee CCafeDB Lớp xử lý việc quản lý tiền phí 7 CSolveFeeDay CCafeDB Lớp xử lý việc quản lý tiền phí 8 CInputPriceDay CCafeDB Lớp xử lý việc quản lý giá cả 9 CInputDish CCafeDB Lớp xử lý việc quản lý món ăn,thức uống 10 CInputCategory CCafeDB Lớp xử lý việc quản lý loại món ăn 11 CSolveDailyReport CCafeDB Lớp xử lý việc báo cáo hàng ngày 12 CSolveMonthReport CCafeDB Lớp xử lý việc báo cáo theo tháng 13 CSolveDebitList CCafeDB Lớp xử lý việc nợ 40 của các thành viên 14 CSolveDebitDetail CCafeDB Lớp xử lý việc nợ của các thành viên một cách chi tiết 15 CADODatabase CADOCommand 16 CADORecordset CADOCommand, CADOFieldInfo 17 CADOCommand CADOParameter 18 CADOFieldInfo 19 CADOParameter 20 CADOException 2.2.4 Thiết kế lớp trên Client: 2.2.4.1 Screen: CLogonDlgCInfoPcDlg CSockAddr CBlockingSocket CBlockingSocketException CScreenDlg Hình 2-9 Thiết kế lớp Screen STT Tên lớp Kế thừa từ lớp Chức năng 1 CSockAddr sockaddr_in Chỉ địa chỉ IP, thông tin Port dịch vụ 41 2 CBlockingSocket CObject Nó thay thế lớp Socket của MFC. Đây là lớp giữ chức năng quan trọng nhất trong chương trình vì nó có thể thiết lập, tiếp nhận kết nối và quản lý việc truyền dữ liệu. 3 CblockingSocket- Exception CException Lớp quản lý lỗi cho việc thiết lập, tiếp nhận kết nối và quản lý việc truyền dữ liệu. 4 CInfoPcDlg Dùng để nhập thông tin khi không có thông tin kết nối 5 CLogonDlg Dùng để nhập thông tin Logon 6 CScreenDlg Giao diện che màn hình không cho khách hàng sử dụng máy khách 2.2.4.2 Client: CKeyClientCSockAddr CBlockingSoket CBlockingSocketException COrder CKeyLogClientCKeyLockCLientCTaskMgr CShutdownClient CCafeClientDlg Hình 2-10 Thiết kế lớp Client 42 STT Tên lớp Kế thừa từ lớp Chức năng 1 CSockAddr sockaddr_in Chỉ địa chỉ IP, thông tin Port dịch vụ 2 CBlockingSocket CObject Nó thay thế lớp Socket của MFC. Đây là lớp giữ chức năng quan trọng nhất trong chương trình vì nó có thể thiết lập, tiếp nhận kết nối và quản lý việc truyền dữ liệu. 3 CblockingSocket- Exception CException Lớp quản lý lỗi cho việc thiết lập, tiếp nhận kết nối và quản lý việc truyền dữ liệu. 4 CKeyClient Lớp quản lý lỗi cho việc Lock hay Log key 5 COrder CDialog Giao diện phục vụ việc đặt món ăn của khách hàng 6 CKeyLockClient CKeyClient Lớp xử lý khóa phím 7 CKeyLogClient CKeyClient Lớp xử lý ghi nhận phím sử dụng 8 CCafeClientDlg Giao diện chính của chương trình Client 43 2.2.5 Hiện thực hóa Use Case: 2.2.5.1 Use case Start Server: : User Object1 : CCafeServerDlg Object2 : CBlockingSocket 1: StartServer( ) 2: CreateConnection( ) 3: StartListenConnection( ) Hình 2-11 Sequence Diagram Start Server 44 2.2.5.2 Use case Login: Hình 2-12 Sequence Diagram Login : Us er Ob jec t1 : C W ork St ati on Ta b Ob jec t2 : C So lve Lo gin Ob jec t3( Se rve r) : CB loc kin gS oc ke t CO bje ct4 (S cre en ) : CB loc kin gS oc ke t Ob jec t5 : C Sc ree nD lg Ob jec t6( Cl ien t) : CB loc kin gS oc ke tO bje ct7 : CC afe Cl ien tD lg 2: Ch ec kD ata ba se ( ) 7: Cl os e( ) 1: Lo gin Co mp ute r( ) 3: Se tIn fo( ) 4: Se nd Me ss ag e( ) 5: Cl os eA pp lic ati on ( ) 8: Co nn ec t( ) 9: Se nd Me ss ag e( ) 10 : A cc ep tC on ne cti on ( ) Cl os e S uc ce ss ful 6: Se nd Me ss ag e( ) 45 2.2.5.3 Use case Logout: Hình 2-13 Sequence Diagram Logout : U se r O bje ct1 : C Wo rkS tat ion Ta b Ob jec t3 : CS olv eD ail yR ep ort Ob jec t2 : C So lve Lo gin Ob jec t4( Se rve r) : CB loc kin gS oc ke t Ob jec t5( Sc ree n) : CB loc kin gS oc ke t Ob jec t6 : C Sc ree nD lg Ob jec t7( Cl ien t) : CB loc kin gS oc ke t Ob jec t8 : C Ca feC lie ntD lg 2: De let eIn foL og in( ) 9: St art Sc ree n( ) 8: Cl os eC on ne cti on ( ) 1: Lo go utC om pu ter ( ) 5: Lo go utC om pu ter ( ) 6: Se nd Me ssa ge ( ) 7: Cl os eC on ne cti on ( ) 10 : S tar tC on ne cti on ( ) 11 : S en dM es sa ge ( ) 12 : A cc ep tC on ne cti on ( ) 3: Sa ve Cl ien tIn fo( ) 4: De let e C lie nt Inf o 46 2.2.5.4 Use case Paid Hình 2-14 Sequence Diagram Paid : U ser Ob jec t1 : C Wo rkS tat ion Ta b Ob jec t2 : C So lve Lo gin Ob jec t3 : CS olv eD ail yR ep ort Ob jec t4 : C So lve Fe e Ob jec t5 : C So lve Fe eD ay Ob jec t6 : CS olv eT ab leF ee Ob jec t7( Se rve r) : CB loc kin gS oc ket 2: Co mp ute rFe e( ) 1: Pa idC om pu ter ( ) 12 : L og ou tCo mp ute r( ) 9: Sa ve Cli en tIn fo( ) 11 : D ele teC lie ntI nfo ( ) 10 : F ee ( ) 3: Co mp ute rFe e( ) 4: Se tDa y( ) 5: Ge tTa ble ( ) 6: Ge tPr ice ( ) 7: Co mp ute Fe e( ) 8: Ge tFe e( ) 47 2.2.5.5 Use Case SetBanner: : User Object1 : CCafeServerDlg Object2(Server) : CBlockingSocket Object3(Client) : CBlockingSocket Object2 : CCafeClientDlg 1: EnterBanner( ) 5: ShowBanner( ) 4: GetBanner( ) 3: SendMessage( ) 2: SetBanner( ) Hình 2-15 Sequence Diagram SetBanner 2.2.5.6 Use Case Service Order : User Object1 : CServiceTab Object2 : CMyHFlexGrid Object2 : CWorkStationTab Object3 : CSolveLoginService 3: UpdateServiceFee( ) 1: ServeDish( ) 2: ShowInfo( ) 4: SaveToDatabase( ) Hình 2-16 Sequence Diagram Service Order 2.2.5.7 Use case Daily Report 48 : User Object1 : CDailyReportDlg Object2 : CDailyReportFlexGrid Object3 : CSolveDailyReport1: DailyReport( ) 2: OpenDatabase( ) 3: GetAllInfo( ) 4: ShowReport( ) Hình 2-17 Sequence Diagram Daily Report 49 2.2.5.8 Use case Debit Report: Hình 2-18 Sequence Diagram Debit Report Ob jec t6 : CS olv eD eb itD eta ilR ep ort : U ser Ob jec t1 : C De bit Re po rtD lg Ob jec t2 : C De bit Re po rtF lex Gr id Ob jec t3 : CS olv eD eb itL ist Ob jec t4 : C De bit De tai lRe po rtD lg Ob jec t5 : CD eb itD eta ilR ep ort Fle xG rid 1: De bit Re por t( ) 2: Op en Da tab as e( ) 3: Ge tAl lInf o( ) 4: Sh ow Re po rt( ) 5: Re po rtD eta il( ) 6: Se tRe po rtIn fo( ) 7: Op en da tab as e( ) 8: G etA llIn fo( ) 9: Sh ow De tai l( ) 50 2.2.5.9 Use case Month Report : User Object1 : CMonthReportDlg Object2 : CMSFlexGrid Object3 : CSolveMonthReport1: MonthReport( ) 2: OpenDatabase( ) 3: GetAllInfo( ) 4: ShowReport( ) Hình 2-19 Sequence Diagram Month Report 2.2.5.10 Use case Manage Cafeteria: 2.2.5.10.1 Show: : User Object1 : CInputCategoryDlg Object2 : CCategoryListFlexGrid Object3 : CInputCategory 1: Category( ) 2: OpenDatabase( ) 3: GetAllInfo( ) 4: ShowCategory( ) Hình 2-20 Sequence Diagram Manage Cafeteria Show 51 2.2.5.10.2 Add: : User Object1 : CInputCategoryDlg Object3 : CInputCategory Add new Category 1: EnterNewInfo( ) 2: Add( ) 3: SetInfo( ) 4: Save( ) Hình 2-21 Sequence Diagram Manage Cafeteria Add 2.2.5.10.3 Edit : User Object1 : CInputCategoryDlg Object2 : CCategoryListFlexGrid Object3 : CInputCategory 1: ChooseCategory( ) 2: Edit( ) 3: UpdateInfo( ) 4: Update( ) Hình 2-22 Sequence Diagram Manage Cafeteria Edit 52 2.2.5.10.4 Delete: : User Object1 : CInputCategoryDlg Object2 : CCategoryListFlexGrid Object3 : CInputCategory 1: ChooseCategory( ) 2: Delete( ) 3: DeleteCategory( ) 4: Delete( ) Hình 2-23 Sequence Diagram Manage Cafeteria Delete 2.2.5.11 Use case Manage Debit 2.2.5.11.1 Add 53 Hình 2-24 Sequence Diagram Debit Add O bj ec t1 : CC af eS er ve rD lg : U se r O bj ec t2 : CD eb itD lg O bj ec t3 : CS ol ve Da ily Re po rt O bj ec t4 : CS ol ve De bi tL is t O bj ec t5 : CS ol ve De bi tD et ai l Ad d ne w De bi t P er so n 3: E nt er In fo ( ) 1: D eb it( ) 2: O pe nF or m ( ) 4: G et A llP er so nI nf o( ) 5: S et B as ic In fo ( ) 7: G et D et ai lIn fo ( ) 8: S et D et ai lIn fo ( ) 6: S av e( ) 9: s av e( ) 54 Hình 2-25 Sequence Diagram Manage Debit Edit : U se r O bj ec t1 : C C af eS er ve rD lg O bj ec t2 : C D eb itD lg O bj ec t3 : C S ol ve D ai ly R ep or t O bj ec t4 : C S ol ve D eb itL is t O bj ec t5 : C S ol ve D eb itD et ai l 1: D eb it( ) 2: E nt er B as ic In fo ( ) 8: E di t( ) 7: S ho w In fo ( ) 3: S et B as ic In fo ( ) 9: S et B as ic In fo ( ) 4: G et B as ic In fo ( ) 5: S et D et ai lIn fo ( ) 11 : S et D et ai lIn fo ( ) 6: G et D et ai lIn fo ( ) 10 : S av e( ) 12 : s av e( ) 55 2.2.5.12 Use case Manage Kind of Food: 2.2.5.12.1 Add : User Object1 : CInputDishDlg Object2 : CDishListFlexGrid Object3 : CInputDish Add new Dish 1: Dish( ) 2: OpenDatabase( ) 3: GetAllInfo( ) 4: ShowDish( ) 5: EnterNewInfo( ) 7: SetInfo( ) 6: Add( ) 8: Save( ) Hình 2-26 Sequence Diagram Manage Kind of Food Add 2.2.5.12.2 Edit 56 : User Object1 : CInputDishDlg Object2 : CDishListFlexGrid Object3 : CInputDish 1: Dish( ) 6: Edit( ) 5: ChooseDish( ) 7: UpdateInfo( ) 8: Update( ) 2: OpenDatabase( ) 3: GetAllInfo( ) 4: ShowDish( ) Hình 2-27 Sequence Diagram Manage Kind of Food Edit 2.2.5.12.3 Delete 57 : User Object1 : CInputDishDlg Object2 : CDishListFlexGrid Object3 : CInputDish 6: Delete( ) 5: ChooseDish( ) 7: DeleteDish( ) 8: Delete( ) 1: Dish( ) 2: OpenDatabase( ) 3: GetAllInfo( ) 4: ShowDish( ) Hình 2-28 Sequence Diagram Manage Kind of Food Delete 2.2.5.13 Use case Manage Member: 2.2.5.13.1 Add 58 : User Object1 : CInputMemberDlg Object2 : CMemberFlexGridObject3 : CSolveMember Add Member 1: Member( ) 5: EnterInformation( ) 6: Add( ) 4: ShowMember( ) 2: OpenDatabase( ) 7: SetInfo( ) 3: GetInfo( ) 8: Save( ) Hình 2-29 Sequence Diagram Manage Member Add 2.2.5.13.2 Edit 59 : User Object1 : CInputMemberDlg Object2 : CMemberFlexGridObject3 : CSolveMember 1: Member( ) 2: OpenDatabase( ) Edit Member 3: GetInfo( ) 4: ShowMember( ) 5: ChooseMember( ) 7: SetInfo( ) 6: Edit( ) 8: Update( ) Hình 2-30 Sequence Diagram Manage Member Edit 2.2.5.13.3 Delete 60 : User Object1 : CInputMemberDlg Object2 : CMemberFlexGridObject3 : CSolveMember Delete Member 1: Member( ) 6: Delete( ) 5: ChooseMember( ) 4: ShowMember( ) 2: OpenDatabase( ) 7: SetInfo( ) 3: GetInfo( ) 8: Update( ) Hình 2-31 Sequence Diagram Manage Member Delete 61 2.2.5.14 Use case Manage Price Day: Hình 2-32 Sequence Diagram Manage Price Day O bj ec t5 : C S ol ve Fe eT ab le : U se r O bj ec t1 : C In pu tP ric eD ay D lg O bj ec t2 : C P ric eD ay Li st Fl ex G rid O bj ec t3 : C In pu tV al ue P ric eD ay O bj ec t4 : C In pu tP ric eD ay O bj ec t6 : C S ol ve Fe eD ay 1: P ric eD ay ( ) 2: O pe nD at ab as e( ) 7 : G et Al lIn fo ( ) 8: S ho w P ric eD ay ( ) 10 : E di t( ) 3: S et D ay ( ) 4: G et In fo Ta bl e( ) 5: S et In fo Ta bl e( ) 6: G et Fe eD ay Fr om In fo Ta bl e( ) E di t P ric e O f D ay 11 : E nt er N ew In fo ( ) 12 : O pe nF or m ( ) 13 : E nt er Va lu e( ) 14 : G et Va lu e( ) 15 : S ho w N ew P ric e( ) 1 6: S et In fo Ta bl e( ) 17 : S et Fe eD ay ( ) 9: C ho os eD ay & Ti m e( ) 62 2.2.5.15 Use case Lock Key: Hình 2-33 Sequence Diagram Lock Key : U se r O bj ec t1 : C C af eS er ve rD lg O bj ec t2 (S er ve r) : C Bl oc ki ng S oc ke t O bj ec t3 (C lie nt ) : CB lo ck in gS oc ke t O bj ec t4 : C C af eC lie nt Dl g O bj ec t5 : C K ey Lo ck C lie nt 2: S ta rtK ey Lo ck ( ) 3: S et In fo ( ) 4: S en dM es sa ge ( ) 5: G et In fo ( ) 6: L oc kK ey ( ) 7: S et In fo ( ) 8: S en dM es sa ge ( ) 9: S ho w M es sa ge ( ) Lo ck S uc ce ss fu l 1: C ho os et he M od eL oc k( ) 63 2.2.5.16 Use case Log Key Hình 2-34 Sequence Diagram Log Key : Us er O bj ec t1 : CC af eS er ve rD lg O bj ec t2 (S er ve r) : CB lo ck in gS oc ke t O bj ec t3 (C lie nt ) : CB lo ck in gS oc ke t O bj ec t4 : CC af eC lie nt Dl g O bj ec t5 : CK ey Lo gC lie nt Lo g Su cc es sf ul 1: S ta rtK ey Lo g( ) 2: S et In fo ( ) 3: S en dM es sa ge ( ) 4: G et In fo ( ) 5: L og Ke y( ) 6: S et In fo ( ) 7: S en dM es sa ge ( ) 8: S ho wM es sa ge ( ) 64 2.2.5.17 Use case Message: : User Object : CMessageTab Object : CBlockingSocket Object : CBlockingSocket Object : CCafeClientDlg 2: EnterMesage( ) 3: SetInfo( ) 4: SendMessage( ) 5: GetInfo( ) 6: ShowMessage( ) 1: ChooseComputer( ) Hình 2-35 Sequence Diagram Send Message 2.2.5.18 Use case Manage Remote Computer : User Object : CLoggingtab Object(Server) : CBlockingSocket Object(Client) : CBlockingSocket Object : CCafeClientDlg Object : CShutDownClient 1: SetOption 2: Shutdown 3: SetInfo( ) 4: SendMessage( ) 7: Shutdown( ) 5: GetInfo( ) 6: Shutdown( ) Hình 2-36 Sequence Diagram Manage Remote Computer 65 2.2.5.19 Use case Manage Application: 2.2.5.19.1 List: : User Object1 : CAppListtab Object2(Server) : CBlockingSocket Object3(Client) : CBlockingSocket Object4 : CCafeClientDlg Object5 : CTaskMgr 3: SetInfo( ) 4: SendMessage( ) 5: GetInfo( ) 7: GetWindowList( ) 8: SetInfo( ) 9: SendMessage( ) 10: GetInfo( ) 1: SetComputer( ) 2: ListAll( ) 6: RequestList( ) Hình 2-37 Sequence Diagram Manage Application - List 2.2.5.19.2 Start: 66 Hình 2-38 Sequence Diagram Manage Application - Start : U se r O bj ec t1 : C A pp Li st ta b O bj ec t2 (S er ve r) : C B lo ck in gS oc ke t O bj ec t3 (C lie nt ) : C B lo ck in gS oc ke t O bj ec t4 : C C af eC lie nt D lg O bj ec t5 : C Ta sk M gr 1: S et C om pu te r( ) 2: S ta rt A pp ( ) 3: E nt er In fo ( ) 4: S et In fo ( ) 12 : S ho w R es ul t( ) 5: S en dM es sa ge ( ) 11 : S en dM es sa ge ( ) 6: G et In fo ( ) 10 : S et In fo ( ) 7: S ta rt A pp ( ) 8: S ta rt A pp ( ) 9: G et R es ul t( ) 67 2.2.5.19.3 Stop: : User Object1 : CAppListtab Object2(Server) : CBlockingSocket Object3(Client) : CBlockingSocket Object4 : CCafeClientDlg Object5 : CTaskMgr 1: SetComputer( ) 2: ChooseApp( ) 3: StopApp( ) 4: SetInfo( ) 12: ShowResult( ) 5: SendMessage( ) 11: SendMessage( ) 6: GetInfo( ) 10: SetInfo( ) 7: StopApp( ) 8: StopApp( ) 9: GetResult( ) Hình 2-39 Sequence Diagram Manage Application – Stop 2.2.5.20 Use case Manage Service: 2.2.5.20.1 Show List 68 : User Object1 : CSrvListtab Object4(Server) : CBlockingSocket Object5(Client) : CBlockingSocket Object6 : CCafeClientDlg Object7 : CTaskMgr 3: SetInfo( ) 4: SendMessage( ) 5: GetInfo( ) 7: GetServiceList( ) 8: SetInfo( ) 9: SendMessage( ) 10: GetInfo( ) 1: SetComputer( ) 2: ListAll( ) 11: ShowList( ) 6: RequestServiceList( ) Hình 2-40 Sequence Diagram Manage Service – Show List 69 ChangeStartupService: Hình 2-41 Sequence Diagram Manage Service – Change Startup Service : Us er O bj ec t1 : CS rvL is tta b O bj ec t2 : CC hg Sr vS ta rtu pD lg O bj ec t4 (S er ve r) : CB lo ck in gS oc ke t O bj ec t5 (C lie nt ) : CB lo ck in gS oc ke t O bj ec t6 : CC af eC lie nt Dl g O bj ec t7 : CT as kM gr 1: S et Co m pu te r( ) 2: C ho os eS er vic e( ) 3: C ho os eS ta rtu pS ty le ( ) 5: S et In fo ( ) 13 : S ho wR es ul t( ) 6: S en dM es sa ge ( ) 12 : S en dM es sa ge ( ) 7: G et In fo ( ) 11 : S et In fo ( ) 8: C ha ng eS ta rtu p( ) 9: C ha ng eS ta rtu p( ) 10 : G et Re su lt( ) 4: G et St yl e( ) 70 Change Status Hình 2-42 Sequence Diagram Manage Service – Change Status : Us er O bj ec t1 : CS rvL is tta b O bj ec t3 : CC hg Sr vS ta tu sD lg O bj ec t4 (S er ve r) : CB lo ck in gS oc ke t O bj ec t5 (C lie nt ) : CB lo ck in gS oc ke t O bj ec t6 : CC af eC lie nt Dl g O bj ec t7 : CT as kM gr 1: S et Co m pu te r( ) 2: C ho os eS er vic e( ) 3: C ho os eS ta tu sS ty le ( ) 5: S et In fo ( ) 13 : S ho wR es ul t( ) 6: S en dM es sa ge ( ) 12 : S en dM es sa ge ( ) 7: G et In fo ( ) 11 : S et In fo ( ) 8: C ha ng eS ta tu s( ) 9: C ha ng eS ta tu s( ) 10 : G et Re su lt( ) 4: G et St yl e( ) 71 2.2.6 Thiết kế cơ sở dữ liệu Hình 2-43 Cơ sở dữ liệu Category STT Tên Thuộc tính Mô tả 1 MALOAI Số nguyên 2 TENLOAI Text tên lọai thức ăn, nước uống Bảng 2-1 Category DailyReport STT Tên Thuộc tính Mô tả 1 PC_NO Text 2 START_TIME Ngày giờ Giờ lúc khách hàng bắt đầu sử dụng máy 3 END_TIME Ngày giờ Giờ lúc khách hàng kết thúc sử dụng máy 4 USERNAME Text 5 ORDER_FEE số thực tiền khi khách hàng sử dụng các dịch vụ có liên quan 6 WS_FEE số thực tiền phí sử dụng máy 7 TOTAL_FEE số thực tổng phí 8 ID_SERVICE Text Bảng 2-2 Daily Report DEBIT_DETAIL STT Tên Thuộc tính Mô tả 72 1 ID_DEBIT số nguyên 2 PC_NO Text 3 USERNAME Text 4 START_TIME Ngày giờ Giờ lúc khách hàng bắt đầu sử dụng máy 5 END_TIME Ngày giờ Giờ lúc khách hàng kết thúc sử dụng máy 6 TOTAL_FEE số thực tổng phí Bảng 2-3 Bảng Debit_Detail DEBIT_LIST STT Tên Thuộc tính Mô tả 1 ID số nguyên 2 NAME Text Tên khách nợ 3 ADDRESS Text 4 PHONE Text 5 TOTAL_FEE số thực Tổng tền phải trả 6 PREPAY số thực Tiền khách có thể trả trước Bảng 2-4 Debit List DISH STT Tên Thuộc tính Mô tả 1 MA số nguyên 2 DESCRIPTION Text Tên món thức ăn 3 MALOAI số nguyên Loại thức ăn, nước uống 4 PRICE số thực giá cả Bảng 2-5 Dish FEE_DAY STT Tên Thuộc tính Mô tả 1 ID_TABLE Text 2 BEGIN_TIME Ngày giờ giờ bắt đầu 3 END_TIME Ngày giờ giờ kết thúc 4 FEE_HOUR số thực Bảng 2-6 Fee-Day 73 LOGIN STT Tên Thuộc tính Mô tả 1 PC_NO Text 2 USERNAME Text 3 PASSWORD Text 4 START_TIME Ngày giờ 5 END_TIME Ngày giờ 6 FEE số thực 7 ID_SERVICE Text Bảng 2-7 Login LOGIN_SERVICE STT Tên Thuộc tính Mô tả 1 ID Text 2 MA_DISH số nguyên 3 AMOUNT số nguyên Bảng 2-8 Login Service MEMBER STT Tên Thuộc tính Mô tả 1 USERNAME Text 2 PASSWORD Text 3 ADDRESS Text 4 TELEPHONE Text 5 FEE số thực 6 PRIORITY số nguyên Bảng 2-9 Member MONTH_REPORT STT Tên Thuộc tính Mô tả 1 DATE Ngày giờ 2 PC_NO Text 3 TOTAL_FEE số thực Bảng 2-10 Month Report TABLE_DAY STT Tên Thuộc tính Mô tả 1 ID_TABLE Text 2 DAY Ngày giờ Bảng 2-11 Table Day 74 2.2.7 Thiết kế màn hình : 2.2.7.1 Thiết kế màn hình trên Client: 2.2.7.1.1 Màn hình Screen: Hình 2-44 Màn hình Screen 2.2.7.1.2 Màn hình Chính Client 75 Hình 2-45 Màn hình chính Client Hình 2-46 Màn hình Order phí Client 2.2.7.2 Thiết kế màn hình trên Server: 2.2.7.2.1 Tab WorkStation: 76 Hình 2-47 Màn hình Server – WorkStation 2.2.7.2.2 Tab Service: 77 Hình 2-48 Màn hình Server – Service 2.2.7.2.3 Tab Administration: Hình 2-49 Màn hình Server – Keylock 78 Hình 2-50 Màn hình Server – Keylog Hình 2-51 Màn hình Server – Message 79 Hình 2-52 Màn hình Server – Apllication Hình 2-53 Màn hình Server – Service 80 Hình 2-54 Màn hình Server – Snapshot 2.3 Cài đặt và thử nghiệm: 2.3.1 Cài đặt: Ứng dụng Server và CafeClient được phát triển sử dụng các công cụ và môi trường sau: + Công cụ phân tích và thiết kế: Rational Rose 2003 + Môi trường cài đặt ứng dụng: Windows XP Professional + Môi trường lập trình: Microsoft Visual Studio 6.0 2.3.2 Thử nghiệm: Chương trình được cài đặt thử nghiệm trên phòng máy của trung tâm mạng Máy Tính Nhất Nghệ - đường Bà Huyện Thanh Quan - với kết quả như sau:. STT Tính năng thử nghiệm Đánh giá 1 Kết nối Tốt 2 Tính cước và các dịch vụ liên quan Tốt 3 Quản trị từ xa Tốt 4 Chụp màn hình tĩnh Tốt 5 Chụp màn hình động Tốt 6 Policy Tùy thuộc vào thiết lập máy phía Client 81 Chương 3 Các kỹ thuật lập trình 3.1 Kỹ thuật lập trình sự kiện và hook Trong quá trình thực hiện phần mềm, có một yêu cầu quản trị hệ thống là người quản trị cần biết lúc này người dùng đang gõ nội dung gì trên bàn phím hoặc anh ta có nhu cầu khóa tạm thời bàn phím hay một số phím nhất định. Các nhu cầu đó dẫn đến tình huống cần một cơ chế quản lý và kiểm soát bàn phím. Trong hệ thống Windows, có một cơ chế đáp ứng như thế : cơ chế hook. 3.1.1 Sự kiện và thông điệp trên HĐH Windows Trước hết, ta phải hiểu thêm về cơ chế thông điệp của hệ điều hành Windows. Đây là cơ chế cho phép các ứng dụng phân loại, lưu trữ, đáp lại tương tác với người dùng cũng như là tương tác lẫn nhau. * Hàng đợi thông điệp : Để lưu trữ, phân loại, tương tác… Hệ điều hành Windows xây dựng hàng đợi thông điệp. Hai loại hàng đợi thông điệp dùng cho mục đích này là: o Hàng đợi hệ thống (System queue). o Hàng đợi ứng dụng (Application queue). Windows có các trình điều khiển thiết bị (Drivers) chịu trách nhiệm cho các dịch vụ ngắt từ thiết bị phần cứng mouse và keyboard. Tại mỗi thời điểm ngắt phát sinh, các Driver này gọi một điểm vào (hàm) đặc biệt trong USER.EXE để chỉ ra rằng một sự kiện vừa xảy ra. Các sự kiện mouse, bàn phím khi xảy ra đều trước hết được lưu vào hàng đợi hệ thống. Mọi tiến trình trong hệ thống đều chia sẻ hàng đợi. Hàng đợi hệ thống chỉ làm một nhiệm vụ duy nhất là ghi nhận các sự kiện mouse, bàn phím (nhấn, rê mouse, nhấn bàn phím…) khi có. 82 Hình 3-1 Hàng đợi ứng dụng Khi một tiến trình được khởi tạo, một hàng đợi đại diện cho nó được tạo ra, hàng đợi này (đôi khi được gọi là hàng đợi tác vụ) được dùng để chứa những thông điệp sẽ được gởi cho các cửa sổ của ứng dụng. Những thông điệp này là những thông điệp được gởi một cách tường minh bằng một trong hai hàm sau : o PostMessage o PostAppMessage Ứng dụng có thể dùng hai hàm là GetMessage và PeekMessage do Windows cung cấp để khảo sát hàng đợi của mình. Hai hàm này cho phép ứng dụng lấy một thông điệp ra khỏi hàng đợi để từ đó phân loại và có những hồi đáp thích hợp với người dùng. 3.1.2 Hook là gì ? Hook là một cơ chế xử lý thông điệp của hệ thống mà một ứng dụng có thể cài đặt một đoạn lệnh (subroutine) để theo lưu thông thông điệp trên hệ thống và xử lý một số dạng thông điệp nào đó trước khi các thông điệp đến được thủ tục ở cửa sổ đích. 3.1.3 Đặc tính của hook: Hook có xu hướng làm chậm hệ thống vì chúng gia tăng số lượng công việc xử lý của hệ thống cho mỗi thông điệp. Chỉ nên cài đặt hook khi cần thiết, và tháo bỏ ngay khi không dùng nữa. 83 3.1.4 Các khái niệm trong hook: 3.1.4.1 Hook chains: Hệ thống hỗ trợ nhiều loại hook; mỗi dạng cung cấp khả năng truy cập đến khía cạnh khác nhau của cơ chế xử lý thông điệp. Chẳng hạn, ứng dụng có thể dùng WM_MOUSE hook để kiểm soát lưu thông thông điệp của các thông điệp về mouse. Hệ thống duy trì một hook chain (dãy các hook) riêng rẽ cho mỗi loại hook. Một hook chain là một danh sách các con trỏ trỏ đến các hàm do ứng dụng định nghĩa, đặc biệt riêng gọi là các hook procedure (thủ tục hook). Khi một thông điệp phát sinh mà liên quan đến một loại hook, hệ thống chuyền thông điệp cho mỗi hook procedure tham chiếu từ hook chain, hết cái này đến cái khác. Hoạt động một hook procedure thực hiện tùy thuộc vào loại hook quy định. Các hook procedure cho một số loại hook chỉ có thể quan sát các thông điệp; số còn lại có thể chỉnh sửa thông điệp hay chặn quá trình chuyền thông điệp trong hook chain, ngăn thông điệp đến được hook procedure kế tiếp hoặc cửa sổ đích. 3.1.4.2 Hook procedure Để tận dụng khả năng của mỗi loại hook, hệ thống cung cấp một hook procedure và sử dụng hàm SetWindowsHookEx để cài đặt hook procedure vào trong hook chain liên quan. Hook procedure phải theo công thức: LRESULT CALLBACK HookProc( int nCode, WPARAM wParam, LPARAM lParam ); Có thể đặt tên tùy ý, không cần phải đúng là HookProc cho hook procedure. Tham số nCode là mã hook mà hook procedure dùng để quyết định thao tác thực hiện. Giá trị mã hook tùy thuộc vào loại hook; mỗi loại lại có bộ mã hook mang tính chất riêng của nó. Các giá trị của tham số wParam và lParam tùy thuộc 84 mã hook, nhưng chúng đặc biệt chứa thông tin về thông điệp được gởi hay chuy._. trình bày giao diện người dùng, chứa đối tượng WMEncoderApp và giao diện 201 IWMEncoderApp. Wmencagt.exe Chứa đối tượng WMEncoderAgent dùng để quản trị các ứng dụng Windows Media Encoder trên máy ở xa. Bảng 4-3 Các tập tin thư viện liên kết động và thực thi 4.3.2.2 Các tính năng: 4.3.2.2.1 Điều khiển các kết nối đến máy khách: Điều khiển truy cập đến máy tính đang chạy các ứng dụng Windows Media Encoder. Một cách để broadcast một dòng là cho phép các máy khách kết nối trực tiếp máy đang chạy ứng dụng Windows Media Encoder (tính năng kéo). Mặc định, tối đa 5 máy có thể kết nối. Các quản trị viên có thể thay đổi giới hạn này lên cực đại là 50 bằng cách chỉnh trong khóa registry HKEY_CLASSES_ROOT\Software\Microsoft\Windows Media Tools\Encoder\MaxClientConnections. Bởi vì mỗi kết nối hao tốn tài nguyên hệ thống và mạng, cần xem xét lại khả năng máy và môi trường truyền. Quá nhiều kết nối có thể làm quá tải máy và ngăn cản các máy khách chính đáng kết nối vào. Ta có thể ngăn cấm máy kết nối bằng cách áp mặt na địa chỉ IP để kết nối máy khách. Mặc định, bất kỳ máy khách chưa đến giới hạn kết nối đều được cho phép. Mặc dù Windows Media Encoder SDK không cung cấp sẵn API để làm việc này, ta có thể dùng Windows Media Format. Để biết thêm thông tin, xem thêm giao diện IWMAddressAccess và IWMAddressAccess2 trong trợ giúp của Windows Media Format. 4.3.2.2.2 Dùng DCOM: Distributed Component Object Model (DCOM – mô hình đối tượng thành phần phân phối) là một nghi thức cho phép các thành phần phần mềm liên lạc trực tiếp thông 202 qua mạng dùng TCP/IP. DCOM có thể dùng với Windows Media Encoder khi ta đang quản trị từ xa các máy đang chạy ứng dụng Windows Media Encoder, và trên các server Windows Media khi ta dùng tính năng đẩy. 4.3.2.3 Tìm hiểu codec: Nội dung âm thanh và hình ảnh có thể tiêu tốn nhiều băng thông dẫn dòng và tạo tập tin lớn. Bằng cách nén lại, nó có thể broadcast trên những băng thông Internet phổ biến và lưu thành tập tin Windows Media với kích thước vừa phải. Ta có thể nén nội dung bằng cách áp dụng các thuật toán nén cho dữ liệu, dựa vào chất lượng đầu ra mong muốn và băng thông khả dụng. Trước khi nội dung được trình diễn, nội dung được giải nén bằng các thuật tóan giải nén. Những thuật toán nén và giải nén như thế gọi là các codec. Bảng sau cung cấp thông tin về các codec khả dụng trong Windows Media Encoder Series. Codec Description Windows Media Audio 9 Professional Tạo âm thanh full surround trên những máy tính cài đặt card âm thanh đa kênh và Windows XP. Cung cấp nội dung âm thanh trong Windows Media Format để chơi lại trên thiết bị xem như đầu đĩa DVD hay hộp set-top. Windows Media Audio 9 Lossless Cung cấp mã hóa toàn vẹn về âm thanh. Windows Media Audio 9 Cung cấp chất lượng âm thanh không gì sánh kịp cho dẫn dòng băng hẹp Internet và âm nhạc download hi-fi. Hỗ trợ mã hóa VBR. Tương thíc hòan tòan với mọi phiên bản Windows Media Player. Windows Media Cung cấp chất lượng tốt cho nội dung âm thanh với tiếng nói. 203 Audio 9 Voice Windows Media Video 9 Tăng cường chất lượng hình ảnh cho người dùng Internet băng rộng và phân phối phim hình gần như DVD với tốc độ lên đến 400 Kbps. Cho phép chơi lại chất lượng sắc nét hơn bằng cách kết hợp nội dung trên TV và hộp set-top. Windows Media Video 8.1 Hỗ trợ nhiều loại băng thông mạng. Giảm việc trùng lắp nội dung trước khi mã hóa. Windows Media Video 7 Cho phép người dùng Windows Media Player 7 xem các nội dung phim hình đã mã hóa mà không cần phải download về bộ codec mới nhất. Lựa chọn tốt nhất cho những máy tính không thể hỗ trợ những yêu cầu trình diễn của các codec mới nhất. Windows Media Video 9 Screen Cung cấp cải thiện xử lý các hình bóng, chuyển động trên màn hình, và cuộn cho chụp màn hình. Hỗ trợ CBR và VBR một bước mã hóa mà không rớt khung. Codec này thì tối ưu hóa hòan toàn cho cả kịch bản dẫn dòng và download. Bảng 4-4 Các codec 4.3.2.4 Các yêu cầu về tính năng: Các tính năng. Feature Windows Media Player Operating system Codec 6.4 7.1/Windows® XP 9 Series 204 Interlaced output video X Microsoft Windows XP Windows Media Video 9 Nonsquare pixel output X Multiple- resolution MBR content X DRM support X X X Multichannel audio X Microsoft Windows XP Windows Media Audio 9 Professional High-resolution audio (24-bit, 96 kHz) X Microsoft Windows XP Windows Media Audio 9 Professional Dynamic range control X Microsoft Windows XP Windows Media Audio 9 Professional CBR encoding (one- or two- pass) X X X See the following table. Quality based VBR X X See the following table. 205 Bit rate-based VBR X X See the following table. Peak bit rate- based VBR X X See the following table. Bảng 4-5 Các tính năng Bảng tiếp theo này ghi những phương thức mã hóa cho các codec. Codec One- pass CBR Two- pass CBR Quality based VBR Bit rate- based VBR Peak bit rate- based VBR Windows Media Audio 9 Professional Có Có Có Có Có Windows Media Audio 9 Lossless Không Không Có Không Không Windows Media Audio 9 Có Có Có Có Có Windows Media Audio 9 Voice Có Không Không Không Không Windows Media Có Có Có Có Có 206 Video 9 Windows Media Video 8.1 Có Có Có Có Có Windows Media Video 7 Có Có Có Có Có Windows Media Video 9 Screen Có Không Có Không Không Bảng 4-6 Các phương thức mã hóa hỗ trợ 4.3.2.5 Phần mở rộng của tập tin: Phần mở rộng của tập tin cung cấp thông tin về nội dung chứa trong tập tin: o Các ứng dụng tạo ra các tập tin Windows Media chứa dòng âm thanh, dòng kịch bản hay cả hai phải dùng phần mở rộng .wma. o Các ứng dụng tạo ra các tập tin Windows Media chứa cả dòng hình ảnh, dòng âm thanh phải dùng phần mở rộng .wmv. Các tập tin này cũng chứa dòng kịch bản. o Tập tin chứa cấu hình Windows Media Encoder định nghĩa trước phải dùng phần mở rộng .wme. o Profile dùng phần mở rộng .prx. Chú ý: Ta có thể dùng phần mở rộng .asf đổi chỗ qua lại với .wmv và .wma, tuy nhiên, .wmv và .wma xác định loại nội dung. 4.3.2.6 Lập trình bằng C++: Chủ đề này nói những lưu ý về lập trình trong C++. Nếu không nói rõ, các ví dụ về sau sử dụng Microsoft Visual C++® 6.0. Từ đây trở đi, tuy ta chú trọng vào lập 207 trình bằng C++. C++ khá linh động trong viết mã nhưng bù lại, thảo chương khá dài và yêu cầu cẩn thận cao hơn so với VB và C#. Khi lập trình trong C++, ta phải theo các tập tin tiêu đề cần thiết vào project: Tập tin tiêu đề Mô tả localagent.h Các giao diện cho phép quản trị từ xa với các ứng dụng Windows Media Encoder. mspropshell.h Các giao diện cho phép cài đặt các hộp thoại chứa các trang tính năng định nghĩa sẵn. wmdevctl.h Các giao diện cho điều khiển thiết bị số. wmdrmprf.h Các giao diện cho bảo vệ nội dung với DRM. wmencode.h Các giao diện dùng để cấu hình và chạy các ứng dụng Windows Media Encoder. wmencvu.h Giao diện được dùng để tạo và chạy phần xem trước của dòng. wmsencid.h Một tập hòan chỉnh các định nghĩa DISPID. Bảng 4-7 Các tập tin tiêu đề Thay vì thêm các tập tin tiêu đề wmencode.h và mspropshell.h, ta có thể sử dụng các thư viện phát sinh các lớp bao để đơn giản hóa các giao diện COM liên quan: #import "WMEnc.exe" #import "MSPShell.dll" 4.3.2.7 Tạo ứng dụng mã hóa: Để tạo một ứng dụng mã hóa, ta thường trải qua các bước sau: 208 1. Tạo một đối tượng Encoder. 2. Tạo một nhóm nguồn để giữ các dòng đa truyền thông ta muốn mã hóa, và sau đó thêm các dòng đa truyền thông (chẳng hạn, một tập tin hay dữ liệu đầu vào từ card chụp màn hình) vào nhóm nguồn. 3. Chọn profile mã hóa. Một profile cho biết loại codec nào được dùng để mã hóa nội dung và xác định số lượng và tốc độ bit của dòng xuất. 4. Xác định nhu cầu muốn broadcast nội dung đã mã hóa thành dòng, lưu vào tập tin, hay cả hai. 5. Tùy chọn, ta cũng có thể: o Thêm thông tin mô tả (như tựa và bản quyền) và các thuộc tính tùy biến. o Xử lý trước phim hình, chẳng hạn lọc và xén lại, hay xác định các thiết lập tối ưu hóa. o Thêm họa tiết. o Bảo vệ nội dung bằng cách mật mã hóa với DRM. 6. Khởi động mã hóa. 4.3.2.7.1 Tạo đối tượng Encoder: Tùy thuộc vào ta tạo giao diện người dùng (UI) như thế nào: o Khi dùng UI tùy biến, tạo một đối tượng WMEncoder trực tiếp bằng cách dùng giao diện IWMEncoder trong C++. o Khi thể hiện các thành phần UI định nghĩa sẵn từ Windows Media Encoder, lấy đối tượng WMEncoder từ WMEncoderApp hay IWMEncoderApp. Đối tượng WMEncoderApp phải có phạm vi module tồn tại bên ngoài thủ tục. 4.3.2.7.2 Tạo đối tượng WMEncoder với giao diện tùy biến: Ví dụ C++ // Include libraries. #include 209 #include "wmencode.h" // Declare variables. HRESULT hr = S_OK; IWMEncoder* pEncoder = NULL; // Initialize the COM library and retrieve a pointer // to an IWMEncoder interface. hr = CoInitialize(NULL); if ( SUCCEEDED( hr ) ) { hr = CoCreateInstance(CLSID_WMEncoder, NULL, CLSCTX_INPROC_SERVER, IID_IWMEncoder, (void**) &pEncoder; } // Release pointers. if ( pEncoder ) { pEncoder->Release(); pEncoder = NULL; } 4.3.2.7.3 Tạo đối tượng WMEncoder khi hiển thị giao diện người dùng ứng dụng định nghĩa sẵn: 210 Ví dụ C++ // Include libraries. #include #include "wmencode.h" // Declare variables. HRESULT hr; IWMEncoder* pEncoder; IWMEncoderApp* pEncoderApp; // Initialize the COM library and retrieve a pointer // to an IWMEncoderApp interface. hr = CoInitialize(NULL); if ( SUCCEEDED( hr ) ) { hr = CoCreateInstance( CLSID_WMEncoderApp, NULL, CLSCTX_LOCAL_SERVER, IID_IWMEncoderApp, (void**) &pEncoderApp); } // Display the user interface. if ( SUCCEEDED( hr ) ) { hr = pEncoderApp->put_Visible(VARIANT_TRUE); } // Acquire an IWMEncoder interface. if ( SUCCEEDED( hr ) ) 211 { hr = pEncoderApp->get_Encoder(&pEncoder); } // Release pointers. if ( pEncoder ) { pEncoder->Release(); pEncoder = NULL; } if ( pEncoderApp ) { pEncoderApp->Release(); pEncoderApp = NULL; } 4.3.2.7.4 Thao tác trên các nguồn và nhóm nguồn: Windows Media Encoder SDK dùng khái niêm “nguồn” và “nhóm nguồn” để xác định các dòng nhập ta muốn mã hóa: o Một nguồn là một dòng âm thanh, dòng hình ảnh, dòng HTML, hay dòng kịch bản. o Một nhóm nguồn là một sưu tập các nguồn bao gồm tổ hợp bất kỳ của một nguồn âm thanh, một nguồn hình ảnh, một nguồn HTML, và một nguồn kịch bản. Chẳng hạn, để mã hóa một buổi hòa nhạc sống, ta sẽ thiết lập một nhóm nguồn gồm một nguồn âm thanh và một nguồn hình ảnh. Để mã hóa trình diễn PowerPoint, ta 212 phải thiết lập một nhóm nguồn gồm một nguồn âm thanh, một nguồn hình ảnh và một nguồn HTML. Ta có thể thiết lập nhiều nhóm nguồn trong một session mã hóa để mã hóa đồng thời các nội dung khác nhau. Chẳng hạn, để broadcast một buổi họp công ty trực tuyến, ta sẽ thiết lập bốn nhóm nguồn tương ứng với sự kiện chính, phim hình chào mừng, phim hình lúc ngừng, và phim hình lúc bế mạc. Hình 4-9 Mô tả 4 nhóm nguồn Chỉ một nhóm nguồn có thể họat động tại một thời điểm; ta có thể hoặc đặt một nhóm nguồn hoạt động, hay có các nhóm nguồn xoay dần theo thứ tự khi cái đầu tiên kết thúc mã hóa. Xác định các nguồn cho một session mã hóa theo các bước sau: 1. Tạo một sưu tập nhóm nguồn để giữ các nhóm nguồn dùng IWMEncSourceGroupCollection. 2. Tạo một nhóm nguồn để giữ một hay nhiều nguồn đầu vào dùng IWMEncSourceGroup. 213 3. Tạo các đối tượng cho các nguồn đầu vào và thêm chúng vào nhóm nguồn dùng IWMEncSource. 4. Dùng IWMEncSource, cho biết loại nguồn đầu vào. Nếu nguồn là một thiết bị (chẳng hạn là card bắt hình hay máy quay phim DV), trước hết ta phải liệt kê số nguồn khả dụng trên hệ thống dùng IWMEncPluginInfo, IWMEncSourcePluginInfoManager, và IWMEncDeviceControlPluginInfoManager. Ở đây, ta sẽ xem xét kỹ chủ đề : “Dùng chụp màn hình như là nguồn”, cho biết làm cách nào dùng chụp màn hình như một nguồn hình ảnh. Dùng chụp màn hình như một nguồn Ta có thể dùng chụp màn hình như một nguồn hình ảnh. Plug-in chụp màn hình cho phép bắt hình ở mọi phần của màn hình, chẳng hạn, để bắt di chuyển của mouse để mô tả một quá trình. Ta cũng có thể chụp từ một card nối đến thiết bị chuyển đổi quét. Ta cần cấu hình plug-in để xác định khu vực ta muốn chụp. Một cách là dùng giao diện IPropertyBag (xem ví dụ C++ ở dưới). Cân nhắc các tham khảo sau để cải thiện việc chụp màn hình: o Dùng Windows Media Video 9 codec. o Dùng card đồ họa nhanh hơn. o Dùng máy tính cấu hình mạnh hay máy tính với bộ đôi vi xử lý. o Vô hiệu hóa tăng tốc phần cứng. Từ Control Panel Display Properties, và tab Settings, click Advanced. Trên tab Troubleshoot, kéo slide thiết lập tăng tốc phần cứng về None. o Giảm chất lượng màu để giảm số lượng dữ liệu mà card đồ họa cần xử lý. Từ Control Panel Display Properties, trên tab Settings, click thiết lập thấp hơn cho Color quality. o Chạy ứng dụng mã hóa trong 256 màu. Right-click tập tin thực thi, chọn Properties, và trên tab Compatibility, chọn Run in 256 colors. 214 o Chỉnh sửa profile để giảm tốc độ khung và kích thước bắt ảnh. Tăng cường tần suất bit cũng cho kết quả tốt hơn. o Đóng hết những ứng dụng không cần thiết. o Bỏ ảnh nền. Ví dụ Visual Basic sau mô tả việc dùng chụp màn hình như là một nguồn. Ví dụ C++ mô tả cấu hình chụp màn hình dùng property bag. Ví dụ C++ // Include libraries. #include #include #include #include "C:\WMSDK\WMEncSDK9\include\wmencode.h" // Define the screen capture properties. #define WMSCRNCAP_CAPTUREWINDOW CComBSTR("CaptureWindow") #define WMSCRNCAP_WINDOWLEFT CComBSTR("Left") #define WMSCRNCAP_WINDOWTOP CComBSTR("Top") #define WMSCRNCAP_WINDOWRIGHT CComBSTR("Right") #define WMSCRNCAP_WINDOWBOTTOM CComBSTR("Bottom") #define WMSCRNCAP_FLASHRECT CComBSTR("FlashRect") #define WMSCRNCAP_ENTIRESCREEN CComBSTR("Screen") #define WMSCRNCAP_WINDOWTITLE CComBSTR("WindowTitle") // Declare variables. HRESULT hr = S_OK; IWMEncoder* pEncoder; IWMEncSourceGroupCollection* pSrcGrpColl; 215 IWMEncSourceGroup* pSrcGrp; IWMEncSource* pSrc; IWMEncVideoSource2* pSrcVid; IPropertyBag* pPropertyBag; CComVariant varValue; // Initialize the COM library and retrieve a pointer to an IWMEncoder interface. hr = CoInitialize(NULL); if ( SUCCEEDED( hr ) ) { hr = CoCreateInstance(CLSID_WMEncoder, NULL, CLSCTX_INPROC_SERVER, IID_IWMEncoder, (void**) &pEncoder); } // Retrieve the source group collection. if ( SUCCEEDED( hr ) ) { hr = pEncoder->get_SourceGroupCollection(&pSrcGrpColl); } // Add a source group to the collection. if ( SUCCEEDED( hr ) ) { hr = pSrcGrpColl->Add(CComBSTR("SG_1"), &pSrcGrp); 216 } if ( SUCCEEDED( hr ) ) { hr = pSrcGrp->AddSource(WMENC_VIDEO, &pSrc); } // Retrieve an IWMEncVideoSource2 pointer. if ( SUCCEEDED( hr ) ) { hr = pSrc->QueryInterface(IID_IWMEncVideoSource2, (void**)&pSrcVid); } // Add a video source to the source group. if ( SUCCEEDED( hr ) ) { hr = pSrcVid->SetInput(CComBSTR("ScreenCap://ScreenCapture1")); } // Retrieve a pointer to the property bag. if ( SUCCEEDED( hr ) ) { hr = pSrcVid->QueryInterface(IID_IPropertyBag, (void**)&pPropertyBag); } // Set full screen capture. { varValue = true; 217 if ( SUCCEEDED( hr ) ) { hr = pPropertyBag->Write( WMSCRNCAP_ENTIRESCREEN, &varValue ); } } // Set the capture area. { // nLeft, nRight, nTop, and nBottom are the dimensions to capture int nLeft, nRight, nTop, nBottom; // Initialize the capture area. The size must be even. varValue = false; if ( SUCCEEDED( hr ) ) { hr = pPropertyBag->Write( WMSCRNCAP_ENTIRESCREEN, &varValue ); } varValue = nLeft; if ( SUCCEEDED( hr ) ) { hr = pPropertyBag->Write( WMSCRNCAP_WINDOWLEFT, &varValue ); } varValue = nRight; if ( SUCCEEDED( hr ) ) { 218 hr = pPropertyBag->Write( WMSCRNCAP_WINDOWRIGHT, &varValue ); } varValue = nTop; if ( SUCCEEDED( hr ) ) { hr = pPropertyBag->Write( WMSCRNCAP_WINDOWTOP, &varValue ); } varValue = nBottom; if ( SUCCEEDED( hr ) ) { hr = pPropertyBag->Write( WMSCRNCAP_WINDOWBOTTOM, &varValue ); } varValue = true; if ( SUCCEEDED( hr ) ) { hr = pPropertyBag->Write( WMSCRNCAP_FLASHRECT, &varValue ); } // Continue configuring the encoding session. // Release pointers. if ( pSrcGrpColl ) { pSrcGrpColl->Release(); 219 pSrcGrpColl = NULL; } if ( pSrcGrp ) { pSrcGrp->Release(); pSrcGrp = NULL; } if ( pSrcVid ) { pSrcVid->Release(); pSrcVid = NULL; } if ( pSrc ) { pSrc->Release(); pSrc = NULL; } if ( pPropertyBag ) { pPropertyBag->Release(); pPropertyBag = NULL; } if ( pEncoder ) { pEncoder->Release(); pEncoder = NULL; } 220 } 4.3.2.7.5 Thao tác với profile : Một profile xác định codec nào được dùng để nén và quyết định số lượng dòng xuất và tần suất bit của chúng. Mỗi profile nhắm đến các người dùng và mục đích khác nhau. Chẳng hạn, một profile có thể với chất lượng dựa trên variable bit rate (VBR) cho download tập tin, trong khi profile khác dùng constant bit rate (CBR) để tạo dòng. Mỗi profile được dùng cho một số xác định và loại các dòng nguồn. Chỉ có một profile có thể liên quan đến mỗi nhóm nguồn tại một thời điểm. và mọi nhóm nguồn phải dùng cùng profile trong sessiion mã hóa. Ta có thể dùng profile tùy biến (các tập tin .prx ) hay các profile hệ thống đi kèm với Windows Media Encoder SDK. Dành cho các ứng dụng mã hóa mới, ta nên tạo và dùng các profile tùy biến để đáp ứng nhu cầu của người dùng. Các profile hệ thống không cập nhật cho các codec mới và không hỗ trợ tương thích ngược. 4.3.2.7.6 Thêm thông tin phụ: o Thông tin hiển thị: thông tin sẽ xuất hiện trong trình chơi nhạc, bao gồm tên tác giả và tên nghệ sĩ, tựa bài, mô tả, xếp loại, và bản quyền. Dùng IWMEncDisplayInfo để thêm thông tin này. o Thuộc tính của người dùng: thông tin này thêm vào form có từng cặp tên-giá trị mà ta định nghĩa, cho phép ta thêm vào các thông tin thêm về session mã hóa. Chẳng hạn, ta có thể thêm ngày và thể loại vào bằng cách dùng IWMEncAttributes. Ví dụ thêm thuộc tính tùy biến vào trong một tập tin truyền thông. Ví dụ C++ #include #include // Includes _bstr_T and _variant_T. #include // Includes CComBSTR. 221 #include "wmencode.h" // Declare variables. HRESULT hr; IWMEncoder* pEncoder; IWMEncAttributes* pAttr; CComBSTR m_bstrName; CComVariant m_varValue; CComVariant m_varIndex; CComVariant m_varRemove; long cnt; // Initialize the COM library and retrieve a pointer // to an IWMEncoder interface. hr = CoInitialize( NULL ); if ( SUCCEEDED( hr ) ) { hr = CoCreateInstance(CLSID_WMEncoder, NULL, CLSCTX_INPROC_SERVER, IID_IWMEncoder, (void**) &pEncoder); } // Retrieve a pointer to an IWMEncAttributes interface. if ( SUCCEEDED( hr ) ) 222 { hr = pEncoder->get_Attributes( &pAttr ); } // Add name-value pairs to the attributes collection. _bstr_t bName[] = { _bstr_t("Date Created: "), _bstr_t("Time Created: "), _bstr_t("File Content: ") } _variant_t vVal[] = { _variant_t("02/15/2000"), _variant_t("13:30:15"), _variant_t("multimedia data"), } for( int i = 0; i < 3 && SUCCEEDED(hr); i++ ) { hr = pAttr->Add(bName[i],vVal[i]); } // Retrieve the name-value pairs from the collection. if ( SUCCEEDED( hr ) ) { hr = pAttr->get_Count(&cnt); 223 } for ( i = 0; i < cnt && SUCCEEDED( hr ); i++ ) { hr = pAttr->Item(i, &m_bstrName, &m_varValue); } // Remove an attribute by name. if ( SUCCEEDED( hr ) ) { m_varRemove = "File Content: "; hr = pAttr->Remove(m_varRemove); } // Remove an attribute by index. if ( SUCCEEDED( hr ) ) { m_varRemove = 0; hr = pAttr->Remove(m_varRemove); } // Remove all attributes. if ( SUCCEEDED( hr ) ) { hr = pAttr->RemoveAll(); } 224 // Release pointers. if ( pAttr ) { pAttr->Release(); pAttr = NULL; } if ( pEncoder ) { pEncoder->Release(); pEncoder = NULL; } 4.3.2.7.7 Tiền xử lý âm thanh và hình ảnh: Cho phép thực hiện việc lọc khung, xén hình, và tạo họa tiết cho dữ liệu đầu ra. Ta không đi sâu vào các chi tiết phức tạp của phần này. 4.3.2.7.8 Xác định dữ liệu đầu ra: 4.3.2.7.8.1 Lưu nội dung mã hóa xuống tập tin: Ta có thể lưu nội dung của một tập tin Windows Media, hoặc song song với ứng dụng broadcast hoặc chỉ riêng lưu tập tin. Ta có thể hạn chế kích thước tập tin xuất khi lưu, hoặc bằng khỏang xử lý dài nhất hay kích thước tập tin lớn nhất. Ta cũng có thể xác định nhóm nguồn nào cần lưu trữ. Chẳng hạn, nếu ta mã hóa một màn hình chào mừng tĩnh, một buổi trình diễn sống và một màn hình kết thúc tĩnh, ta có thể chỉ muốn lưu trữ buổi trình diễn sống. Mặc định, các nhóm nguồn tự động lưu trữ, vì vậy đặt thuộc tính AutoArchive trong IWMEncSourceGroup.AutoArchive để Dừng hẳn hoặc Ngưng các nhóm nguồn ta không muốn lưu. 225 Để điều khiển bằng tay việc khởi động, dừng, ngưng quá trình xử lý lưu, đặt phương thức Archive dùng IWMEncoder hay WMEncoder. Mặc định, việc lưu trữ bắt đầu ngay khi mã hóa bắt đầu. Nếu muốn điều khiển bằng tay, đặt thuộc tính EnableAutoArchive bằng false. Ví dụ mô tả việc lưu nội dung mã hóa xuống tập tin bằng IWMEncFile2. Ví dụ C++ // Include libraries. #include #include "wmencode.h" // Declare variables. HRESULT hr; IWMEncoder* pEncoder; IWMEncFile* pFile; // Initialize the COM library and retrieve a pointer // to an IWMEncoder interface. if ( SUCCEEDED( hr ) ) { hr = CoCreateInstance( CLSID_WMEncoder, NULL, CLSCTX_INPROC_SERVER, IID_IWMEncoder, (void**) &pEncoder); } // Specify a file in which to save encoded content. 226 if ( SUCCEEDED( hr ) ) { hr = pEncoder->get_File(&pFile); } if ( SUCCEEDED( hr ) ) { hr = pFile->put_LocalFileName(CComBSTR("C:\\filename.wmv")); } // Release pointers. if ( pFile ) { pFile->Release(); pFile = NULL; } if ( pEncoder ) { pEncoder->Release(); pEncoder = NULL; } 4.3.2.7.8.2 Đẩy một dòng lên Windows Media Server Ta có thể broadcast một dòng bằng cách đẩy nó lên một Windows Media Server, rất hữu ích khi ta muốn khởi tạo kết nối từ một ứng dụng mã hóa. Khi đẩy một dòng lên một Windows Media Server, ta cần biết : o Tên của Windows Media Server. Tên này có thể là alias, một fully qualified domain name, hay địa chỉ IP. 227 o Tên của điểm xuất bản mới hay có sẵn. o Tùy chọn, tên điểm xuất bản cho cấu hình thiết lập. Đây là phần liên quan đến phiên bản Windows hỗ trợ Windows Media Server, ta không đi sâu vào phần này. 4.3.2.7.8.3 Broadcast một dòng từ ứng dụng Windows Media Encoder: Broadcast một dòng bằng cách cho phép những máy khách (Windows Media Server, Web Server, hay player) để kết nối trực tiếp với máy chạy ứng dụng Windows Media Encoder để kéo dòng về. Máy khách kết nối với dòng bằng cách dùng chỉ:cổng cho kết nối Internet hay ổng cho kết nối LAN. Ta có thể ngăn cấm truy cập theo mặt nạ IP. Để broadcast một dòng từ máy chủ, dùng IWMEncBroadcast để xác định nghi thức và số hiệu cổng để có thể broadcast. Ví dụ C++ // Include libraries. #include #include "wmencode.h" // Declare variables. HRESULT hr; IWMEncoder* pEncoder; IWMEncBroadcast* pBrdcst; // Initialize the COM library and retrieve a pointer // to an IWMEncoder interface. 228 if ( SUCCEEDED( hr ) ) { hr = CoCreateInstance( CLSID_WMEncoder, NULL, CLSCTX_INPROC_SERVER, IID_IWMEncoder, (void**) &pEncoder); } // Specify a broadcast protocol and port number. if ( SUCCEEDED( hr ) ) { hr = pEncoder->get_Broadcast(&pBrdcst); } if ( SUCCEEDED( hr ) ) { hr = pBrdcst->put_PortNumber(WMENC_PROTOCOL_HTTP, 8080); } // Release pointers. if ( pBrdcst ) { pBrdcst->Release(); pBrdcst = NULL; } if ( pEncoder ) { 229 pEncoder->Release(); pEncoder = NULL; } 4.3.2.8 Quản trị từ xa ứng dụng mã hóa: Quản trị viên có thể điều khiển nhiều thể hiện các ứng dụng Windows Media Encoder trên máy ở xa hoặc bằng LAN hay Internet. Bằng cách dùng các giao diện IWMEncAgentLocator, IWMEncoderAgent và IWMEncoderNamesCollection, ta có thể viết các ứng dụng cho phép : o Tạo các đối tượng WMEncoderApp trên các máy ở xa. o Liệt kê các đối tượng WMEncoder trên máy cho trước. o Kết nối và điều khiển một đối tượng WMEncoder. o Quan sát trạng thái của quá trình xử lý mã hóa. Windows Media Encoder phải cài sẵn trên máy ở xa, và ta phải dùng tiện ích cấu hình DCOM để thiết lập việc khởi phát, truy cập, và cho phép cấu hình cho cả Windows Media Encoder và Windows Media Encoder Agent. Để tạo các đối tượng WMEncoderApp, đối tượng WMEncoderAgent phải chạy trên máy ở xa. Ta có thể khởi động đối tượng WMEncoderAgent bằng tay hay tự động. 4.3.2.9 Phụ chú: Các phần ta không đi sâu, để biết rõ hơn có thể xem ở tài liệu Windows Media Encoder SDK Documentation đi kèm với bộ SDK. Chương 5 Tổng kết 5.1 Kết luận: 5.1.1 Kết quả đạt được: Sau khi thực hiện đề tài, chúng em thu được một số kết quả sau: 230 • Tìm hiểu được công nghệ truyền hình ảnh âm thanh trên mạng LAN và Internet H323. Đây là một công nghệ mã nguồn mở đa nền, rất hữu ích trong việc viết các ứng dụng chạy trên nhiều hệ điều hành khác nhau. • Tìm hiểu được bộ phát triển phần mềm Microsoft Windows Media Encoder. Với khả năng tích hợp chặt chẽ với hệ điều hành Windows, Windows Media Encoder SDK rất thích hợp cho tìm hiểu các khái niệm về mã hóa, giải mã các dòng âm thanh, hình ảnh trên hệ điều ảnh Windows. • Tìm hiểu được nghi thức RFB, một nghi thức đơn giản nhằm giao tiếp điều khiển máy tính từ xa. Chúng em cũng thu lượm được các kiến thức về vùng đệm khung dành cho màn hình, khả năng xây dựng tối ưu hóa cách viết mã từ mã nguồn mở của nghi thức. • Tìm hiểu được các kỹ thuật kiểm sóat hệ thống một cách triệt để, khả năng lập trình tương tác cấp thấp với bộ nhớ, thiết bị, tùy biến giao diện trên cũng như các cơ chế quản lý hệ thống của hệ điều hành Windows. • Xây dựng thành công một chương trình điều khiển máy tính từ xa, đồng thời qua đó, nắm được khả năng tích hợp và sử dụng được các đồ án mã nguồn mở do cộng đồng công nghệ thông tin thế giới cung cấp không vụ lợi. 5.1.2 Hạn chế: Mặc dù chúng em đã cố gắng hết sức nhưng ứng dụng vẫn còn một số hạn chế nhất định: • Ứng dụng vẫn chưa kiểm tra được tính ổn định cao trên nhiều máy. • Chưa tối ưu hóa trong việc truyền gởi dữ liệu giữa chương trình điều khiển và chương trình bị điều khiển. • Ứng dụng có thể chiếm dụng bộ nhớ khi thực hiện việc quan sát màn hình máy khách. 231 5.2 Hướng phát triển Với những kết quả đạt được và những hạn chế nêu trên, đề tài có thể mở rộng theo các hướng sau: • Mở rộng khả năng kiểm soát : không những hệ thống máy khách mà cả nội dung người dùng lướt web bằng các cách như lọc liên kết, nội dung trang web. • Mở rộng thêm các loại hình phục vụ : như nhắn tin điện thoại di động… • Cải thiện độ ổn định và vấn đề bộ nhớ cho chương trình. 232 TÀI LIỆU THAM KHẢO Tài liệu viết : Tài liệu trong nước [1] Nguyễn Tri Tuấn, Cơ sở lý thuyết về lập trình sự kiện và hook (chặn các thông điệp), môn học Lập trình C trên Windows, 24/2/2004. [2] Nguyễn Tri Tuấn, Thư viện liên kết động, môn học Lập trình C trên Windows, 24/2/2004. Tài liệu nước ngoài [3] Robert Kuster, Three Ways to Inject Your Code into Another Process, www.codeproject.com, 25/7/2003 cập nhật 21/8/2003. [4] António Feijão, Lock Windows Desktop, www.codeproject.com, 14/6/2004 cập nhật 9/12/2004. [5] Fad B, Using GINA.DLL to Spy on Windows User Name & Password And to Disable SAS (Ctrl+Alt+Del), www.codeproject.com, 22/8/2003. [6] =[ Abin ]=, An All-Purpose Keyboard Hooker, www.codeproject.com, 13/5/2004 cập nhật 31/5/2004. [7] Microsoft Development Network (MSDN), tài liệu các loại, Microsoft Visual Studion 6.0, 10/2003. [8] Joseph M. Newcomer, Hook and DLLs, www.codeproject.com, 1/4/2001. [9] Derek Lakin, CTabCtrlSSL - An easy to use, flexible extended tab control, www.codeproject.com, 21/9/2001. [10] dang!, Ownerdraw Tab Controls - Borders and All, www.codeproject.com, 31/1/2002 cập nhật 1/7/2002. [11] Barry, Barry's Screen Capture, www.codeguru.com, 4/2/2003. 233 [12] P.GopalaKrishna, Various methods for capturing the screen, 24/8/2003. [13] Carlos Antollini, A set of ADO Classes - version 2.04, www.codeproject.com, 25/4/2001 cập nhật 3/8/2002. [14] Tristan Richardson, The RFB Protocol version 3.8, RealVNC Ltd, 8/3/2005. [15] Davide Calabro, CButtonST v3.9 (MFC Flat buttons), www.codeproject.com, 25/11/1999 cập nhật 29/3/2003. [16] Nischant S, Tile, center and stretch a bitmap as your MFC dialog background, www.codeproject.com, 7/6/2002. [17] PJ Naughter, Splasher v1.32 - A Splash Screen Implementation, www.codeproject.com, 4/3/2000. [18] Mark Jackson, Sort List Control, www.codeproject.com, 7/9/2001. [19] Chris Maunder, Adding Icons to the System Tray, www.codeproject.com, 30/11/1999 cập nhật 3/8/2003. Websites : [20] Codeproject, [21] RealVNC Ltd, [22] H323, [23] Vox Gratia, [24] Microsoft Corporation, [25] Codeguru, [26] Source Forge, ._.

Các file đính kèm theo tài liệu này:

  • pdfCNTT1012.pdf