Страница 1 из 3

p2p и с чем его едят

Добавлено: 29 сен 2010, 15:53
совесть
итак, начнем.

для начала получим ключ разработчика, чтобы использовать эту технологию. ее можно получить бесплатно по адресу
http://labs.adobe.com/technologies/stratus/

создадим AS файл с названием Stratus.

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

Код: Выделить всё

private const SERVER:String = 'rtmfp://stratus.rtmfp.net/';private const DEVKEY:String = 'ВАШ КЛЮЧ РАЗРАБОТЧИКА';
далее объявим переменные

Код: Выделить всё

                private var netConnection:NetConnection;        private var netGroup:NetGroup;        private var netStream:NetStream;        private var groupspec:GroupSpecifier;
итак, разберем переменные.

netConnection- переменная, отвечающая за подключение к p2p
NetStream- переменная, помогающая подключиться к юзеру/группе в п2п сети.
netGroup- переменная, отвечающая за подключение к группе.
groupspec- переменная, отвечающая за инфу для подключения к группе.

далее подключаемся к п2п сети.

Код: Выделить всё

                        netConnection = new NetConnection();            netConnection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);            netConnection.connect(SERVER + DEVKEY); 
в функции netStatusHandler будет получаться вся инфа о п2п сети, то есть, удалось ли подключиться, какое сообщение получаем и т.п.

далее создаем настройки для подключения к группе, и подключаемся к ней.

Код: Выделить всё

function setupGroup():void {                        groupspec = new GroupSpecifier("НАЗВАНИЕ КОМНАТЫ К КОТОРОЙ ХОТИМ ПОДКЛЮЧИТЬСЯ");            groupspec.serverChannelEnabled = true;            groupspec.multicastEnabled = true;            groupspec.postingEnabled = true;            groupspec.routingEnabled = true;            groupspec.peerToPeerDisabled = false;                                netStream = new NetStream(netConnection, groupspec.groupspecWithAuthorizations());            netStream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);        }
думаю в дополнительном объяснении это не нуждается, там всё понятно даже судя по названиям(у кого туго с английским, добро пожаловать в гугл).

а теперь самое интересное. обработка ответов, а именно функция netStatusHeandler.

Код: Выделить всё

function netStatusHandler(e:NetStatusEvent):void {                                    switch (e.info.code) {                case 'NetConnection.Connect.Success':                    setupGroup();                    break;                case 'NetStream.Connect.Success':                    // Create new NetGroup                    netGroup = new NetGroup(netConnection, groupspec.groupspecWithAuthorizations());                                        netGroup.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);                    break;                case 'NetGroup.Connect.Success':                                        break;                             case 'NetGroup.SendTo.Notify' :                              trace(e.info.message)//объект, который мы получили от члена группы.                              break;                default:                                }
e.info.code включает в себя результат ваших действий.
NetConnection.Connect.Success- если удалось подключиться к п2п сети.
NetStream.Connect.Success- если удалось подключиться к группе, то создаем переменную, отвечающую за всю инфу группы.
NetGroup.Connect.Success- если удалось подключиться к группе.

вот мы подключились. как отправлять данные? это делается просто. создаем функцию

Код: Выделить всё

public function sendData():void {                        var obj:Object = {text:"olol"};            netGroup.sendToAllNeighbors($obj);        }
отправка данных идет объектом. чтобы получить ответ от участника группы,
вот в принципе и всё. уже можно написать чат на p2p технологии.

Re: p2p и с чем его едят

Добавлено: 29 сен 2010, 16:15
bodnar
Неплохо было бы добавить краткую справку по peer-to-peer впринципе, чтоб без лишних вопросов

И я что то слегка не уловил, у нас подключение все равно идет через сервер адоба? :roll:

Re: p2p и с чем его едят

Добавлено: 29 сен 2010, 16:54
совесть
ну нужно же как-то объявлять юзеров.

остальная справка в хелпе. это основное. остальное в основном идет на получение данных.

могу урок для чата сделать

Re: p2p и с чем его едят

Добавлено: 29 сен 2010, 17:28
bodnar
Лучше исходник самый простой выложи :lol:

Re: p2p и с чем его едят

Добавлено: 29 сен 2010, 18:29
совесть
k3e.ru/olo.rar

держи. только там говнокод. но, думаю, разберешься.

Re: p2p и с чем его едят

Добавлено: 29 сен 2010, 19:10
bodnar
Сразу вопрос, есть там какой-нибудь онлайн сервис, чтобы увидеть что там происходит у меня? Кто что прислал, кто присоединился, кто в какой комнате сидит? Так сказать админка.

Re: p2p и с чем его едят

Добавлено: 29 сен 2010, 19:16
совесть
нету админки. комнаты создаются с клиента. кто сидит, смотри в NetGroup.

п2п сеть- эт клиент и сервер в 1. каждый человек является сервером и клиентом одновременно

Re: p2p и с чем его едят

Добавлено: 09 окт 2010, 04:42
bodnar
Пару вопросов.
Насколько понял отправить конкретному пользователю (или нескольким пользователям из группы) нельзя?
Какую информацию можно получить о конкретном пользователе? Только peerID? пользователь не может создать где нибудь дополнительных полей (ну не знаю, в netConnection например) что бы эти поля могли получать другие пользователи по мере нужды?

Re: p2p и с чем его едят

Добавлено: 09 окт 2010, 14:21
revizor
а вообще чего код ???
ТС хоть бы подписал для непонтливых ) комнаты ...статусы.... чат чтоли ?

Re: p2p и с чем его едят

Добавлено: 10 окт 2010, 21:20
совесть
не уверен насчет дополнительных полей.

отправлять можно отдельному человеку.

$connection.sendToNeighbor