利用FlashCom製作任何多人連線的應用時,明白Broadcast、Feedback、Private Call三種概念的分別,便可以清楚知道何時需要應用那一種情況,與及應該如何編程。
Broadcast
Broadcast是向所有人廣播,假設Client邊有5個人連線,5個人都可以收到這個訊息,這個訊息可以是由Server向5個人發出;或是是其中一個人,通過Server向5個人發出。要做到廣播,主要利用Server邊的SharedObject.send()。
例如: Client邊發送: NetConnection.call("msgFromClient", null, msg);
Server邊:NetConnection.msgFromClient = function(msg) {
application.SharedObject.send("msgFromSrvr", msg);
};
Client邊接收:
SharedObject.msgFromSrvr = function(msg) {...};
Feedback
Feedback指Server向自己發出訊息,例如自已利用NetConnection.call()呼叫Server邊的Function,Server邊又用NetConnection.call()呼叫Client邊的Function作出回應,留意Server邊這個NetConnection.call()只可以Client自已收到,別的Client是收不到。
例如: Client邊發送: NetConnection.call("msgFromClient", null, msg);
Server邊:NetConnection.msgFromClient = function(msg){
Client.call("msgFromSrvr", false, msg);
};
Client邊接收:
NetConnection.msgFromSrvr = function(msg) {...};
Private Call
應用Chat Room的情形,就是私下交談,Client邊有5個人(A-E),A有些說話只想對E說,別的人不會收到,這就是Private Call的概念。FlashCom沒有直接ActionScript可以做到,利用一個較迂迴方法去做。首先Server邊有一個Object叫Client,當每一個Client邊連線成功後,Server邊的application下便會產生一個Client Instance,例如有5個人,就有5個Client Instances,分別是application.clients[0]至application.clients[4],只要利用Prototype對Client Object擴充一個新Method,Method中有一個For Loop,檢查Client Instance的ID(假設每個Client邊連線都有一個Unique ID),當ID跟接收者的ID相同時,便利用application.clients[i].call()去Call接收者的Function。
例如: Client邊發出: NetConnection.call("msgFromClient", null, id, msg);
Server邊:Client.prototype.msgFromClient = function(id, msg) {
for (var i = 0;i<application.clients.length;i++){
if (application.clients[i].name == id) {
application.clients[i].call("msgFromSrvr", null, msg);
}
}
}; Client邊接收:
NetConnection.msgFromSrvr = function(msg) {...}; |