Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 08.11.2013, 11:16
raykom2010 вне форума Посмотреть профиль Отправить личное сообщение для raykom2010 Найти все сообщения от raykom2010
  № 1  
Ответить с цитированием
raykom2010

Регистрация: Nov 2013
Сообщений: 5
По умолчанию Помогите разобраться в коде. Аудиочат

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

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

Должна позволять общение (пока 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>
Буду очень признателен за помощь.


Последний раз редактировалось raykom2010; 08.11.2013 в 11:57.
Создать новую тему   Часовой пояс GMT +4, время: 21:44.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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