Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 02.12.2010, 20:07
VadimuZ вне форума Посмотреть профиль Отправить личное сообщение для VadimuZ Найти все сообщения от VadimuZ
  № 1  
Ответить с цитированием
VadimuZ
 
Аватар для VadimuZ

Регистрация: Sep 2004
Сообщений: 129
Отправить сообщение для VadimuZ с помощью ICQ
Attention Рассылка сообщения всем SWF

Зачада: на странице загружено 10 копий одной swf - MediaPlayer.
При проигрывании одного из плеера, остальные 9 должны молчать, т.е. получить сообщение что играть пока нельзя.
Если фокус Play преходит к одному другому плееру, сообщение рассылаем заново, все замолкают кроме текущего. При этом хочется сделать универсально в 1ной swf. Т.е. загруженных плееров может быть хоть тысячи... без гемора передачи параметров и без вызова JS.

И так проблемы.

SharedObject постояные проблемы с обновлением данных.
Если даже пересоздавать обьект через таймер, данные не обновляются, и получается постоянная долбежка.
Событыие SyncEvent не фурыкает как надо.

LocalConnection невозможно создавать более двух подключений к одному соединению.

Как решить подобную задачу?
__________________
www.vadimuz.ru


Последний раз редактировалось VadimuZ; 02.12.2010 в 20:13.
Старый 03.12.2010, 01:46
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 2  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
SharedObject постояные проблемы с обновлением данных.
А вы ему flush() не забыли сделать?

Старый 03.12.2010, 10:36
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 3  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Код AS1/AS2:
var id = Math.random(); // желательно уникальный id
var lc = new LocalConnection();
var maxPlayers = 100;
var lcName = "player_";
function searchFreeConnections() {
	for (var k = 0; k<maxPlayers; k++) {
		if (lc.connect(lcName+k)) {
			lc.stopPlayback = function(_id) {
				if (_id != id) {
					// self pause here
				}
			};
			return;
		}
	}
}
searchFreeConnections();
function muteOthers() {
	var lc2 = new LocalConnection();
	for (var k = 0; k<maxPlayers; k++) {
		lc2.send(lcName+k,"stopPlayback",id);
	}
}
Код на ас2. На ас3, думаю, тоже получится. Если получится, отпишитесь, пожалуйста
__________________
hauts.ru


Последний раз редактировалось Hauts; 03.12.2010 в 10:40.
Старый 03.12.2010, 10:57
zuxul вне форума Посмотреть профиль Отправить личное сообщение для zuxul Найти все сообщения от zuxul
  № 4  
Ответить с цитированием
zuxul

Регистрация: Dec 2009
Адрес: 59°13′N, 39°54′E
Сообщений: 445
Записей в блоге: 1
В этом примере, запускаем несколько таких флешек, первая флешка будет сервером, жмем на черный квадратик и текст из TextField-а попадает ко всем остальным.
Нужно только правильно реализовать переключение сервера и удаление недействительных клиентов (когда какая-нибудь флешка будет закрыта)
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.events.StatusEvent;
	import flash.net.LocalConnection;
	import flash.text.TextField;
	import flash.text.TextFieldType;
 
	public class Main extends Sprite 
	{
		public function Main() {
			if (stage) addedToStageListener();
			else addEventListener(Event.ADDED_TO_STAGE, addedToStageListener);
		}
 
		private static const CLIENT_CONNECTION_NAME:String = "UniqueConnectionNameClient";
		private static const SERVER_CONNECTION_NAME:String = "UniqueConnectionNameServer";
		private var tf:TextField;
		private var client:LocalConnection;
		private var client_connection_name:String;
		private var server:LocalConnection;
		private var i_is_server:Boolean;
		/// количество клиентов
		private var amount_client:int;
 
		private function addedToStageListener(event:Event = null):void {
			removeEventListener(Event.ADDED_TO_STAGE, addedToStageListener);
 
			tf = new TextField();
			tf.border = true;
			tf.height = 30;
			tf.width = 100;
			tf.type = TextFieldType.INPUT;
 
			addChild(tf);
 
			var btn:Sprite = new Sprite();
			btn.graphics.beginFill(0);
			btn.graphics.drawRoundRect(0, 0, 40, 20, 5);
			btn.graphics.endFill();
			btn.buttonMode = btn.useHandCursor = true;
			btn.y = 30;
			addChild(btn);
 
			btn.addEventListener(MouseEvent.CLICK, clickListener);
 
			amount_client = 0
			client = new LocalConnection();
			client.addEventListener(StatusEvent.STATUS, onStatus);
			server = new LocalConnection();
			server.addEventListener(StatusEvent.STATUS, onStatus);
			var findEmtpySlot:Boolean = false;
			while (!findEmtpySlot) {
				client_connection_name = CLIENT_CONNECTION_NAME + String(amount_client);
				try {
					client.connect(client_connection_name);
					findEmtpySlot = true;
				} catch (error:ArgumentError) {
				}
				amount_client++;
				if (findEmtpySlot) {
					client.client = this;
				} else {
					server.send(client_connection_name, "takeSlot");
				}
			}
			i_is_server = amount_client == 0;
		}
 
		public function takeSlot():void {
			amount_client++;
			trace("Client amount: " + amount_client);
		}
 
		private function clickListener(e:MouseEvent):void {
			trace("onClick");
			for (var i:int = 0; i < amount_client; i++) {
				var name:String = CLIENT_CONNECTION_NAME + String(i);
				// не будем посылать себе
				if (name != client_connection_name) {
					server.send(name, "setText", tf.text);
					trace("Send to " + name)
				}
			}
		}
 
		public function setText(text:String):void {
			tf.text = text;
			trace("Set text: " + text);
		}
 
        private function onStatus(event:StatusEvent):void {
            switch (event.level) {
                case "status":
                    trace("LocalConnection.send() succeeded");
                    break;
                case "error":
                    trace("LocalConnection.send() failed");
                    break;
            }
        }
	}
}

Старый 03.12.2010, 14:21
VadimuZ вне форума Посмотреть профиль Отправить личное сообщение для VadimuZ Найти все сообщения от VadimuZ
  № 5  
Ответить с цитированием
VadimuZ
 
Аватар для VadimuZ

Регистрация: Sep 2004
Сообщений: 129
Отправить сообщение для VadimuZ с помощью ICQ
Реализовал вариант zuxul, всем спасибо.
__________________
www.vadimuz.ru

Создать новую тему Ответ Часовой пояс GMT +4, время: 20:07.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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