转自:http://bbs.9ria.com/forum.php?mod=viewthread&tid=45077&highlight=NetGroup
这篇教程讲述的是 Flash Player 10.1中的P2P/RTMFP Groups 的基本用法,我们使用RTMFP来建立一个简单的多人聊天室。所有数据将使用P2P的方式进行传输。所以我们要使用最新的(2010-1-22) Adobe Stratus - rendezvous service。
注意点:
1 播放器版本:Flash Player 10.1
2 UDP网络通讯允许(注意你的防火墙)
3 工具:Flash Builder 4
4 Stratus 开发者密钥,可以去这里申请 https://www.adobe.com/cfusion/entitlement/index.cfm?e=stratus
5 playerglobal.swc for Flash Player 10.1
源文件: P2PChat.mxml.zip (1.16 KB, 下载次数: 339)
第一步:新建一个flex4工程
文件 -> 新建 -> Flex 项目
在项目属性中引入playerglobal.swc (FP10.1 API)
在flex编译器选项中设置flashplay版本为10.1.0
第二步:连接Stratus
首先,我们需要建立NetConnection去连接Adobe Stratus。非常简单
private const SERVER:String = "rtmfp://stratus.adobe.com";
private const DEVKEY:String = "YOUR-STRATUS-DEVELOPER-KEY";
private var nc:NetConnection;
private function connect():void{
nc = new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS,netStatus);
nc.connect(SERVER+DEVKEY);
}
复制代码第三步:建立NetGroup
我们需要建立P2P group进行连接。GroupSpecifier是一个用来定义group所有参数的类。首先,将它命名为“myGroup/g1”。然后设置serverChannel与Stratus进行沟通。最后发布。这样,我们就完成了P2P Group的定义。
然后,我们必须确定实际的NetGroup。groupspecWithAuthorizations()返回字符串 - 这是一个组标识符。
或许你会问,groupspecWithoutAuthorizations()和groupspecWithAuthorizations()之间有什么区别。如果你设置了密码,groupspecWithAuthorizations可以发送或组播,groupspecWithoutAuthorizations只能接收。
private function setupGroup():void{
var groupspec:GroupSpecifier = new GroupSpecifier("myGroup/g1");
groupspec.serverChannelEnabled = true;
groupspec.postingEnabled = true;
netGroup = new NetGroup(nc,groupspec.groupspecWithAuthorizations());
netGroup.addEventListener(NetStatusEvent.NET_STATUS,netStatus);
user = "user"+Math.round(Math.random()*10000);
}
复制代码第四步:处理NetStatusEvent
在这里我们将要处理三个事件。当我们连接Stratus的时候我们要设置一个组,当我们连接NetGroup的时候在界面上提示,还有当我们接收到一个消息的时候,在聊天窗上显示它。
private function netStatus(event:NetStatusEvent):void{
trace(event.info.code);
switch(event.info.code){
case "NetConnection.Connect.Success":
setupGroup();
break;
case "NetGroup.Connect.Success":
connected = true;
break;
case "NetGroup.Posting.Notify":
receiveMessage(event.info.message);
break;
}
}
复制代码第五步:发送和接收信息
我们需要自己定制一套消息协议,用来处理文本,用户名,发送人ID。发送人ID直接贴出来。我们也需要为组地址转换NetConnection PeerID。当我们给NetGroup发送消息的时候,我们只是分发/广播它,但不回发给我们自己。这就是为什么我们需要调用receiveMessage,以及在聊天窗上显示。
private function sendMessage():void{
var message:Object = new Object();
message.sender = netGroup.convertPeerIDToGroupAddress(nc.nearID);
message.user = txtUser.text;
message.text = txtMessage.text;
netGroup.post(message);
receiveMessage(message);
txtMessage.text = "";
}
private function receiveMessage(message:Object):void{
write(message.user+": "+message.text);
}
private function write(txt:String):void{
txtHistory.text += txt+"\n";
}
复制代码第六步:建立界面
<s:TextArea left="10" right="10" top="10" bottom="40" id="txtHistory"/>
<s:TextInput x="10" id="txtUser" text="{user}" bottom="10"/>
<s:TextInput left="145" right="88" id="txtMessage" bottom="10" enter="sendMessage()"/>
<s:Button label="Send" click="sendMessage()" enabled="{connected}" bottom="10" right="10"/>
复制代码第七步:运行
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。