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

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

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

Регистрация: Nov 2010
Сообщений: 91
Cool Real-Time Media Flow Protocol и реализация пиринговой сети

доброе время суток.

прочитал статью http://habrahabr.ru/post/130526/. Я в экшнскрипте новичок, поэтому все что понял от туда это то, что реализуется передача видео не через сервер, а напрямую между пользователями.

скажите и желательно дайте ссылки почитать - можно ли использовать данный метод в качестве браузерного приложения для передачи простых json-массивов или простейших текстовых сообщений напрямую между пользователями?

заранее спасибо!


Последний раз редактировалось syegorius; 17.04.2012 в 03:54.
Старый 17.04.2012, 10:10
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 2  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
Цитата:
скажите и желательно дайте ссылки почитать - можно ли использовать данный метод в качестве браузерного приложения для передачи простых json-массивов или простейших текстовых сообщений напрямую между пользователями?
Да.
Можно использовать данный метод для создания realtime игры

Старый 17.04.2012, 16:45
syegorius вне форума Посмотреть профиль Отправить личное сообщение для syegorius Найти все сообщения от syegorius
  № 3  
Ответить с цитированием
syegorius

Регистрация: Nov 2010
Сообщений: 91
а можно по подробней?

Старый 17.04.2012, 17:38
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 4  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
http://www.flashrealtime.com/p2p-game-lib/

Старый 18.04.2012, 04:52
syegorius вне форума Посмотреть профиль Отправить личное сообщение для syegorius Найти все сообщения от syegorius
  № 5  
Ответить с цитированием
syegorius

Регистрация: Nov 2010
Сообщений: 91
спасибо за ссылку, хотя вообще-то парень рассказывает про класс 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кб.

заранее спасибо за ответы!


Последний раз редактировалось syegorius; 18.04.2012 в 05:21.
Старый 18.04.2012, 11:18
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 6  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
Ой, я в этом не разбираюсь
Попробуй сделать поменять это:
Код AS3:
private function initConnection():void{
На это:
Код AS3:
public function initConnection():void{
И спрячь свой код девелопера!

Старый 18.04.2012, 14:06
syegorius вне форума Посмотреть профиль Отправить личное сообщение для syegorius Найти все сообщения от syegorius
  № 7  
Ответить с цитированием
syegorius

Регистрация: Nov 2010
Сообщений: 91
по поводу второго вопроса - только что наконец-то получилось запустить функцию, правда довольно страннім способом:

Код:
$(document).ready(function(){
	swfobject.embedSWF('/P2P2.swf',"p2p","0","0","10.3.0","/fl/expressInstall.swf")
	setTimeout(function(){p2p.initConnection()},5000)
})
т.е. как вы видите все начинает работать только через какое-то время... никто не в курсе почему?

Создать новую тему Ответ Часовой пояс GMT +4, время: 00:36.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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