Помощь · Поиск · Пользователи · Календарь
Полная версия этой страницы: Флэш чат
Flash Zone Forum > Macromedia Flash > Общие вопросы
Antoxer_92
Ребят подскажите пожалуйста, что мне лучше использовать для создания полнофункционального чата(наличие различных комнат, отображение тех, кто в комнате)? На данный момент я я пытаюсь создать чат средствами Flash ->PHP->xml. Т.к. я думаю это наиболее разумно, поскольку PHP может обращатся к MySQL, кот. может хранить инфо "в сети ли пользователь или нет, ну и возможно понадобится что-нибудь ещё". Так вот я сталкнулся с такой проблемой:

Когда я отправляю сообщение из флэшки в PHP, то PHP его записывает в xml(это проверено - работает). А вот Flash почему-то не всегда (1 раз из 10) считывает этот xml файл. Flash я запускал из vkontakte.ru, php и xml лежит на локальном сервере у меня на компе.

Вот именно тот AS 3.0 код загружает этот xml файл по нажатию кнопки обновить (как разбирусь с моей проблемой, поставлю таймер для обновления):

update_btn.addEventListener(MouseEvent.MOUSE_UP, loadXml);

function loadXml(e:MouseEvent=null):void
{
var xmlRequest:URLRequest=new URLRequest("http://95.63.96.78/messages.xml");
var loader:URLLoader=new URLLoader();
loader.addEventListener(Event.COMPLETE, xmlLoaded);
loader.load(xmlRequest);
}

function xmlLoaded(e:Event):void
{
xmlCHT=XML(e.target.data);
xmlListCHT=xmlCHT.children();

updateText();
}

function updateText():void
{
messageViewCHT_txt.htmlText='';
var i:uint=0;

if(xmlListCHT.length()>maxMes)
i=xmlListCHT.length()-maxMes;

for(i;i<xmlListCHT.length();i++)
{
messageViewCHT_txt.htmlText+='<b>'+xmlListCHT[i].name+'</b> ('+xmlListCHT[i].date+'):';
messageViewCHT_txt.htmlText+=' '+xmlListCHT[i].text;
}

}
MustLive
Цитата
Какими средставами лучше всего создавать чат?(Flash,PHP,xml,FMS)?

Antoxer_92

Разные технологии можно для этого использовать. На стороне клиента речь идёт о флеше, а вот на стороне сервера возможны разные варианты. Но с точки зрения производительности лучше писать сокет сервер и работать с ним из флешки (через сокет соединения).

Ещё в 2001 году мой друг создал свой первый флеш чат. Так для серверной части был написан сокет сервер вначале на Perl, а потом новые версии на Delphi и C. Так что оптимальней реализовать чат не через веб сервер, а через отдельный сокет сервер.

Цитата
Flash я запускал из vkontakte.ru, php и xml лежит на локальном сервере у меня на компе.

Для тестирования размести все компоненты у себя на локальном сервере. И как локально у тебя всё заработает, только тогда уже размещай их на разных серверах.
Antoxer_92
MustLive

Спасибо за инфо, вбил в яндекс "чат средствами флэш и сокет сервера", и сразу куча ссылок!!! Просто я до этого не знал про чат средствами сокет сервера. Если идёт речь о производительности, то я думаю мне лучше тогда разобраться с сокетами, тем более, что с делфи я знаком smile.gif. Буду разбиратся. Если появятся вопросы, буду сюда писать smile.gif, как я понял тут отзывчивые и умные люди.
MustLive
Antoxer_92, всегда пожалуйста.

Касательно использования сокетов во флеше (в том числе для чатов) на форуме не раз писалось. Например, в этой теме и других темах (на которые ты можешь выйти по ссылкам из той темы и используя поиск по форму).
Antoxer_92
Как я понял можно написать такой сервер самому, а можно взять уже готовые из инета, и причём они поддерживают ещё и Video & Audio Streeming(для вебкам-чата) ну и много других возможностей.

В нете я нашёл:

