PDA

Просмотр полной версии : Можно ли соеденить неопределённое кол-во swf через LocalConnection


джонатан
14.05.2013, 02:20
Всех приветствую! Такой вопрос:

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

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

Спасибо.

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

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


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
А нельзя попробовать сделать вот так internal static var count:int = 0;

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


Main.count Просто, вот это, пытается создать соединение с нуля до кол-во соединений раз. И когда находит доступное, соединяет:
private function connectReceiver():void {
try {
localConnectionReceiver.connect( connectionName + count.toString() );
} catch( error:Error ) {
count++;
connectReceiver();
}
}

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

zuxul
15.05.2013, 17:13
В другой флешке count будет иметь другое значение.

джонатан
15.05.2013, 18:50
Main.count
Нам этого делать не придется, т.к в static var count уже будет лежать кол-во эти соединений(т.к она статического типа).
Или я допускаю ошибку?

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

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