Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Одна флешка, управляет другой? Как? (http://www.flasher.ru/forum/showthread.php?t=110151)

wvxvw 28.03.2008 10:24

Вобщем, если сильно хочется с LC это делать и чтобы можно было открывать несколько окон, то принцип такой: обе флешки знают первоначальное имя соединения, но как только соединение произошло - флешка, которая сендит генерит уникальное имя для нового соединения и высылает его флешке, которая коннектится, после чего закрывает соединение. Вторая флешка после этого так же закрывает соединение и конектится по новой на уникальное соединение. Единственное что... ЛК работает медленнее чем скрипт внутри плеера, поэтому нужно принимать во внимание, что все эти переконекты произойдут не сразу а через доли секунды после. Ну и соответственно учесть это в реализации, т.е. все шаги должны проверять успешное окончание предыдущего шага, а не просто выполнятся один за другим.
Да, по поводу третей флешки... ну, даж не знаю, ЖаваСкрипт - как-то проще и надежнее выглядит. Больше чем 1 флешка не может приконектится к одному соединению, это значит, что прийдется создавать 2 соединения и подключаться и туда и туда.

etc 28.03.2008 10:30

http://www.flasher.ru/forum/showthread.php?t=82922

alexcon314 28.03.2008 10:50

Вложений: 1
к вопросу о LocalConnection. попробуйте посмотреть вот этот пример. он очень простой.

джонатан 28.03.2008 15:12

alexcon314 Сенк ю! Тут гораздо понятнее. Я даже было решил что я во всем разобрался. Но на практике, оказалось, что это не так. Давайте я покажу Вам, что я сделал, быть может вы укажете мне где я допустил ошибку.

Вобщем в файле, были две флешки, "a" и "c". На каждой из которых, имеется по две текстовые области (одна чтобы отправлять, а вторая, чтобы получать) и кнопка отправить.
Во флешке "a" прописано:
Код:

this.createTextField('answer', 10, 10, 10, 200, 50);
answer.border = true;
answer.type = "dynamic";
this.createTextField('reply', 11, 10, 70, 200, 50);
reply.border = true;
reply.type = "input";
var listener:LocalConnection = new LocalConnection();
listener.connect("bTOa");
listener.BswfSays = function(message) {
        answer.text = message;
};
var sender:LocalConnection = new LocalConnection();
send_btn.onRelease = function() {
        sender.send("aTOb", "AswfSays", reply.text);
        reply.text = "";
};

Во флешке b:

Код:

this.createTextField('answer', 10, 10, 10, 200, 50);
answer.border = true;
answer.type = "dynamic";
this.createTextField('reply', 11, 10, 70, 200, 50);
reply.border = true;
reply.type = "input";
var listener:LocalConnection = new LocalConnection();
listener.connect("aTOb");
listener.AswfSays = function(message) {
        answer.text = message;
};
var sender:LocalConnection = new LocalConnection();
send_btn.onRelease = function() {
        sender.send("bTOa", "BswfSays", reply.text);
        reply.text = "";
};

Я создал флешку ц и прописал в ней следующее:
Код:

this.createTextField('answer', 10, 10, 10, 200, 50);
answer.border = true;
answer.type = "dynamic";
this.createTextField('reply', 11, 10, 70, 200, 50);
reply.border = true;
reply.type = "input";
var listener:LocalConnection = new LocalConnection();
listener.connect("bTOc");
listener.BswfSays = function(message) {
        answer.text = message;
};
var sender:LocalConnection = new LocalConnection();
send_btn.onRelease = function() {
        sender.send("cTOb", "CswfSays", reply.text);
        reply.text = "";
};
var listener:LocalConnection = new LocalConnection();
listener.connect("aTOc");
listener.AswfSays = function(message) {
        answer.text = message;
};
var sender:LocalConnection = new LocalConnection();
send_btn.onRelease = function() {
        sender.send("cTOa", "CswfSays", reply.text);
        reply.text = "";
};

И соответственно внес изменения во флешки "а" и "b", получилось следующее:
A:
Код:

this.createTextField('answer', 10, 10, 10, 200, 50);
answer.border = true;
answer.type = "dynamic";
this.createTextField('reply', 11, 10, 70, 200, 50);
reply.border = true;
reply.type = "input";
var listener:LocalConnection = new LocalConnection();
listener.connect("bTOa");
listener.BswfSays = function(message) {
        answer.text = message;
};
var sender:LocalConnection = new LocalConnection();
send_btn.onRelease = function() {
        sender.send("aTOb", "AswfSays", reply.text);
        reply.text = "";
};

//Мои внесения.

var listener:LocalConnection = new LocalConnection();
listener.connect("cTOa");
listener.CswfSays = function(message) {
        answer.text = message;
};
var sender:LocalConnection = new LocalConnection();
send_btn.onRelease = function() {
        sender.send("aTOc", "AswfSays", reply.text);
        reply.text = "";
};

B:

Код:

this.createTextField('answer', 10, 10, 10, 200, 50);
answer.border = true;
answer.type = "dynamic";
this.createTextField('reply', 11, 10, 70, 200, 50);
reply.border = true;
reply.type = "input";
var listener:LocalConnection = new LocalConnection();
listener.connect("aTOb");
listener.AswfSays = function(message) {
        answer.text = message;
};
var sender:LocalConnection = new LocalConnection();
send_btn.onRelease = function() {
        sender.send("bTOa", "BswfSays", reply.text);
        reply.text = "";
};

//Мои внесения.

var listener:LocalConnection = new LocalConnection();
listener.connect("cTOb");
listener.CswfSays = function(message) {
        answer.text = message;
};
var sender:LocalConnection = new LocalConnection();
send_btn.onRelease = function() {
        sender.send("bTOc", "BswfSays", reply.text);
        reply.text = "";
};

Итог: Теперь обмениваются между собою флешка "a" и флешка "c", а флешка "b" не принимает, не отправляет.

Где же ошибка(и)?

Заранее благодарен, за убитое время, на меня дурака :wacko:

alexcon314 28.03.2008 17:49

первое что бросилось в глаза: у вас на ОДНУ И ТУ ЖЕ кнопку привязаны РАЗНЫЕ функции. выполняться будет та, которую привязали последней.
ну а вообще вот:
Код:

//aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
this.createTextField('answer', 10, 10, 10, 200, 50);
answer.border = true;
answer.type = "dynamic";
this.createTextField('reply', 11, 10, 70, 200, 50);
reply.border = true;
reply.type = "input";
var listenerB:LocalConnection = new LocalConnection();
listenerB.connect("bTOa");
listenerB.BswfSays = function(message) {
        answer.text = message;
};
var listenerC:LocalConnection = new LocalConnection();
listenerC.connect("cTOa");
listenerC.CswfSays = function(message) {
        answer.text = message;
};
var sender:LocalConnection = new LocalConnection();
send_btn.onRelease = function() {
        sender.send("aTOb", "AswfSays", reply.text);
        sender.send("aTOc", "AswfSays", reply.text);
        reply.text = "";
};
//bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
this.createTextField('answer', 10, 10, 10, 200, 50);
answer.border = true;
answer.type = "dynamic";
this.createTextField('reply', 11, 10, 70, 200, 50);
reply.border = true;
reply.type = "input";
var listenerA:LocalConnection = new LocalConnection();
listenerA.connect("aTOb");
listenerA.AswfSays = function(message) {
        answer.text = message;
};
var listenerC:LocalConnection = new LocalConnection();
listenerC.connect("cTOb");
listenerC.CswfSays = function(message) {
        answer.text = message;
};
var sender:LocalConnection = new LocalConnection();
send_btn.onRelease = function() {
        sender.send("bTOa", "BswfSays", reply.text);
        sender.send("bTOc", "BswfSays", reply.text);
        reply.text = "";
};
// ccccccccccccccccccccccccccccccccccccccccccc
this.createTextField('answer', 10, 10, 10, 200, 50);
answer.border = true;
answer.type = "dynamic";
this.createTextField('reply', 11, 10, 70, 200, 50);
reply.border = true;
reply.type = "input";
var listenerA:LocalConnection = new LocalConnection();
listenerA.connect("aTOc");
listenerA.AswfSays = function(message) {
        answer.text = message;
};
var listenerB:LocalConnection = new LocalConnection();
listenerB.connect("bTOc");
listenerB.BswfSays = function(message) {
        answer.text = message;
};
var sender:LocalConnection = new LocalConnection();
send_btn.onRelease = function() {
        sender.send("cTOa", "CswfSays", reply.text);
        sender.send("cTOb", "CswfSays", reply.text);
        reply.text = "";
};
// чтобы слать сообщения избирательно, нужно делать двае кнопки.

только задуматься о том, как все это добро будет работать ОДНОВРЕМЕННО в двух разных окнах браузера стоит. и стоит прислушаться к _etc в топике, ссылку на который он дал. ( вариант Nox'a с JS лично мне менее симпатичен просто :), хорошо когда все в одном месте).
данный пример не более чем упражнение преред решением действительно серьезной задачи. имейте это в виду.
кстати, Fernando Costa дал вам еще один неплохой вариант законнектить несколько флешек. у него насколько я понял пересылаются сообщения не напрямую а через "сервер", который "помнит" всех своих клиентов в списке и шлет в адрес переданное ему сообщение.

джонатан 28.03.2008 21:11

Вложений: 1
alexcon314 Огромное спасибо за помощь! Я кстати уже был разобрался. Все понял. Вот влез написать, что уже все понял как делать, и тут Вы все расписали.
Спасибо товарищи! Одного зайца убил с Вашей помощью. Теперь буду рассматривать другие варианты, в том числе и те, что с JS.
Еще раз спасибо!

Вот для болванов вроде меня, я отправляю подробный FAQ, в котором я расписал все детально, и очень подробно. Уверен, вопросов после прочтения не возникнет!

Вложение 19182

джонатан 30.03.2008 04:25

Вот теперь буду вас мучать вопросами по поводу кода от госоподина __etc
Конечно, же с его кодом все работает гораздо корректнее, не смотря на то, что маловероятно, что кто-то захочет дважды открыть один и тот-же сайт, темболее в разных окнах. Но всеже лучше подстраховаться и на этот случай.
А теперь вопрос. Этот код, кординально отличается от предыдущего, и поэтому я снова прошу вашей помощи. Разпишите пожалуйста, кому не трудно, и желательно поподробнее, что есть что в этом коде. А то я смотрю на него, прям как баран на новые ворота.

Код:

main_lc = new LocalConnection();
main_lc.onConnect = function(id) {
 trace('Connection id: '+id);
}
exchange_lc = new LocalConnection();
isObserver = true;
connectionId = "lc_"+(new Date().getTime());
exchange_lc.onGetId = function(id) {
 connectionId = id;
 exchange_lc.close();
 createMainLC();
}
exchange_lc.onStatus = function(status) {
 if (status.level == 'status') {
    createMainLC();
 } else {
    exchange_lc.connect('exchange');
 }
}
exchange_lc.send('exchange', 'onGetId', connectionId);
createMainLC = function () {
 if (isObserver) {
  main_lc.send(connectionId, 'onConnect',connectionId);
 } else {
  main_lc.connect(connectionId);
 }
}

Естественно коментариев автора, я не дождусь, но надеюсь, что хоть кто-то всеже поможет мне.

Заранее, искренне благодарен. Низкий Вам поклон дорогие друзья.

etc 30.03.2008 15:48

А что именно непонятно в коде? Я вроде и комментарии в той теме оставил. Если внимательно прочитать тему, то никаких вопросов не должно возникнуть.

AL.exe 30.03.2008 18:21

Может, я и извращенец, но я бы попробовал сначала сделать вообще через sharedObject :)

джонатан 30.03.2008 20:13

__etc Прочел эту тему очень много раз. Может там и все ясно, но только не мне. Не забывайте, что я в этом деле еще совсем новичок. А непонятно мне в коде, что куда писать. Тоесть как я уже говорил у меня 3 флешки, "A", "B" и "C". И что куда писать я не понимаю. Код значительно отличается от передыдущего варианта, в котором я всетаки с горем пополам разобрался. А то что если открыть эту страницу в дувух окнах будет глючить, ну никуда не катит. Хочу сделать, чтоб уже все было круто. Помогите пожалуйста!


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

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