私はアクションスクリプトが初めてです。今日、私はコードのこの部分と奇妙なことを書きましたが、動作します)))
<?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)" />
そして今私がやっていること:
最初の例はオペラで開きます。それは私にそのIDを与えます。次に、mozilla で 2 番目のものを開きます。最初の入力フィールドに、オペラの例のIDを入力しました。うまくつながります。これら2つの例の間でメッセージを送受信しようとすると、すべて正常に動作します(両方ともメッセージを送受信します)
ここで私の最初の問題は次のとおりです。
他のブラウザで 3 番目の例を開き、3 番目の例の ID を 2 番目の例 (mozilla にある) の入力フィールドに入力すると、opera で「NetStream.Connect.Closed」が表示されます。Mozilla の例からメッセージを送信しようとすると、このメッセージは Opera と 3 番目のブラウザの両方に表示されます。しかし、オペラからメッセージを送信しようとすると、どこにも行きません。Opera からのメッセージを mozilla に送信し、mozilla からのメッセージをすべての例に送信するにはどうすればよいですか?
2番目の問題は次のとおりです。
最初の例で成功したら、2 番目の例 (接続されているすべてのチャットの ID を含む必要があります) でメッセージの送信先を選択できるようにしたいと思います: 最初の例、または 3 番目の例、またはそれらの両方に? どうすればそれを達成できますか?
助けてくれてどうもありがとう!