спасибо за ссылку, хотя вообще-то парень рассказывает про класс P2PGame, исходников которого нет, а есть только swc и ломай голову как оттуда достать код, а хотя именно в этом классе как раз то, что мне нужно. тем не менее пошатался и нашел у него же небольшой туториал
http://www.flashrealtime.com/basics-of-p2p-in-flash/. все понятно и даже у меня самого получилось.
в итоге начал переделывать то, что у него под себя и сразу же возникло несколько вопроса (огромная просьба не игнорировать их и помочь разобраться, как никак тема интересная, а нормальной доходчивой информации нетак уж и много):
вот то что я сделал из того что было в туториале:

Код AS3:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" width="0" height="0" creationComplete="js()" layout="absolute">
<mx:Script>
<![CDATA[
import flash.external.*;
private const SERVER_ADDRESS:String = "rtmfp://p2p.rtmfp.net/850ecff774ce98e0c0c765f3-29ce3314ba14/";
private var nc:NetConnection;
private var myPeerID:String;
private var farPeerID:String;
private var sendStream:NetStream;
private var recvStream:NetStream;
private function initConnection():void{
nc = new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS,ncStatus);
nc.connect(SERVER_ADDRESS);
}
private function ncStatus(event:NetStatusEvent):void{
myPeerID = nc.nearID; //getting current user id
var res:String = ExternalInterface.call("ncStatus",myPeerID);
}
private function setFarPeerID(jsFarPeerID:String):void{
farPeerID = jsFarPeerID; //setting remote user id
}
private function initSendStream(jsFarPeerID:String):void{
setFarPeerID(jsFarPeerID);
sendStream = new NetStream(nc,NetStream.DIRECT_CONNECTIONS);
sendStream.publish("media");
var sendStreamClient:Object = new Object();
sendStreamClient.onPeerConnect = function(callerns:NetStream):Boolean{
farPeerID = callerns.farID;
return true;
}
sendStream.client = sendStreamClient;
}
private function initReceiveStream(jsFarPeerID:String):void{
setFarPeerID(jsFarPeerID);
recvStream = new NetStream(nc,farPeerID);
recvStream.play("media");
recvStream.client = this;
}
public function receiveSomeData(str:String):void{
var res:String = ExternalInterface.call("receiveSomeData",str);
}
private function sendSomeData(str:String):void{
sendStream.send("receiveSomeData",str);
}
public function jsInitConnection():void{
ExternalInterface.addCallback("initConnection",initConnection);
}
public function jsInitSendStream():void{
ExternalInterface.addCallback("initSendStream",initSendStream);
}
public function jsInitReceiveStream():void{
ExternalInterface.addCallback("initReceiveStream",initReceiveStream);
}
public function jsSetFarPeerID():void{
ExternalInterface.addCallback("setFarPeerID",setFarPeerID);
}
public function jsSendSomeData():void{
ExternalInterface.addCallback("sendSomeData",sendSomeData);
}
public function js():void{
jsInitConnection();
jsInitSendStream();
jsInitReceiveStream();
jsSetFarPeerID();
jsSendSomeData();
}
]]>
</mx:Script>
</mx:Application>
и собственно вопросы:
первый вопрос: в туториале был показан пример в котором клиент может получить информацию только от одного клиента и точно также может передать информацию только одному клиенту. естественно так как обо всем выше перечисленном я узнал только на днях в моей версии так же клиент может получить информацию только от одного клиента и обратно. в ссылке предыдущего поста как раз речь идет о том чтобы получать инфо не от одного, а от нескольких пользователей, но так как код нужного класса не посмотреть прошу помощи у вас - как в этих двух функциях заменить farPeerID на койлибо мультиID или массив или вообщем не знаю что еще можно придумать:

Код AS3:
private var farPeerID:String;
private function initSendStream(jsFarPeerID:String):void{
setFarPeerID(jsFarPeerID);
sendStream = new NetStream(nc,NetStream.DIRECT_CONNECTIONS);
sendStream.publish("media");
var sendStreamClient:Object = new Object();
sendStreamClient.onPeerConnect = function(callerns:NetStream):Boolean{
farPeerID = callerns.farID;
return true;
}
sendStream.client = sendStreamClient;
}
private function initReceiveStream(jsFarPeerID:String):void{
setFarPeerID(jsFarPeerID);
recvStream = new NetStream(nc,farPeerID);
recvStream.play("media");
recvStream.client = this;
}
private function setFarPeerID(jsFarPeerID:String):void{
farPeerID = jsFarPeerID; //setting remote user id
}
второй (возможно слегка не по теме и многие начнут смеяться): я использую swfObject для вставки swf и здесь мне нужно вызывать функции внутри моего swf-приложения из яваскрипта. раньше никогда этого не делал. загуглил. попал на эту статью
http://livedocs.adobe.com/flex/3/htm...guments_5.html. тут говорится, что id у object и name в embed должны быть одинаковыми. использую mozilla и swfObject() создает просто тег object, без embed внутри него, а тем более без атрибута name внутри. скажите, как установить настройки swfObject() так что бы вставлялся тег object вместе с embed и атрибутом name в embed.
пока ищу решение проблемы попробовал просто написать:

Код:
<object id="p2p" type="application/x-shockwave-flash" data="myfile.swf">
<embed name='p2p' src='p2p2.swf' />
</object>
и в яваскрипте:

Код:
$(document).ready(function(){
p2p.initConnection()
})
в фаербаге написало:
"
Элемент доступен по идентификатору/имени в глобальной области видимости. Используйте вместо этого соответствующий стандарту W3C метод document.getElementById()."
попробовал:

Код:
$(document).ready(function(){
var p2p=document.getElementById('p2p');
p2p.initConnection()
})
в фаербаге написало:
"
p2p.initConnection is not a function"
и еще много чего пробовал но так ничего и не вызвалось...
что не так?
третий вопрос: в своей переделке я использую import flash.external.ExternalInterface; и похоже из-за этого приложение раздуло с 50кб аж до 278кб или не из-за этого? что так сильно может придавать вес приложению?
четвертый вопрос: в функции initConnection() каждое приложение получает свой уникальный id. как долго этот id действителен?
пятый вопрос: сегодня где-то наткнутся на информацию, что данные передаются по протоколу udp или по какому-то производному от него протоколу, который блокируются многими фаерволами. как часто такое случается и что делать в таких случаях? можно ли каким-то образом это обойти? все что предполагается передавать между клиентами это небольшие json-массивы весом не более 1кб.
заранее спасибо за ответы!