問征夫以前路
          感謝所有關心過支持過我的人, 感謝所有恨過我嘲笑過我的人 !
          posts - 30,comments - 147,trackbacks - 0
            red5的共享對象,使服務器和客戶端的交互變的更簡單和直接,服務器把處理完的業務邏輯放在共享對象(SharedObject)中,客戶端只需要調用(SharedObject),就可以直接操作后臺所返回的數據。所有的red5應用程序都繼承自ApplicationAdapter類:
           1import java.util.HashMap;
           2import java.util.Map;
           3
           4import org.red5.server.adapter.ApplicationAdapter;
           5import org.red5.server.api.IClient;
           6import org.red5.server.api.IConnection;
           7import org.red5.server.api.IScope;
           8import org.red5.server.api.so.ISharedObject;
           9
          10
          11/**
          12 * red5后臺服務器與flash前臺交互類
          13 * @author zhanghh
          14 *
          15 */

          16public class Application extends ApplicationAdapter{
          17    
          18    private Map<String, IConnection> onLineClient = new HashMap<String, IConnection>();
          19    
          20    
          21    // 屬性
          22    private IScope appScope;
          23
          24    private String username;
          25
          26    private ISharedObject so;
          27    
          28    private String sharedName;
          29
          30    /**
          31     * 客戶端連接服務器的方法
          32     */

          33    public String createSharedObjectPond(Object[] params){
          34        //接收客戶端傳過來的參數值
          35        sharedName = (String) params[0];
          36        
          37        //創建共享對象
          38        createSharedObject(appScope,sharedName,true);
          39        so = getSharedObject(appScope, sharedName);
          40    
          41        //引用共享對象的監聽器
          42        so.addSharedObjectListener(new SampleSharedObjectListener());
          43
          44        
          45        //將此三個屬性值放入共享對象中
          46        so.beginUpdate();
          47        so.setAttribute("temperature"20);
          48          so.setAttribute("humidity"50);
          49          so.setAttribute("nutrition"85);
          50        so.endUpdate();
          51        
          52        return sharedName;
          53    }

          54    
          55    /**
          56     * 此應用于開始運行時觸發的方法
          57     */

          58    public boolean appStart(IScope app) {
          59        System.out.println("red5系統已啟動~!");
          60        if (!super.appStart(app)) {
          61            return false;
          62        }

          63        appScope = app;
          64        return true;
          65
          66    }

          67
          68    /**
          69     * 連接服務器
          70     */

          71    public boolean connect(IConnection conn, IScope scope, Object[] params) {
          72            username = "";
          73           // 登入時將連接ID和連接信息形成對應關系并存入在線列表
          74           String link_id = conn.getClient().getId();
          75           System.out.println("連接--->link_id:"+link_id);
          76           onLineClient.put(username, conn);
          77
          78           return true;
          79        
          80    }

          81    
          82    /**
          83     * 斷開服務器
          84     */

          85    public void disconnect(IConnection conn, IScope scope) {
          86        super.disconnect(conn, scope);
          87        System.out.println("歡迎下次光臨,再見!");
          88    }

          89    
          90}

          91

          為了得到客戶端共享對象的改變通報,監聽器必須繼承接口ISharedObjectListener:

           1import org.red5.server.api.so.ISharedObjectBase;
           2import org.red5.server.api.so.ISharedObjectListener;
           3
           4
           5/**
           6 * 共享對象的監聽實現類
           7 * @author zhanghh
           8 *
           9 */

          10public class SampleSharedObjectListener implements ISharedObjectListener{
          11
          12    /**
          13     * 監聽客戶端屬性的變化值
          14     */

          15    @Override
          16    public void onSharedObjectUpdate(ISharedObjectBase so, String key, Object value) {
          17        //共享對象so的屬性<key>
          18        //被修改成<value>
          19        //客戶端有任何的屬性值改變,都會調用onSharedObjectUpdate()方法
          20    }

          21    @Override
          22    public void onSharedObjectConnect(ISharedObjectBase so) {
          23        //red5每次連接的時候調用此方法
          24    }

          25    @Override
          26    public void onSharedObjectClear(ISharedObjectBase arg0) {
          27        // TODO Auto-generated method stub
          28    }

          29    @Override
          30    public void onSharedObjectDelete(ISharedObjectBase arg0, String arg1) {
          31        // TODO Auto-generated method stub
          32    }

          33    @Override
          34    public void onSharedObjectDisconnect(ISharedObjectBase arg0) {
          35        // TODO Auto-generated method stub
          36    }

          37    @Override
          38    public void onSharedObjectSend(ISharedObjectBase so, String method, List params) {
          39        // TODO Auto-generated method stub
          40    }

          41    @Override
          42    public void onSharedObjectUpdate(ISharedObjectBase arg0, IAttributeStore arg1) {
          43        // TODO Auto-generated method stub
          44    }

          45    @Override
          46    public void onSharedObjectUpdate(ISharedObjectBase arg0, Map<String, Object> arg1) {
          47        // TODO Auto-generated method stub
          48    }

          49}

          50

          共享對象在被服務器處理完業務邏輯之后,要把處理后的值廣播給客戶端,最好作為注冊句柄被通報。
          使用beginUpdate() 和 endUpdate()方法:

          1//將此三個屬性值放入共享對象中
          2        so.beginUpdate();
          3        so.setAttribute("temperature"20);
          4          so.setAttribute("humidity"50);
          5          so.setAttribute("nutrition"85);
          6        so.endUpdate();



          posted on 2009-05-26 18:09 kenzhang 閱讀(3906) 評論(3)  編輯  收藏

          FeedBack:
          # re: red5創建和使用共享對象SharedObject[未登錄]
          2009-05-28 20:26 | conjs
          我一直在研究 red5 , 有時間我們交流一下.  回復  更多評論
            
          # re: red5創建和使用共享對象SharedObject
          2009-05-31 22:23 | kenzhang
          @conjs
          好啊,red5我剛接觸不久,請多指教~!  回復  更多評論
            
          # re: red5創建和使用共享對象SharedObject
          2009-06-24 10:19 | kenzhang
          @conjs
          請問red5里面有沒有任務調度的方法?
          類似于quartz  回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 三明市| 奉化市| 太和县| 定安县| 鲁甸县| 南城县| 同德县| 柳林县| 武安市| 克东县| 自治县| 江城| 玉田县| 昌江| 陵川县| 土默特右旗| 轮台县| 巴楚县| 株洲县| 普宁市| 新邵县| 邵东县| 固安县| 特克斯县| 广元市| 烟台市| 镇江市| 炉霍县| 安平县| 香格里拉县| 马鞍山市| 鄂尔多斯市| 曲水县| 康保县| 缙云县| 雷州市| 东安县| 保山市| 个旧市| 淳化县| 沙雅县|