随笔 - 8  文章 - 55  trackbacks - 0
<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用链接

留言簿(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] 阅读(504) 评论(0)  编辑  收藏 所属分类: FMS

只有注册用户登录后才能发表评论。


网站导航: