fms3中server端代碼是寫在asc檔案中,用戶端是broadcastMsg.swf
2者互動方式我總結如下:
1. 用戶端呼叫伺服器
伺服器端main.asc代碼如下:
<a></a>
Client.prototype.serverFun1 = function(value)
{
return "value="+value
};
用戶端代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
fontSize="12" creationComplete="init()">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
private var netConnection:NetConnection;
private var responder:Responder;
private var appServer:String="rtmp://192.168.0.249/TestCode1";
private function init():void
{
netConnection = new NetConnection();
netConnection.connect(appServer);
netConnection.client=this;
}
private function onClick(evt:MouseEvent):void
responder = new Responder(OkFun,ErrorFun);
netConnection.call("serverFun1",responder,"va");
private function OkFun(re:String):void
Alert.show(re);
private function ErrorFun(info:Object):void
Alert.show( "error: " + info.description );
Alert.show( "error: " + info.code );
]]>
</mx:Script>
<mx:Button x="43" y="65" label="調用伺服器" id="btn" click="onClick(event)"/>
</mx:Application>
代碼說明:
Responder 類提供了一個對象,該對象在 NetConnection.call() 中使用以處理來自與特定操作成功或失敗相關的伺服器的傳回值。
它有2個參數:第1個是成功調用回調的方法,第2個參數是調用失敗時回調的方法
call () 方法
public function call(command:String, responder:Responder, ... arguments):void
第1個參數:伺服器端方法名
第2個參數:可選對象,用于處理伺服器的傳回值
第3個參數:傳遞給伺服器端方法的值
本例題:點選按鈕後,調用asc檔案中的serverFun1方法,并傳遞參數“va”給它,serverFun1方法處理後方法一個值,要是成功就回調OkFun,并顯示“value=va”字元串,要是調用失敗(可能會遇到特定于目前操作的網絡操作錯誤或與目前連接配接狀态有關的錯誤)将回調ErrorFun,并顯示錯誤資訊
2. 伺服器端呼叫指定的用戶端
Code
Client.call() 在Flash客戶機上異步的執行一個方法,并把值從Flash客戶機傳回到伺服器。
用法 clientObject.call(methodName, [resultObj, [p1, ..., pN]])
第1個參數:用戶端的方法名
第2個參數:當發送者期待一個來自客戶機的傳回值時需要這個參數。如果參數被傳遞但沒有傳回值被期待的話,則傳遞值null。結果對象可以是你定義的任何對象,并且,為了有用起見,這個結果對象應該有兩個方法-onResult和onStatus,這些方法會在結果到達時被調用。如果遠端方法的調用是成功的,則resultObj.onResult事件會被觸發;否則,resultObj.onStatus事件将被觸發。
第3個參數:傳遞給用戶端的方法的值
本例題:啟動後,連接配接成功,伺服器接收請求,并調用改用戶端的asyncServerCall方法(必須公有),asyncServerCall方法處理後傳回值,要是處理成功onResult事件就被觸發,要是處理失敗onStatus事件就被觸發。
3. 伺服器端呼叫所有的用戶端(廣播)
application.onConnect = function(currentClient)
application.acceptConnection(currentClient);
application.broadcastMsg("showServerMsg",application.clients.length );
}
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
fontSize="12" creationComplete="init()">
<![CDATA[
public function showServerMsg( n:Number ) :void
{
var msg:String ="已經有"+n.toString()+"位使用者連接配接";
Alert.show( msg );
}
Application.broadcastMsg():把一條消息廣播到所有連接配接的客戶機,給每個客戶機廣播
這個方法相當于循環周遊Application.clients數組并在每一個獨立的客戶機上調用Client.call(),但這個方法的效率更高(尤其是當連接配接的客戶機數量很大時)。唯一的不同是當你調用broadcastMsg()時你不能指定一個響應對象,除此以外,兩種文法是一樣的。
等同于如下:
//周遊用戶端清單,分别call他們
for(var i=0;i<application.clients.length;i++) {
application.clients[i].call("showServerMsg",application.clients.length);
本例題:一旦有客戶機連接配接fms,就給每個連接配接的客戶機廣播,并顯示出"已經有n位使用者連接配接"
4. 伺服器端呼叫伺服器端
NetConnection.call
用法:
NetConnection.call(methodName, [resultObj, p1, ..., pN])
調用一個 Flash Communication Server 或者其他應用伺服器上的指令或方法。用法和用戶端的 NetConnection.call 的用法一樣。他調用一個遠端伺服器上的方法。我就沒貼代碼
本文轉自 OldHawk 部落格園部落格,原文連結:http://www.cnblogs.com/taobataoma/archive/2010/12/05/1896748.html,如需轉載請自行聯系原作者