Truyền nhận dữ liệu giữa client và server

Một phần của tài liệu nghiên cứu và phát triển game trên trình duyệt web với silverlight (Trang 67)

Vấn đề

Game được xử lý theo cơ cấu client-server, do đó vấn đề truyền nhận dữ liệu giữa client được thực hiện thường xuyên, do Silverlight không hổ trợ sử dụng các phương thức trong http để truyền nhận dữ liệu, do đó chúng em phải sử dụng WCF service hay nạp file theo cơ chế bất đồng bộ để truyền nhận dữ liệu qua lại.

Giải pháp 1

Nạp file theo cơ chế bất đồng bộ

Trong quá trình thực thi, có lúc chương trình cần phải tải về một tập tin nào đó từ server. Nhằm hỗ trợ đa nền tảng (cross-platform) nên silverlight phải cài đặt giao diện Netscape Plugin Application Programming Interface (NPAP). Điều này khiến cho tất cả các lời gọi đến server đều được thực hiện một cách bất đồng bộ và vì vậy khi yêu cầu một tập tin trên server thì ta không thể dừng

chương trình hiện tại để đợi nhận xong dữ liệu truyền về từ server. Vấn đề đặt ra là phải có cách để sau khi yêu cầu tập tin, chương trình quay lại tiếp tục công việc hiện tại và khi nhận xong dữ liệu thì gọi hàm xử lí tương ứng với dữ liệu vừa nhận.

Lớp FileLoader được xây dựng để đáp ứng nhu cầu trên.

Hàm LoadFile chịu trách nhiệm tải tập tin theo đường dẫn được cho trước sau đó khi đã tải xong sẽ gọi hàm xử lí tương ứng với dữ liệu nhận được.

Để nạp file theo url, sử dụng lớp WebClient, chỉ định url của file cần nạp và hàm xử lí sau khi đọc xong.

Giải pháp 2 WCF service

Các thông tin về tài khoản người chơi đều được lưu trữ trong cơ sở dữ liệu. Tuy nhiên Silverlight lại không hỗ trợ truy xuất trực tiếp đến cơ sở dữ liệu[2]. Vì vậy cần phải tìm hiểu cách để lấy dữ liệu được lưu trữ trong cơ sở dữ liệu tại server.

Mặc dù không hỗ trợ truy xuất đến cơ sở dữ liệu nhưng Silverlight có thể sử dụng WCF service để lấy dữ liệu. Sau khi đã tạo ra WCF service mong muốn, ta add reference vào ứng dụng Silverlight.

2[] http://www.codeproject.com/KB/silverlight/UpdatingSilverlightDB.aspx

public delegate void FileLoadCompletedDelegate(Stream stream); public class FileLoader

{

private FileLoadCompletedDelegate _delegateFunc;

public void LoadFile(string uri, FileLoadCompletedDelegate func); }

// Nạp file bất đồng bộ

public void LoadFile(string uri, FileLoadCompletedDelegate func) {

WebClient client = new WebClient(); client.OpenReadCompleted += new

OpenReadCompletedEventHandler(client_OpenReadCompleted); client.OpenReadAsync(new Uri(uri, UriKind.RelativeOrAbsolute)); _delegateFunc = func; // Lưu lại để gọi sau

Ví dụ sau sẽ minh họa việc gọi hàm đăng nhập từ AccountService.

Trước hết cần khởi tạo một EndpointAddress bằng địa chỉ của WCF service mình muốn dùng. Sau đó tạo ra một biến ở client sử dụng phương thức truyền dữ liệu là BasicHttpBinding, chỉ định hàm sẽ thực thi khi gọi hàm của WCF service thành công và cuối cùng là thực thi hàm từ WCF service.

Một phần của tài liệu nghiên cứu và phát triển game trên trình duyệt web với silverlight (Trang 67)

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

(93 trang)
w