Actionscript p2p -聊天如何创建多个连接和发送消息到所有/任何他们
actionscript p2p - chat how to create multiple connections and send messages to all/any of them
我是新手。今天我写了这部分代码和奇怪的事情,但它的工作)))
<?xml version="1.0" encoding="utf-8"?>
private const SERVER_ADDRESS:String = "rtmfp://p2p.rtmfp.net/bla-bla/";
private var nc:NetConnection;
private var ss:NetStream;
private var rs:NetStream;
private var myPeerID:String;
private var recvStreams:Object = new Object();
private var sendStreams:Object = new Object();
private var soundNewMsg:Class;
private function initConnection():void{
nc = new NetConnection();
nc.maxPeerConnections = 1000;
nc.addEventListener(NetStatusEvent.NET_STATUS, ncStatus);
nc.connect(SERVER_ADDRESS);
}
public function ncStatus(event:NetStatusEvent):void{
if(event.info.code == "NetConnection.Connect.Success"){
myPeerID = nc.nearID;
initSendStream();
ExternalInterface.call("alert",nc.nearID);
}
else ExternalInterface.call("p2pError",event.info.code);
}
private function initSendStream():void{
ss = new NetStream(nc, NetStream.DIRECT_CONNECTIONS);
ss.publish('chat');
var client:Object = new Object();
client.onPeerConnect = function(subscriber:NetStream):Boolean{
if(!sendStreams[subscriber.farID]&&!recvStreams[subscriber.farID]){
initReceiveStream(subscriber.farID);
sendStreams[subscriber.farID] = true;
}
return true;
};
ss.client = client;
}
private function initReceiveStream(peerID:String):void{
rs = new NetStream(nc,peerID);
rs.play('chat');
var client:Object = new Object();
client.receiveSomeData = receiveSomeData;
rs.client = client;
recvStreams[peerID] = true;
}
private function sendSomeData(str:String):void{
if(str)ss.send('receiveSomeData', str);
}
private function receiveSomeData(str:String):void{
ExternalInterface.call("receiveSomeData", str);
}
public function init():void{
ExternalInterface.addCallback("initConnection",initConnection);
ExternalInterface.addCallback("sendSomeData",sendSomeData);
ExternalInterface.addCallback("initReceiveStream",initReceiveStream);
ExternalInterface.call("p2pStartInit");
}
]]>
</mx:Script>
js:
function getP2p(){
if(navigator.appName.indexOf("Microsoft")!=-1)return window.p2p;
else return document.p2p;
}
function p2pStartInit(){
try{getP2p().initConnection()}
catch(e){p2pError('flasherror')}
}
function initReceiveStream(p2pId){
try{getP2p().initReceiveStream(p2pId)}
catch(e){p2pError(e)}
}
function sendSomeData(str){
try{getP2p().sendSomeData(str)}
catch(e){p2pError('flasherror')}
}
function p2pError(err){
alert(err)
}
function receiveSomeData(str,id){
alert('Received:'+str+'/'+id)
}
html: 和
<input onblur="initReceiveStream(this.value)" value="initReceiveStream(p2pId)" />
<input onblur="sendSomeData(this.value)" value="sendSomeData(str)" />
和现在我在做什么:
我在opera中打开的第一个例子。它给出了它的id。然后在mozilla中打开第二个。在第一个输入字段中,我输入了一个歌剧示例的id。连接得很好。当我试图在这2个例子之间发送/接收消息后,所有工作都很好(它们都接收/发送消息)
我的第一个问题是:
当我在其他浏览器中打开第三个例子,并将第三个例子id放入第二个例子的输入字段(这是在mozilla中),然后在opera中我得到"NetStream.Connect.Closed"。如果我试图从mozilla发送一些消息,这个消息将同时出现在opera和第三个浏览器。但是,如果我试图从opera发送消息,它不会去任何地方。我该怎么做才能让opera发送给mozilla的消息和mozilla发送给所有示例的消息?
第二个问题是:
当我第一个成功时,我想要第二个例子(它应该包含所有连接聊天的id)可以选择它应该发送消息的位置:到第一个,或第三个或两个?我怎样才能做到呢?
非常感谢你的帮助!
其实我已经知道怎么做了。
<?xml version="1.0" encoding="utf-8"?>
import mx.collections.ArrayCollection;
private const SERVER_ADDRESS:String = "rtmfp://p2p.rtmfp.net/bla-bla/";
private var nc:NetConnection;
private var ss:NetStream;
private var rs:NetStream;
private var myPeerID:String;
private var recvStreams:Object = new Object();
private var sendStreams:Object = new Object();
private var soundNewMsg:Class;
private function initConnection():void{
nc = new NetConnection();
nc.maxPeerConnections = 1000;
nc.addEventListener(NetStatusEvent.NET_STATUS, ncStatus);
nc.connect(SERVER_ADDRESS);
}
public function ncStatus(event:NetStatusEvent):void{
ExternalInterface.call("p2pError",event.info.code);
if(event.info.code == "NetConnection.Connect.Success"){
myPeerID = nc.nearID;
initSendStream();
ExternalInterface.call("alert",nc.nearID);
}
}
private function initSendStream():void{
ss = new NetStream(nc, NetStream.DIRECT_CONNECTIONS);
ss.publish('chat');
var client:Object = new Object();
client.onPeerConnect = function(subscriber:NetStream):Boolean{
if(!sendStreams[subscriber.farID])sendStreams[subscriber.farID] = subscriber;
if(!recvStreams[subscriber.farID])initReceiveStream(subscriber.farID);
return true;
}
ss.client = client;
}
private function initReceiveStream(peerID:String):void{
if(peerID){
rs = new NetStream(nc,peerID);
rs.play('chat');
var client:Object = new Object();
client.receiveSomeData = receiveSomeData;
rs.client = client;
var peer:Object = new Object();
peer.stream = rs;
recvStreams[peerID] = peer;
}
}
private function sendSomeData(str:String,farIds:String):void{
if(str!=null&&str!=""){
str = str.replace(/(^['r'n't's]+)|(['r'n't's]$)/g,"");
farIds = farIds == null ? "" : farIds.replace(/[^a-z0-9;]/gi,"");
if(farIds!=""){
var farId:Array = farIds.split(";");
for(var i:int;i<farId.length;i++){
if(farId[i]&&sendStreams[farId[i]]){
sendStreams[farId[i]].send('receiveSomeData', str, myPeerID);
}
}
}
else{
for(var id:String in sendStreams){
sendStreams[id].send('receiveSomeData', str, myPeerID);
}
}
}
}
private function receiveSomeData(str:String, farId:String):void{
ExternalInterface.call("receiveSomeData", str, farId);
}
public function init():void{
ExternalInterface.addCallback("initConnection",initConnection);
ExternalInterface.addCallback("sendSomeData",sendSomeData);
ExternalInterface.addCallback("initReceiveStream",initReceiveStream);
ExternalInterface.call("p2pStartInit");
}
]]>
</mx:Script>
我希望谷歌没有骗我)
对于第一个问题:是的,您必须将订阅者的流对象保存在某个地方(从onPeerConnect处理程序中)。这将允许多个客户端连接到发布流,而不会丢弃旧的客户端。
相关文章:
- Ajax聊天消息重复而不仅仅是更新
- 如果localstorage为空,则显示欢迎消息
- 绑定时将Parsley minlength消息作为选项传递时,未对其进行自定义
- 离开页面时弹出消息
- 有没有一种方法可以在控制台关闭的情况下让console.log()在IE中记录消息
- 消息显示之外的淘汰验证
- 选项卡侦听器未被来自后台脚本的消息激活
- jQuery在输入下验证post错误消息
- Scipt未在选定选项卡中执行以发送和接收消息
- 检查xmlhttprequest问题的消息
- AngularJs对ng消息的自定义替换
- ng消息仅在触摸时显示错误,并在错误的初始显示上转换
- 当用户按下回车键时,自动在text区域/text中插入消息
- 如果消息框答案为YES,则用Javascript填写表单
- 在javaservlet doPost方法中启动线程时,无法返回异常消息
- 解析云代码错误:解析.错误{代码:141,消息:“未调用成功/错误”}
- Node.js上的WebSocket,并在所有连接的客户端之间共享消息
- 在AngularJs中隐藏默认错误消息
- 使用JavaScript安全地发布消息
- Actionscript p2p -聊天如何创建多个连接和发送消息到所有/任何他们