1) FMS 4 - все версии которые платные и мне не по корману, есть правда бесплатная версия, но она обеспечивает только 10 одновременных подключений, так что так и так придётся потом лицензию приобретать.
2) ElectroServer5 - тоже не бесплатный продукт. Версия на неограниченное число одновременно подключённых клиентов стоит 4500$.
3) Wowza - есть тоже несколько версий, но интересующая нас всех "наверное" версия с неограниченным числом одновременно подключённых клиентов стоит 86000 руб.
4) SmartFoxServer - имеет 3 версии, но версия с неограниченным числом одновременно подключённых клиентов стоит 86000 руб.
5)Red5 1.0 RC1 server - абсолютно бесплатный сервер. В сравнении с другими серверами не знаю даже что лучше, кто то хвалит кто то наоборот, но как я вычитал у него есть своя БД, чего скажем нет у FMS, даже если я и смогу Создать на Red5 1.0 RC1 свой чат, то сравнить мне не счем, т.к. пока я несобираюсь отваливать такие деньги за анлимит версию других серверов.

Так вот у меня возникли трудности с установкой Red5 1.0RC1: вообще незнаю как его ставить. Вбил в яндекс, там несколько ссылок, но там одну ерись пишут, с их слов ничего не понятно, да и отзывы люди пишут, что у них ничё не получаеца.

Я только скачал с нета Red5 1.0RC1 и установил на комп. А вот чё дальше делать не знаю sad.gif.

Люди может кто-нибудь объяснить как его поставить (именно Red5 1.0 RC1) на Windows 7. Что бы разрабатываеть своё flash приложение для него.

Я хочу именно организовать транслюцию потока Video; Audio и отправку сообщений по следующей схеме:

Flash приложение кот. лежит на каком нить сайте (клиент) -> (сервер)Red5 1.0 RC1 server, кот лежит у меня на компе на localhost, "но это на время разработки, естественно потом придёца покупать серв" -> (клиенты-подписчики на мою транслюцию), запустившие экземпляры моего Flash приложения.

Так вот, кто может объяснить нубу, как установить red5 1.0 RC1 на Winwows 7 под мою, вышеприведённую, схему.?
MustLive
Цитата
Как я понял можно написать такой сервер самому, а можно взять уже готовые из инета, и причём они поддерживают ещё и Video & Audio Streeming(для вебкам-чата) ну и много других возможностей.

Antoxer_92

Если тебе нужен лишь текстовый чат, то относительно проще написать самому (если человек знаком с другими языками программирования, помимо ActionScript, и в состоянии написать подобную программу). А если же нужен стриминг, как для вебкам-чата, так и для других задач (стриминг видео, музыки и другого аудио контента), то тогда стоит брать себе соответствующий сокет-сервер.

Цитата
как установить red5 1.0 RC1

C Red не работал, поэтому не подскажу (вряд ли кто-либо из участников форума с ним работал). Поэтому или сам пытайся разобраться, или почитай официальную документацию, форум разработчиков и поищи информацию по установке в Сети. Или используй другой стриминг сервер.

Касательно, Flash Media Server, то на форуме мы писали о книге по FMS.
Antoxer_92
С Red5 разобрался!!! Научился отдавать аудио и видео поток на Red5 из флэшки и забирать его. Текстовый чат на Red 5 можно реализовать средствами SharedObjects. Но я всётаки понял что для моего приложения нужны всётаки сокетные соединения! Теперь пытаюсь освоить взаимодействие Delphi 7 socket-server => Flash socket-klient, но как всегда возникают некоторые трудности.

Короч, вот текст сокет-сервера на делфи:

procedure TForm1.Button1Click(Sender: TObject);
var s: string;
begin
s := InputBox('Start chat server','Enter port:','1992');
if s = '' then {Процедура запуска сервера}
Exit;
ListBox1.Items.Clear;
ServerSocket1.Port := StrToInt(s);
ServerSocket1.Open;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ListBox1.Items.Clear; {Процедура остановки сервера}

if ServerSocket1.Active then
ServerSocket1.Close;
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var s: string;
i: Integer;
begin {Процедура прослушки входящих сообщений}

Edit1.text := Socket.ReceiveText;
s := Socket.ReceiveText;
ListBox1.Items.Add(s);
for i := 0 to ListBox1.Items.Count-1 do
s := ListBox1.Items[i]+';';
for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do
ServerSocket1.Socket.Connections[i].SendText(s);
Exit;
end;
end;

procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
var i: Integer;
begin
ListBox1.Items.Clear; {Процедура события "Отключение клиента"}

for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do
ServerSocket1.Socket.Connections[i].SendText('#N');
end;

end.



На форме следующие компоненты:

Кнопка "Run server" - Button1
Кнопка "Stop server" - Button2
TSocketSever1
Список подключённых юзеров - ListBox1
Edit1(нужен просто для проверки) - выводит текст вход. сообщения.



Вот текст клиента на Flash-е:

import fl.events.*;
import flash.net.Socket;
import flash.events.MouseEvent;

//Security.loadPolicyFile("http:/95.83.66.78/crossdomain.xml");

var address:String = "127.0.0.1";
var port:int = 1992;

var socket = new Socket();

socket.connect(address, port);

socket.addEventListener(Event.CLOSE, closeHandler);
socket.addEventListener(Event.CONNECT, connectHandler);
socket.addEventListener(ProgressEvent.SOCKET_DATA, sendedHandler)
socket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);

btn_send.addEventListener(MouseEvent.CLICK, sendMsg);

function ioErrorHandler(event:IOErrorEvent):void
{
trace("ioErrorHandler: " + event);
}

function securityErrorHandler(event:SecurityErrorEvent):void
{
trace("securityErrorHandler: " + event);
}



function sendedHandler(e:ProgressEvent):void
{
txt_chat.text = String(e.currentTarget);
}

function sendMsg(e:MouseEvent):void
{

var Msg:String = txt_input.text;

try
{
socket.writeUTFBytes(Msg);
}
catch(e:IOError)
{
trace(e);
}



}

function connectHandler(e:Event):void
{
txt_chat.text = "Подключение успешно \n";
}

function closeHandler(e:Event):void
{
txt_chat.text = "Подключение закрыто \n";
}



Сначала запускаю сервер(Project1.exe), затем нажимаю на кнопку "Run server" - ввожу port "1992" - к примеру. Пока всё норм ошибок нет => Сервак стартовал.

Затем запускаю Flash-ку(Chat.swf) - и сразу в текстовом поле сообщение "Подключение успешно" => коннект успешен. Для проверки я ещё затем, ничего не закрывая, на сокет-сервере (в Project1.exe) - нажал на кнопку "Stop server" и в Flash-ке в текстовом поле сообщение "Подключение закрыто" => значит с коннектом проблем нет, флэшка действительно конектится к серверу. Но дальше возникли проблемы:

После запуска сервера и конекта флэшки к клиенту я попытался отправить сообщение из флэшки, но на сервере(Project1.exe) ни в окне Edit1 ни ListBox1 ничего не выводится, да и ошибок ни каких не выводится в Flash-е => сообщение было отправлено, но Delphi чет его не обработал!

Ребят помогите разобраться, в чём проблема? Мож с кодировкой чё? - но в любом случае ероглифы какие-нить должны были вылезти, но ничего не вылазиет.

Да ещё  затем провёл несколько проверок, и выяснилось что процедура в Delphi "TForm1.ServerSocket1ClientRead"  не срабатывает => событие OnClientRead не происходит. В чём дело не пойму sad.gif
chingachgoog
А если отправить с сервера сообщение во флеш? Флешка поймает?
Antoxer_92
А с сервера в клиент сообщение доходит, правда первое сообщение почему-то с "null", т.е. если я отправляю с сервера "паугуцп", то в клиент приходит "nullпаугуцп", но это только в первом сообщении, в последующих всё нормально!

Итак в Delpi 7 я использовал для отправки сообщения следующи кусок кода:

for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do
ServerSocket1.Socket.Connections[i].SendText(s);
Exit;

Для приёма в Flash-е следующий код, точнее функцию, срабатывающею при получении данных в сокете:

function sendedHandler(e:ProgressEvent):void
{
trace("socketDataHandler: " + e);
str += socket.readUTFBytes(socket.bytesAvailable) + "\n";
txt_chat.text = str;
}

Очевидно с коннектом всё ок, может кто нить знает в чём причина? почему в делфи не происходит событие onClientRead, при отправки сообщения из клиента на сервер?

Вероятно в коде Сервера чего-то не хвает или что-то не правильно! sad.gif

Посмотрите, пожалуйста, мож действительно не хватает чего-нибуть!

