隨筆 - 8  文章 - 55  trackbacks - 0
          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          朋友的Blog

          最新評論

          閱讀排行榜

          評論排行榜

          FCS組件篇:RoomList組件

          2004年11月21日00:01星期日 [ FMS ]


          好像還挺多人喜歡使用roomlist組件,我倒是沒有怎么使用這個組件,所以原本對這個組件的作用也有點模糊,總覺得這個組件的作用不大(因為完全可以通過動態改變simpleconnect的參數來實現登錄不同的房間),不過看了下這個組件還是其它復雜的使用,寫這篇文章的同時我也學習一下。
          RoomList的組件的作用是讓用戶可以創建、進入和刪除房間(確切的說是一個應用程序實例)。該組件類似于一個應用程序管理處,可以控制用戶訪問不同的應用程序。
          RoomList組件有兩種使用方式:
          1. 通過虛擬大廳登錄不同的應用程序實例;
          2. 使用大廳應用程序作為入口,登錄另外的房間應用程序
          第一種方法是比較簡單的,不過其實道理都相同。下面以第二種方式為例說明。
          要使用RoomList組件,你必須要創建兩個應用程序:大廳和房間。打個比方的話,大廳應用程序可以認為是起始入口,而房間才是用戶的目的地。其實roomlist組件可以登錄任何fcs應用程序,你也可以打開同一個應用程序的不同實例,只要這些實例具有唯一的會話ID。
          如果你使用simpleconnect組件的話,并不需要在客戶端添加代碼就可以使用roomlist組件。服務器端的大廳應用程序目錄的main.asc文件中需要加載component.asc文件。
          在房間應用程序的服務器腳本中,也需要加載component.asc文件,并取得用戶和房間的名稱,以及管理房間和用戶統計等。中間包含了在服務器端的來回帶參數調用,但是并不控制用戶是否以及連接到該應用程序。如果需要單獨使用roomlist組件的話,在房間應用程序中,你必須傳遞用戶名和應用程序實例名。你使用了simpleconnect組件的話,這些都是自動完成的。
          下面我們來分析一個簡單的例子。
          首先創建大廳應用程序,步驟如下:
          1. 在服務器端創建lobby_com_test目錄,并創建main.asc文件,添加下面代碼
          ?load('components.asc');
          2. 創建客戶端文件,名為lobby_com_test. 添加SimpleConnect組件,應用程序路徑為rtmp:/lobby_com_test
          3. 添加roomlist組件,實例名為roomList_mc
          4. 在simpleconnect組件列表中添加roomList_mc實例
          5. 設定roomlist組件的目標room應用程序位置,如../chat_room_test/chat_room_test.html(這個路徑是調用網站的html文件,根據你的實際位置調整)
          6. 創建一個房間應用程序(或者使用之前開發的任何聊天室應用程序),名稱為chat_room_test
          7. 在chat_room_test.fla中添加simpleconnect組件,實例名為connector_mc,應用程序路徑為 rtmp:/chat_room_test,
          8. 發布應用程序的時候,會生成一個chat_room_test.html文件
          9. 更改HTML參數設定,把文件body標識內容替換為:

          10. 在服務器端的chat_room_test目錄下面創建main.asc文件,其中添加代碼如下:
          01 : // 加載組件包含文件
          02 : load( 'components.asc' );
          03 :
          04 : //在應用程序連接事件中增加用戶ID到全局變量,允許客戶端連接,調用方法獲取房間實例名稱等
          05 : application.onConnect = function( newClient, username, password ) {
          06 : // Save the user name
          07 : gFrameworkFC.getClientGlobals(newClient).username = username;
          08 : // Accept the new user’s connection
          09 : application.acceptConnection(newClient);
          10 : // Get the instance name and update the room count
          11 : if (this.name.indexOf('/'
          ) != -1) {
          12 : newClient.room = this.name.substr(this.name.lastIndexOf('/')+1);
          13 : roomConnect(newClient);
          14 : }
          15 : }
          16 :
          17 : //定義連接到房間的返回值處理
          18 : function roomResult(newClient) {
          19 : this.onResult = function(roomName) {
          20 : newClient.call( 'FCSimpleConnect/connector_mc/roomName' ,null,roomName);
          21 : }
          22 : }
          23 :
          24 : //房間連接時候傳遞用戶選擇的房間名稱,調用roomResult得到返回值
          25 : function roomConnect (newClient, room) {
          26 : // Create a new NetConnection
          27 : lobby_nc = new NetConnection();
          28 : lobby_nc.onStatus = function (infoStatus) {
          29 : if (infoStatus.code == 'NetConnection.Connect.Success' ) {
          30 : lobby_nc.call( 'FCRoomList/roomlist_mc/roomConnect', new roomResult(newClient), newClient.room);
          31 : }
          32 : };
          33 : // Connect to the lobby application
          34 : lobby_nc.connect( 'rtmp://localhost/lobby_com_test' );
          35 : }
          36 :
          37 : // 斷開連接的事件響應
          38 : // 客戶端斷開連接,通知大廳應用程序
          39 : application.onDisconnect = function( client ) {
          40 : if (client.room != null) {
          41 : roomDisconnect(client.room);
          42 : }
          43 : }
          44 : //調整房間數據,移除用戶顯示
          45 : function roomDisconnect (room) {
          46 : // Create a new NetConnection
          47 : lobby_nc = new NetConnection();
          48 : lobby_nc.onStatus = function (infoStatus) {
          49 : if (infoStatus.code == 'NetConnection.Connect.Success' ) {
          50 : lobby_nc.call( 'FCRoomList/roomlist_mc/roomDisconnect' , null, room);
          51 : }
          52 : }
          53 : // Connect to the lobby application
          54 : lobby_nc.connect( 'rtmp://localhost/lobby_com_test' );
          55 : }
          保存main.asc文件,重啟應用程序,按照下面步驟測試roomlist組件。
          1. 打開包含lobby_com_test.swf文件的lobby_com_test.html,并登錄服務器
          2. 增加房間到房間列表
          3. 選擇房間,進入
          4. 一個新的 chat_room_test應用程序實例窗口會打開
          5. 用同樣的方式打開另一個房間實例
          posted on 2006-06-08 13:59 blog搬家了--[www.ialway.com/blog] 閱讀(521) 評論(0)  編輯  收藏 所屬分類: FMS
          主站蜘蛛池模板: 资中县| 泽州县| 铅山县| 绥棱县| 重庆市| 霍林郭勒市| 会同县| 云安县| 德格县| 南部县| 寿光市| 绥宁县| 霍邱县| 昌图县| 收藏| 弥勒县| 双桥区| 沂水县| 铜陵市| 工布江达县| 文昌市| 拜泉县| 麻江县| 长泰县| 沁阳市| 海淀区| 松原市| 濮阳县| 襄樊市| 靖西县| 体育| 壶关县| 故城县| 海伦市| 襄垣县| 军事| 大新县| 荥阳市| 股票| 太康县| 周宁县|