Flex與.NET互操作(十):FluorineFx.Net的及時(shí)通信應(yīng)用(ApplicationAdapter)(一)
使用FluorineFx.Net開(kāi)發(fā)及時(shí)通信應(yīng)用,我們可以通過(guò)ASP.NET網(wǎng)站來(lái)宿主,一個(gè)ASP.NET網(wǎng)站可以承載多個(gè)實(shí)時(shí)通訊應(yīng)用程序。這些應(yīng)用程序都存儲(chǔ)ASP.NET網(wǎng)站的根目錄下指定文件夾的根目錄中。如下圖示:

在開(kāi)發(fā)FluorineFx的及時(shí)通信應(yīng)用的時(shí)候,按照FluorineFx的目錄結(jié)構(gòu)配置ASP.NET的站點(diǎn)目錄是非常簡(jiǎn)單的,只需要在ASP.NET站點(diǎn)下面建立一個(gè)名為apps的目錄,那么FluorineFx就會(huì)認(rèn)為此目錄下的每一個(gè)文件夾就表示一個(gè)FluorineFx應(yīng)用。
我們可以通過(guò)FluorineFx來(lái)開(kāi)發(fā)及時(shí)文字聊天、視頻聊天、視頻錄制、媒體播放程序以及WebGame等類(lèi)似及時(shí)應(yīng)用程序。比如我們需要開(kāi)發(fā)一個(gè)視頻聊天系統(tǒng),OK,那便在ASP.NET站點(diǎn)目錄下建立一個(gè)apps目錄,然后在apps下建立一個(gè)名為VideoChat的目錄,如下目錄結(jié)構(gòu):

在Flash或是Flex客戶(hù)端,我們就可以使用下面的代碼來(lái)連到這個(gè)基于FluorineFx的視頻聊天應(yīng)用。
public function ConnectionFxApp():void
{
ns = new NetConnection();
ns.connect("rtmp://localhost:1974/VideoChat");
ns.client=this;
ns.addEventListener(NetStatusEvent.NET_STATUS,onNetStatusHandler);
}
private function onNetStatusHandler(evt:NetStatusEvent):void
{}
每個(gè)應(yīng)用程序都有其自己的應(yīng)用范圍和層次的根源,這和FMS、Red5是一樣的規(guī)律。無(wú)論是范圍還是層次,他都有一個(gè)唯一的名字(應(yīng)用名、實(shí)例名等)來(lái)區(qū)分,我們也可以叫他們?yōu)閼?yīng)用程序的實(shí)例。這些實(shí)例可以是聊天室房間、視頻流以及共享對(duì)象等。

這些其實(shí)是非常容易理解的,如上圖示的聊天室房間分配,分別有Room1,Room2,Room3三個(gè)聊天房間,那么對(duì)于VideoChat這個(gè)聊天應(yīng)用來(lái)說(shuō)要進(jìn)行視頻聊天就有三條連接線路,分別是:
1、http://localhost:1974/VideoChat/Room1
2、http://localhost:1974/VideoChat/Room2
3、http://localhost:1974/VideoChat/Room3
除了聊天室和應(yīng)用的層次外,應(yīng)用程序里還有諸入視頻流、共享對(duì)象等。他們可以共同應(yīng)用,也可以為不同的房間分別建立不同的共享對(duì)象,如果你要想實(shí)現(xiàn)不同房間里的用戶(hù)可以相互聊天不想讓別的房間的人看到,OK,此時(shí)你就可以為該房間獨(dú)立創(chuàng)建一個(gè)共享對(duì)象來(lái)實(shí)現(xiàn)。
當(dāng)開(kāi)發(fā)程序需要去連接客戶(hù)端,處理服務(wù)端事件、調(diào)用客戶(hù)端方法等,就需要自定義一個(gè)應(yīng)用程序適配器(ApplicationAdapter),此適配器必須繼承并實(shí)現(xiàn) FluorineFx.Messaging.Adapter.ApplicationAdapter。 FluorineFx.Messaging.Adapter.ApplicationAdapter做為一個(gè)新的應(yīng)用程序的基類(lèi),提供了客戶(hù)端與應(yīng)用程序之間通信的接口方法、數(shù)據(jù)流以及共享對(duì)象等。它能夠時(shí)時(shí)處理應(yīng)用程序的啟動(dòng)、停止、客戶(hù)端的連接和斷開(kāi)。
在Flash或是Flex客戶(hù)端,我們可以通過(guò)NetConnectin.call()調(diào)用應(yīng)用程序適配器的方法。如下示例代碼塊:
服務(wù)器端應(yīng)用適配器所定義的代碼:
{
public string Echo(string msg)
{
return "Echo: " + msg;
}
}
Flash/Flex客戶(hù)端可以通過(guò)以下代碼塊調(diào)用服務(wù)器端的方法:
private function CallServerMethod():void
{
nc = new NetConnection();
nc.connect("rtmp://localhost:1974/application");
nc.onResult = function(obj)
{
trace("The result is " + obj);
}
nc.call("Echo", nc, "Hello");
}
本文就先介紹到這里,下篇將接著本篇介紹FluorineFx.NET中客戶(hù)端調(diào)用服務(wù)器端方法和服務(wù)器端呼叫客戶(hù)端的方法。
相關(guān)文章
Flex 處理服務(wù)器端傳來(lái)的數(shù)據(jù)
對(duì)于Java端返回的各種Java類(lèi)型的對(duì)象,F(xiàn)lex中能否有相應(yīng)的數(shù)據(jù)類(lèi)型來(lái)映射。這是Flex與服務(wù)器通信使用remoteObject的關(guān)鍵。2009-08-08
讓Flex Builder 3.0與Eclipse3.4整合起來(lái)
Flex Builder 3.0 For Eclipse 3.3 安裝方法2009-02-02
Flex結(jié)合JavaScript讀取本地路徑的方法
鑒于adobe并沒(méi)有提供FileReference對(duì)瀏覽的文件的完整路徑的接口。只能采用JS和fileinput控件來(lái)獲取本地路徑了。2009-02-02
Flex 動(dòng)態(tài)綁定BindingUtils.bindProperty
Flex 動(dòng)態(tài)綁定BindingUtils.bindProperty實(shí)現(xiàn)代碼。2009-06-06
Flex 編程注意之性能優(yōu)化、垃圾回收的一些總結(jié)
自從開(kāi)始做Flex、ActionScript 3.0的項(xiàng)目,我就一直與垃圾回收、性能優(yōu)化這些問(wèn)題打交道,因此也總結(jié)了一些優(yōu)化的方案,同時(shí)在一些QQ群中也得到了一些“高人”的指點(diǎn),因此將此內(nèi)容記錄一下。2009-07-07