ДА и как сделать так чтобы этот null в первом сообщении не вылазил, да конечно можно вырезать от туда null редактированием сроки, но это не удобно!!!
Antoxer_92
Всё уже сам разобрался!!!, для тех кто сталкнётся с моей проблемой:

Оказывается после отправления данных в сокет из Флэшки в такой операионной системе как Windows нужно вызывать метод flush().
Об этом написано и в Help-е от Adobe-е!!! Нужно мне просто было внимательнее его читать.

ДА только вот "null" не знаю почему вылазиет!!! Если кто знает в чём причина, пожалуйста подскажите. Если кто не понял что за "null", то см. выше
MustLive
Цитата
Вероятно в коде Сервера чего-то не хвает или что-то не правильно!

Antoxer_92, без сомнения. Как ты уже и сам понял.

Цитата
Всё уже сам разобрался!!!

Молодец, что разобрался. И почитал наконец-то таки внимательно хелп (что и помогло решить эту проблему). Внимательное чтение хелпа - это первое, что должен делать каждый флешер, перед тем как задавать вопросы на форуме wink.gif. А то, что ты описал метод решения этой проблемы, то это безусловно пригодится другим людям.

Цитата
ДА только вот "null" не знаю почему вылазиет!!!

А что хелп по флешу и по делфи говорит по этому поводу? Внимательно эти хелпы изучи, возможно там есть ответ.
Antoxer_92
В ходе разработки назрел вопросик smile.gif!!! Появилась необходимость связываться с сайта из flash-приложения сокетными соединениями с сокет-сервером кот. у меня на компе запускается!!! Свой сервер не приобретал, по этому приходится тэстить на компе!!!
При запуске флэшки соединение с сокет-сервером не происходит, так вот, как мне можно подключиться к моему сокет-серверу? Homserv(это пакет програм: Appache, php my admin, php5, MySQL) здесь не покатит, так как это виртуальный веб-хост!!! Я слышал что-то про виртупльную машину: Virtualbox, Microsoft Virtual PC!!! Подскажите пожалуйста, что нужно для решения моей проблемы!!!
Antoxer_92
А может этого ничего и не надо?

Я запустил своё флэш приложение в "Вконтакте", а сокет сервер на компе:

секунды через 2 на сокет сервере вылазиет ошибка:

"Access violation at address 00467336 in module 'SocketServer.exe'. Read of address 00000000"

А затем вот такое окно с сообщением об ошибке:

"ServerSocketClientError 10053"

- Что это означает кто нибудь знает? подскажите плиз.

И ещё я почитал про файлы политик:

Оказывается для сокетных соединенений нужен свой файл политик, т.е. их должно быть 2 на сервере:

один (основной) для http запросов - crossdomain.xml

второй (для сокетов) который должен находиться на порту 843 или на порту по которому осуществляется подключение

В хэлпе от адоба было написано что после вызова метода Socket.connect(address,port) сначала флэшка отправляет строку  "<policy-file-request/>" сокет сервреу (это якобы запрос на файл политик). Сначала эта строка отправляется на порт 843 если там нет этого файла политик или он есть но там запрещён доступ домену или порту по которому осуществляется строковой запрос "<policy-file-request/>", то флэш отправляет строку "<policy-file-request/>" на порт к которому мы подключаемся "port", в свою очередь сокет сервер должен отправить файл политик и если в нем прописано что по этому адрессу "address" и порту "port" разрешён доступ то якобы всё ОК и сокетные подключения разрешены!!!

Но у меня в сокет сервер что то не приходит этот строковой запрос <policy-file-request/>" при подключении к нему из флэша!!!

Ребят если кто-то работает с сокетами подскажите пожалуйста как осуществить подключение к сокет серверу из другова домена(не на котором сам сокет сервер)!!!

А то чё-то никто и не отвечает, один я тут сам с собой пишусь sad.gif
MustLive
Цитата
А то чё-то никто и не отвечает, один я тут сам с собой пишусь

Antoxer_92, ты просто в этой теме наиболее активен smile.gif. К тому же, вероятно, мало кто из участников форума сталкивался с теми проблемами, которые возникли у тебя.

Цитата
Подскажите пожалуйста, что нужно для решения моей проблемы!!!

