Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Помогите разобраться в коде. Аудиочат (http://www.flasher.ru/forum/showthread.php?t=204663)

raykom2010 08.11.2013 11:16

Помогите разобраться в коде. Аудиочат
 
Всем здравствуйте.
Помогите додумать код.

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

Должна позволять общение (пока 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>

Буду очень признателен за помощь.

caseyryan 08.11.2013 11:44

Цитата:

соединение с серверами видимо происходит, так как ошибки на появляются.
Если в браузере не установлен отладочный плеер, то ошибки не появятся, даже если они есть. Нужно для начала поставить отладочный плеер

raykom2010 08.11.2013 11:49

Цитата:

Сообщение от mooncar (Сообщение 1151641)
raykom2010, код в сообщении нужно оформить соответственными тегами. Отредактируйте пост.

Да, вижу. Только не соображу как ... АС3 вроде ставил - рожи не исчезают.
ПОдскажите, пожалуйста.

Добавлено через 1 минуту
Цитата:

Сообщение от raykom2010 (Сообщение 1151647)
Да, вижу. Только не соображу как ... АС3 вроде ставил - рожи не исчезают.
ПОдскажите, пожалуйста.

Сначала были ошибки, потом, когда компиляция прошла нормально, без ошибок, тогда и в броузере не стало. НУ так то да, наверное надо.

Добавлено через 10 минут
Поставил )))

Ошибки появились ))

Вот первая.

Код AS3:

ArgumentError: Error #2126: NetConnection object must be connected.
        at flash.net::NetConnection/get nearID()
        at audiochat/initAll()
        at audiochat/hslider1_changeHandler()
        at audiochat/__onoff_change()
        at flash.events::EventDispatcher/dispatchEventFunction()
        at flash.events::EventDispatcher/dispatchEvent()
        at mx.core::UIComponent/dispatchEvent()
        at spark.components.supportClasses::SliderBase/animationEndHandler()
        at AnimationTarget/animationEnd()
        at spark.effects.animation::Animation/sendAnimationEvent()
        at spark.effects.animation::Animation/end()
        at spark.effects.animation::Animation/doInterval()
        at spark.effects.animation::Animation$/timerHandler()
        at flash.utils::Timer/_timerDispatch()
        at flash.utils::Timer/tick()

Помоему библиотек каких то не хватает. НАмекните, что надо делать то ?

Добавлено через 19 минут

Вот тут УРЛ в ДЕкларации объявленный надо записать, а я не пойму какой. Наверно этот адрес не находится ... флешкой
Код AS3:

url="некоторый адрес с которого мы получаем данные о комнате, и кто в ней находится"

Добавлено через 30 часов 37 минут
После 2го дня чтения мантр приходит некое просветление.

Ошибка
Код AS3:

ArgumentError: Error #2126: NetConnection object must be connected

Очевидно говорит о том, что для объекта "NetConnection" или не открыто соединение или не
хватает параметров от объекта "Нетсервис"

отсюда ошибка в первом шаге, получения соединений с соседскими пирами
Код AS3:

at flash.net::NetConnection/get nearID()

а сведения о соседских пирах надо откудато взять.

Походу вот эта сторока у мнея лажовая
Объект
Код AS3:

<s:HTTPService id="peerService" url="некоторый адрес с которого мы получаем данные о комнате, и кто в ней находится" resultFormat="e4x" result="peerService_resultHandler(event)" showBusyCursor="true"/>

должен складыватьсведения о пирах в комнату "room", в файл mxl.

Вот кто то может подсказать синтаксис этой строки и файл создается методом или уже там должен быть ?
?

Бамагити ато голова дымится ...

raykom2010 11.11.2013 21:17

ТЕму можно закрыть. С подключением разобрался.

Проблема была не в синтаксисе строки, а в дислокации файла и определении путей к нему. Относительные, абсолютные и проч ...

Я поначалу в проекте Флекс вообще прикурил с путями ... Их там мульен. ОСобенно, когда паяешь на денвере, а заливать потом на хостинг.
Да. Теперь другие проблемы.


Часовой пояс GMT +4, время: 12:44.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.