【各种系列教程】fms p2p文字教程 第三节FMS广播

来源:互联网 发布:手机上看图软件 编辑:程序博客网 时间:2024/05/29 18:15



第三节FMS广播

回合说到,FMS已经可以传参进来进行通信,本节呢刚好相反,是FMS广播:效果呢就是群发给已连接进来的客户端通知消息,我们接着上次代码继续更改。

首先是服务端的:


Application.broadcastMsg()
可用性
      Flash Media Server 2
用法
      application.broadcastMsg(cmd [, p1, p2, ..., pN])
参数
      cmd 一个字符串;要广播的一条消息。
       pl 一个字符串;额外的信息。
返回
       无。
描述
       方法;把一条消息广播到所有连接的客户机。
       这个方法相当于循环遍历Application.clients数组并在每一个独立的客户机上调用Client.call(),但这个方
       法的效率更高(尤其是当连接的客户机数量很大时)。唯一的不同是当你调用broadcastMsg()时你不能指定
       一个响应对象,除此以外,两种语法是一样的。
下面我们来看下服务端的代码,我们修改了下我们接受客户端的事件                        
         /*
                        *
                        * 来接受客户机的连接
                        *
                        */
                        application.onConnect = function(client,str)
                        {
                                trace(str+"终于算是连接上了!");
                                //该方法是接受客户端的连接
                                application.acceptConnection(client);
                                //发送广播信息
                                application.broadcastMsg("broadcast",str);
                        }

好服务端代码就加了一个方法,这个方法第一个参数是字符串函数名,这样我们的对照着在客户端程序里写入该函数,第二个参数就是该函数里的参数,总意思就是说当客户端连接上以后就会给所有客户端发送条广播,很简单吧。现在呢我们开始写客户端。

我们开始先在主场景拉入一个可视化布局组件,如图3.1所示:

图3.1容器
1.我们在拉入一个输入框用来输入名字。
2.我们再把上节的“连接FMS”按钮放在输入框旁边。
3.我们在拉入一个列表用来显示用户群组。
4.我们在拉入一个输入框用来显示广播。

看下全部布局代码:
<s:BorderContainer width="600" height="400" borderWeight="10" dropShadowVisible="true"
                                           horizontalCenter="0" verticalCenter="0">
                <s:Button x="131" y="3" height="23" label="连接FMS" click="connect()"/>
                <s:TextInput id="input" x="3" y="3"/>
                <sist x="4" y="28" width="196" height="350" dataProvider="{arr}"></sist>
                <s:TextArea x="208" y="6" width="362" height="370" id="textArea"/>
</s:BorderContainer>

在看下设计面板整体效果如图3.2所示:

图3.2 布局效果图
我们首先先写个广播对应的函数,我们继续在上篇的代码中添加如下代码:

         [Bindable
                        private var arr:ArrayCollection = new ArrayCollection();

                        private function connect():void
                        {
                                if(input.text!="")
                                {
                                        //该事件表达连接其状态或错误条件时调度。netStatus 事件包含一个 info 属性,
                                        //该属性是一个包含事件特定信息(例如,连接尝试成功还是失败)的信息对象。
                                        netconnect.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler);
                                        //该函数是填写连接地址,或者参数,该函数运行后就会开始自动连接
                                        netconnect.connect("rtmp://localhost/test",input.text);

                                }
                        }
                        
                        public function broadcast(user:String):void
                        {
                                var arrs:Array = arr.source;
                                arrs.push(user);
                                arr.source = arrs;
                                textArea.text = "欢迎:"+user+",进来!";
                        }

我们可以看到我们在“连接FMS”单击按钮中 connect()函数有进行了更改判断如果用户名内容不为空就可以进行连接,当然我们在连接后面的参数也改成了我们输入框的内容,input.text,这样就可以动态改变,就比较灵活。

我们在广播的函数,在这里大家要注意这里函数名一定要跟我们在服务端定义的函数名要一致,再来就是一定要是公共权限才可以进行访问,这个函数传入的参数就是我们的通过输入框输入的用户名发送给服务器,服务器接收了该链接我们就把改用户名发送各个客户端,然后在添加用户列表,最后文本框在现实该用户进来,就是这个意思,下面我们运行下看下效果如图3.3所示:

3.3 运行效果
我们可以看到报错了,因为在客户端没有找到我们该对应的函数,可是我们函数也明明已经申请了,问题是处在哪里呢,那是因为我们连接对象的客户端还没进行赋值,我们在上一节代码上基础在修改下连接状态函数,代码如下:

          private function netStatusHandler(e:NetStatusEvent):void
                        {
                                //我们弹出连接FMS时的状态信息
                                //Alert.show(e.info.code);
                                switch(e.info.code)
                                {
                                        case "NetConnection.Connect.Success":
                                        {
                                                netconnect.client = this;
                                                
                                                break;
                                        }
                                }
                         }
弹出框一般用来提示用,在这里我们注释掉了,我们首先的判断客户端连接成功后,我们在把客户端赋值为当前,为什么赋值当前,因为当前状态是连接上了。好下面我们在运行下测试下。如图3.4所示:

图3.4 效果
我们打开了了一个窗口,输入了名字单击连接后我们可以看到已经运行了我们函数写的代码,下面我们在打开一个窗口,看看是不是能显示两个用户,如图3.5所示:


图3.5效果2
我们可以看到第一个框口用户列表会显示两个用户,第二个窗口用户列表只会显示一个用户,这说明什么呢,广播呢就是你在的时候才能给所有用户进行发送广播,你不在的话,就会错过该机会,所以呢广播不适合做该功能,因为用户列表一定要获取到所有人在线,而不是只能收到你来了以后的所有人信息,前面的是注定要错过,下节呢我们讲实现该方法,本节就到这里。

最后在宣传下《As-Flex and Flash从入门到精通》初级教程如果大家喜欢

http://product.china-pub.com/3502720

该地址进行浏览下

0 0