Вначале соединись в рамках одного сервера, например, у себя на localhost, с флешки на сайте с сокет-сервером на этом же компьютере. Чтобы упростить себе задачу. А когда научишься это делать, тогда и возмёшся за меж-доменное сокет соединение (и возню с меж-доменными политиками). Никакие виртуальные машины тебе здесь не нужны, только программа сокет-сервер, которую ты запустишь на своём виртуальном хостинге и которая будет висеть на порту и обрабатывать запросы от твоей флешки.

Цитата
Оказывается для сокетных соединенений нужен свой файл политик, т.е. их должно быть 2 на сервере:

Так и есть. С сокетами свои особенности (и с каждой версией флеш-плеера их всё больше), о которых детально ты можешь прочитать в документации Адоба. Как я уже тебе рекомендовал ранее, вначале сделай работу сокетов на одном домене, а потом берись за меж-доменное соединение.
chingachgoog
А я бы вообще, если речь именно о чате, а не о форуме или мессенджере, сделал бы чат на пир-ту-пир технологии, благо теперь это есть для флеша.
Antoxer_92
MustLive, на localhost у меня всё работает!!!

У меня флэшка и сокет-сервер лежит на виртуальном хосте.

Флэшку запускаю на Вконтакте.ру через IFrame контейнер, а сокет-сервре на компе. И в результате чего у меня валазила ошибка выше приведённая.

Флэшка даже вроде и не соединяется сокетными соединниями (при подключении видимо выдается ошибка выше приведённая), так вот только после подключения флэшка отправляет запрос ""<policy-file-request/" сначала  на порт 843 и затем на порт указанный в подключении и затем ждет ответа, в качестве которого является файл политик и только потом смотрит есть ли тот или иной домен и порт там!!! А ведь если подключение не произошло соответственно и строковой запрос не был отправлен на сокет-сервер!!!

Тут дело даже ещё не дошло до файла политик!!! Так вот мне и непонятно почему эта ошибка вылазиет!!!

А про файлы политик я уже всё прочитал что там было на хэлпе от адоба и всё делаю как там было написано!!! Но тут просто напросто подключение то не происходит!!!


chingachgoog, мое приложение именно требует сокет-сервер, т.к. там не только чат!!! Вот именно приватное(один на один) общение (в моём случае) можно реализовать на p2p, так как если на сокет сервере перебрать весь список подключенных клиентов что бы найти именно того кому отправть - это будет занимать много ресурсов(ведь очень много пользователей будет одновременно переписываться), можно и по другому сделать:  один клиент посылает на сокет-сервер сообщение и идентификатор пользователя(айди пользователя Вконтакте), которому он шлёт сообщение, сокет-сервер расссылает это сообщение всем клиентам, а дальше ограничение во флэшке(если полученный идентификатор совпадает с идентификатором пользователя то выводим сообщение), но опять же просто так тратятся ресурсы, ведь сокет сервер рассылает сообщение всем клиентам - делает пустую работу. Так сказать КПД в таком случае очень мал и равен  1/количество клиентов.

А p2p я ещё не разбирал как реализовать во флэшке!!! Я что-то где-то читал что на Адобе надо регится и сервак под приложение под p2p они дают, потом из флэшки надо сообщения слать туда и сервак этот будет оправлять сообщение сначала нескольким клиентам, потом эти клиенты будут тоже пересылать сообщения!!! Но в моем случае этого не надо, для приватного общения нужно сразу слать сообщение напрямую другому клиенту!!! Возможно ли это сделать, используя p2p???
MustLive
Цитата
Тут дело даже ещё не дошло до файла политик!!! Так вот мне и непонятно почему эта ошибка вылазиет!!!

Antoxer_92

У тебя на сервере порт открыт, где стоит сокет-сервер? Т.к. если фаервол блокирует этот порт, то с других серверов (включая ВКонтакте) к нему не смогут подключиться. Помимо файлов политик, ты ещё и сервер должен настроить (в частности открыть порт для сокет-сервера).
Antoxer_92
MustLive, маленько разобрался, строковой запрос приходит на сокет-сервер и в ответ я посылаю вот такую строку

