Всем здравствуйте.
Помогите додумать код.
Должен получиться аудиочат. Если калашников не получится ...
Суть задачи - на сайте форма. Пока можно одно состояние. на ней рубильник - Вкл/выкл, поля идентификации (имя, что там еще), комната (поле список пиров, так я понимаю) и все, наверное.
Должна позволять общение (пока 2 пользователям. Пока даже интересует общение только админа с гостем) .
Проект в Флешбилдере 4, тип -флекс.
ПС. Сам я не местный (С) Флеш и все, что с ним связано вижу 1й раз. Но на безнадежен. Читаю, туман помаленьку рассеивается.
Сейчас - проект нормально компилируется, выгружается на хостинг, на хостинге показывается форма на сайте, выключатель включается, соединение с серверами видимо происходит, так как ошибки на появляются.
ДАльше - фантазия иссякла. Помогите, кто чем может. Советами в смысле ))
Вот код

Код AS3:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
width="262" height="186" minWidth="120" minHeight="100" maxWidth="215" maxHeight="138"
backgroundColor="#B6A6A6" pageTitle="Аудио чат" viewSourceURL="srcview/index.html">
<fx:Script>
<![CDATA[
//Здесь мы импортируем используемые библиотеки в нашем коде
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.events.FlexEvent;
import mx.rpc.events.ResultEvent;
//далее объявляем переменные и прочее
private const STRATUS_ADDR:String = "rtmfp://p2p.rtmfp.net/";
private const DEVELOPER_KEY:String = "тут ключ разработчика от адоб,так как сервера пиринговые его";
public var netConnection:NetConnection = new NetConnection();
public var sendStream:NetStream;
public var streamDict:Dictionary = new Dictionary();
public var myroom:String;
public var username:String;
public var idList :Array = new Array('000');
public var clearList:Array = new Array('000');
//далее пошли функции
//функция инициализации нового соединения
public function initAll():void{
//максимальное количество одновременно подключеных пользователей
netConnection.maxPeerConnections = 5;
netConnection.addEventListener(NetStatusEvent.NET_STATUS,netHandler);
netConnection.connect(STRATUS_ADDR+DEVELOPER_KEY);
//отправляем свой идентификатор в p2p сети,
//для того чтобы другие пользователи смогли к нам подклюбчиться
peerService.send({peer: netConnection.nearID});
//очищаем список с пользователями с которыми мы устанавливали соединения
//это нужно для переподключения к сети
idList = clearList;
}
//функция обработки ответа на установку соединения с сервером adobe для нашей идентевикации в p2p сети
private function netHandler(event: NetStatusEvent):void{
for (var key:* in event.info)
switch (event.info.code){
case "NetConnection.Connect.Success":
initSendStream();
break;
case "NetConnection.Connect.Failed":
Alert.show('Не получается подключиться в Adobe.Stratus.\n' +
'Скорее всего проблема связана с настройками файервола',
'Проблема с подключением');
break;
case "NetStream.Connect.Closed":
if (streamDict[event.info.stream] != undefined)
delete streamDict[event.info.stream];
break;
}
}
//если все ок в подключении, продолжаем отсюда
//здесь мы инициализируем микрофон и начинаем свою трансляцию в сеть
public function initSendStream():void{
sendStream = new NetStream(netConnection, NetStream.DIRECT_CONNECTIONS);
sendStream.attachAudio(Microphone.getMicrophone());
sendStream.publish('media');
var client: Object = new Object();
client.onPeerConnect =
function(callerNS:NetStream):Boolean {
callerNS.send('hello', netConnection.nearID ,username);
var cl2:Object = new Object();
cl2.imnew =
function(senderID: String):void{
connectTo(senderID);
};
callerNS.client = cl2;
return true;
};
sendStream.client = client;
}
//эта функция подключает нас к потоку нашего собеседника
public function connectTo(peerID:String):Boolean{
//Здесь пришлось написать функцию для того чтобы запоминать всех с кем мы уже устанавливали соединение
//иначе мы будем снова и снова подключаться к одним и темже
for (var i:String in idList ){
if ((idList[i]) == peerID)
{
return false;
}
};
initRecieveStream(peerID);
idList.push(peerID);
return true;
}
//здесь мы начинаем у себя воспроизводить поток нашего собеседника
public function initRecieveStream(peerID:String):void{
var rec:NetStream = new NetStream(netConnection, peerID);
rec.addEventListener(NetStatusEvent.NET_STATUS, function(event:NetStatusEvent):void{});
rec.play('media');
}
//эта функция отвечает за результат выполненного запроса на наш сервер
//здесь мы узнаем в какой комнате мы находимся и кто со мной рядом
//также здесь я получаю свое имя в сети
protected function peerService_resultHandler(event:ResultEvent):void
{
myroom = event.result.room;
username = event.result.username;
for each(var peer:XML in event.result.peer){
connectTo(peer.text());
}
}
//функция действия по передвижению ползуна на рабочей области (вкл/выкл)
protected function hslider1_changeHandler(event:Event):void
{
if(onoff.value == 0)
{
//здесь мы закрываем соединение
netConnection.close();
sendStream.close();
}else{
//а здесь наоборот начинаем коннектится)))
initAll();
}
}
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here flash-p2p.appspot.com-->
<s:HTTPService id="peerService" url="некоторый адрес с которого мы получаем данные о комнате, и кто в ней находится" resultFormat="e4x" result="peerService_resultHandler(event)" showBusyCursor="true"/>
</fx:Declarations>
<s:controlBarContent/>
<s:HSlider id="onoff" x="25" y="23" width="100" height="22"
change="hslider1_changeHandler(event)" liveDragging="true" maximum="1" minimum="0"
stepSize="1" value="0"/>
<s:Label x="25" y="10" fontFamily="Georgia" fontSize="12" fontStyle="normal" fontWeight="normal"
lineThrough="false" text="Выкл" textDecoration="none"/>
<s:Label x="102" y="10" fontFamily="Georgia" text="Вкл"/>
</s:Application>
Буду очень признателен за помощь.