Просмотр полной версии : Можно ли соеденить неопределённое кол-во 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 уже будет лежать кол-во эти соединений(т.к она статического типа).
Или я допускаю ошибку?
В другой флешке count будет иметь другое значение.
джонатан
15.05.2013, 18:50
Main.count
Нам этого делать не придется, т.к в static var count уже будет лежать кол-во эти соединений(т.к она статического типа).
Или я допускаю ошибку?
Как и сказано выше, статичная переменная будет хранить значения в пределах одного swf файла, а я же рассматриваю соединение нескольких отдельных swf расположенных например на одной странице.
Idon'tKnow
15.05.2013, 18:53
Спасибо, не знал, т.к недавно начал изучать. Проверял просто в 1-ом экзепляре, думал и в нескольких так выйдет.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.