s:='<?xml version=\"1.0\"?><cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"80,843,10014\" secure=\"true\" /></cross-domain-policy>обратный слэш0';

 обратный слэш0 - это нулевой байт который необходимо записать - так написано в хелпе от адоба!!!! Я написал "обратный слэш" буквами а не символом обратного слэша  т.к. что то форум не хочет его отображать вместе с нулём и пропадает и обратный слэш и ноль

s:= AnsiToUtf8(s);
ServerSocket1.Socket.Connections[i].SendText(s);


потом флэш разрывает соединение, как и должно быть и секунд через 5 - 10 во флэше вылазиет ошибка:

[SecurityErrorEvent type="securityError" bubbles=false cancelable=false eventPhase=2 text="Error #2048"]

А дальше ничего не происходит

Тут дело наверное в том что файл политик не правильно написан sad.gif

Что здесь не так : <?xml version=\"1.0\"?><cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"80,843,10014\" secure=\"true\" /></cross-domain-policy>' ????? Вроде всё так как и должно!!! Данный пример нашел на одном из форумов, только там сокет-сервер был на php и из него отправлялась вот эта строка в качестве файла политик, там они и наставили обратные слэши перед двойными кавычками, хотя в оригинальном файле политик их нет, но я пробывал и без этих обратных слэшев перед двойными кавычками, вот так:

s:='<?xml version="1.0"?><cross-domain-policy><allow-access-from domain="*" to-ports="80,843,10014" secure="true" /></cross-domain-policy>обратный слэш0'';
s:= AnsiToUtf8(s);
ServerSocket1.Socket.Connections[i].SendText(s);


Но всёравно ничего не происходит!!!


По идее если файл политик соответствует и в нем прописаны нужный домен и порт то флэш сам должен разрывать соединение и заново подрубать!!! Но только разрывает => файл политик не правильно написан!!!
chingachgoog
Цитата(Antoxer_92 @ 13.11.2011 - 23:35) *
для приватного общения нужно сразу слать сообщение напрямую другому клиенту!!! Возможно ли это сделать, используя p2p???


Вряд ли. Все равно нужен сервер-маршрутизатор - это как раз адобовский. Или надо знать напрямую айпишники других компов, но вроде так пока нельзя.
Мы тут давали ссылки на стратус - надо поискать, что говорят. У меня до него так руки и не дошли пока. Но выглядит много проще сокетов (в смысле не надо заниматься серверным скриптом)
Antoxer_92
Ребят, заметил такой факт, что если когда флэш присылает запрос (<policy-file-request/>) на сокет-сервер, то если на этот запрос послать любую стороку('ыьуцоуцшсшуцосауцщшсуцо') а не строку с файлом политик, то флэш тут же отключается, а если строку с файлом политик, то отрубается секунд через 5, а это значит что файл политик всётаки отправляется, но что то флэш его отвергает!!!

Да кстати ещё нужно поставить в настройках флэша во вкладке publish settings снизу в combobox-е значение "access Network Only", а не "accsess Local filse Only"(значение по умолчанию)!!!

Я уже как и не пробывал этот файл политик менять, никак не получается!!! Что здесь такое!!!?
chingachgoog
Цитата(chingachgoog @ 14.11.2011 - 20:16) *
не надо заниматься серверным скриптом


Поковырял тут этот Циррус и понял, что я ошибся - серверный скрипт нужен. Без него никак не узнать ID другого пира (а другой пир не узнает мой ID). Вот тут серверный скрипт и должен запоминать пары имя_пира - ID пира. Странно, что адоб не заложила такую возможность у себя на p2p.rtmfp.net
Правда есть альтернатива - https://github.com/OpenRTMFP/Cumulus но, наверное, это для гуру-фанов.
MustLive
Цитата
файл политик всётаки отправляется, но что то флэш его отвергает!!!

Antoxer_92, значит файл политик у тебя некорректный.

Цитата
Да кстати ещё нужно поставить в настройках флэша во вкладке publish settings снизу в combobox-е значение "access Network Only", а не "accsess Local filse Only"(значение по умолчанию)!!!

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

Цитата
Я уже как и не пробывал этот файл политик менять, никак не получается!!! Что здесь такое!!!?

