Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Можно ли соеденить неопределённое кол-во swf через LocalConnection (http://www.flasher.ru/forum/showthread.php?t=199154)

джонатан 14.05.2013 02:20

Можно ли соеденить неопределённое кол-во swf через LocalConnection
 
Всех приветствую! Такой вопрос:

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

Гуглю примеры, везде пишутся две отдельные флешки, одна принимает, вторая отсылает.
Возможно ли реализовать то, что я описал?

Спасибо.

Партизан 14.05.2013 03:19

Думаю вполне может. Не до бесконечности конечно, но думаю ограничено скорее ресурсами машины для запуска n флешек.

джонатан 14.05.2013 03:25

Вложений: 1
Поковырялся, разобрался, придумал.
Вот, если кому понадобится:

Код AS3:

package  {
 
        import flash.display.Sprite;
        import flash.net.LocalConnection;
        import flash.text.TextField;
        import fl.controls.Button;
        import flash.text.TextFieldAutoSize;
        import flash.events.MouseEvent;
 
 
        public class Main extends Sprite {
 
                private var count:int = 0;
                private var connectionName:String = "myConnection";
                private var localConnectionSender:LocalConnection = new LocalConnection();
                private var localConnectionReceiver:LocalConnection = new LocalConnection();
                private var slaveConnectionsIDS:Array = [];
 
                public function Main() {
                        localConnectionReceiver.client = this;
                        connectReceiver();
 
                        if( count > 0 ) {
                                localConnectionSender.send( connectionName + "0", "slaveInit", count );
                        } else {
                                var button:Button = new Button();
                                button.label = "send";
                                button.addEventListener( MouseEvent.CLICK, sendMessage );
                                addChild( button );
                        }
                }
 
                private function connectReceiver():void {
                        try {
                                localConnectionReceiver.connect( connectionName + count.toString() );
                        } catch( error:Error ) {
                                count++;
                                connectReceiver();
                        }
                }
 
                private function sendMessage( event:MouseEvent ):void {
                        for( var i:int = 0; i < slaveConnectionsIDS.length; i++ ) {
                                localConnectionSender.send( connectionName + slaveConnectionsIDS[ i ], "messageFromMaster", "myMessage" );
                        }
                }
 
                public function slaveInit( slaveCount:int ):void {
                        trace( count, "init:", slaveCount );
                        slaveConnectionsIDS.push( slaveCount );
                }
 
                public function messageFromMaster( message:String ):void {
                        var tf:TextField = new TextField();
                        tf.text = "message from master swf: " + message;
                        tf.autoSize = TextFieldAutoSize.LEFT;
                        addChild( tf );
                }
        }
}

Прикрепляю исходники.

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

Idon'tKnow 14.05.2013 22:43

А нельзя попробовать сделать вот так
Код AS3:

internal static var count:int = 0;

Код AS3:

private function connectReceiver():void {
                        try {
                                localConnectionReceiver.connect( connectionName + count.toString() );
                        } catch( error:Error ) {
                                count++;
                                connectReceiver();
                        }
                }

Т.е не бежать каждый раз, плюсуя count, а знать его заранее.
Сразу отлавливать номер соединения. Чуток выигрыш в скорости должен же быть, если я верно понял Ваш код. :)

Или я глубоко заблуждаюсь ?

джонатан 15.05.2013 04:16

Не вижу, что бы это хоть что-то изменило.
Как вы узнаете заранее сколько флешек уже создали соединение?

Каждое соединение должно иметь уникальное имя, по этому сount и плюсуется, пока не дойдёт до свободного.

Idon'tKnow 15.05.2013 16:19

Цитата:

Сообщение от джонатан (Сообщение 1133249)
Не вижу, что бы это хоть что-то изменило.
Как вы узнаете заранее сколько флешек уже создали соединение?

Код AS3:

Main.count

Просто, вот это, пытается создать соединение с нуля до кол-во соединений раз. И когда находит доступное, соединяет:
Код AS3:

private function connectReceiver():void {
                        try {
                                localConnectionReceiver.connect( connectionName + count.toString() );
                        } catch( error:Error ) {
                                count++;
                                connectReceiver();
                        }
                }

Нам этого делать не придется, т.к в
Код AS3:

static var count

уже будет лежать кол-во эти соединений(т.к она статического типа).
Или я допускаю ошибку?

zuxul 15.05.2013 17:13

В другой флешке count будет иметь другое значение.

джонатан 15.05.2013 18:50

Цитата:

Сообщение от Idon'tKnow (Сообщение 1133312)
Код AS3:

Main.count

Нам этого делать не придется, т.к в
Код AS3:

static var count

уже будет лежать кол-во эти соединений(т.к она статического типа).
Или я допускаю ошибку?

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

Idon'tKnow 15.05.2013 18:53

Спасибо, не знал, т.к недавно начал изучать. Проверял просто в 1-ом экзепляре, думал и в нескольких так выйдет.


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

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