Прочти документацию Адоба по созданию файла политик, а также о секюрити нововведениях в последний версиях флеша (о мета-политиках для сокетов) и достань себе примеры рабочих и корректных файлов политик. Он д.б. без обратных слэшев перед двойными кавычками, так как то был пример для PHP, а у тебя Delphi. Если ты никак не можешь на Delphi сделать рабочий сокет-сервер, сделай простой сокет-сервер на PHP, а как разберёшься с созданием корректных файлов политик, тогда уже сделаешь на Delphi.

Цитата
Правда есть альтернатива

Будет ли Стратус/Циррус использоваться или OpenRTMFP/Cumulus - это лишь в случае если он захочет реализовать через Адобовский p2p, а пока что Antoxer_92 настроен решить задачу своим собственным сокет-сервером.
VINTpro
Советую {AJAX} wink.gif
chingachgoog
Цитата(chingachgoog @ 29.11.2011 - 19:53) *
Странно, что адоб не заложила такую возможность у себя на p2p.rtmfp.net


Усё работает теперь без всяких серверов (ну конечно с сервером, но скрыто, видимо функционал именно на p2p.rtmfp.net)
Используем NetGroup и вспомогательные к нему классы.

Вот простой пример.
(Не забываем сначала зайти на http://www.adobe.com/cfusion/entitlement/index.cfm?e=cirrus и получить ключ разработчика)

Код
package
{
    import flash.display.*;
    import flash.events.*;
    import flash.net.*
    import flash.text.*
    
    
    /**
     * ...
     * @author chingachgoog@mail.ru
     */
    public class P2P extends Sprite
    {
        private var tf:TextField    
        
        /*
         Необходимо получить ключ разработчика!!!
         http://www.adobe.com/cfusion/entitlement/index.cfm?e=cirrus
        Логинимся, получаем свой ключ и вставляем его в константу внизу:
        */
            
        private const CirrusAddress:String = "rtmfp://p2p.rtmfp.net/" // К этому адресу дописываем полученный ключ разраба
        private var netConnection:NetConnection;
        private var myPeerID:String  // Мой ID
        
        public function P2P():void
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }
        
        private function init(e:Event = null):void
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            try {
                netConnection = new NetConnection();
                netConnection.addEventListener(NetStatusEvent.NET_STATUS, netConnectionHandler);
                netConnection.connect(CirrusAddress);
            } catch (e:Error) {
                tf.appendText("\rEr=" + e)
            }
            // Отображение логов
            tf = new TextField()
            tf.autoSize = TextFieldAutoSize.LEFT
            tf.multiline = true
            tf.text = "init\r"
            addChild(tf)
            
            stage.addEventListener(MouseEvent.CLICK, toClick)
        }
        private function toClick(e:MouseEvent):void {
            var message:Object = new Object;
            message.text = "Hi!"
            myNetGroup.post(message);
        }
                
        private function netConnectionHandler(e:NetStatusEvent):void {
            
            var outpoot:String="\r"
            var o:Object=e.info as Object
            var message:String
            if (e.info.error) {
                message=e.info.error
            } else {
                message=e.info.code
            }
            outpoot += "\r"+message
            
            switch (message) {
                case "NetConnection.Connect.Success":
                    myPeerID = netConnection.nearID
                    outpoot+="\rmyPeerID="+myPeerID
                    if (!myNetGroup) initGroup()
                    break
                    
                //////////////////////////////////////////
    
                case "NetGroup.Posting.Notify": // e.info.message, e.info.messageID
                    outpoot += "\rNetGroup.Posting.Notify " + e.info.message.text
                    myGroup.postingEnabled = true;
                    break;
            }
    
            tf.appendText(outpoot)
        }
        
        private var myNetGroup:NetGroup
        private var myGroup:GroupSpecifier
        
        private function initGroup():void {
            try {
                myGroup = new GroupSpecifier("flashzone.ru")
                myGroup.postingEnabled = true;
                myGroup.serverChannelEnabled = true;
                myNetGroup = new NetGroup(netConnection, myGroup.groupspecWithAuthorizations())
                myNetGroup.addEventListener(NetStatusEvent.NET_STATUS, netConnectionHandler)
            } catch (er:Error) {
                
            }
        }
        
    }
    
}


PS

/forum/index.php?showto...ost&p=15397
Русская версия IP.Board © 2001-2014 IPS, Inc.