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

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

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

Регистрация: Jun 2006
Сообщений: 53
Отправить сообщение для updart с помощью ICQ
По умолчанию Worker и NetConnection - не работает соединение!

Добрый день, столкнулся вот с такой проблемой:
Есть main в котором создаю worker для связи с сервером, так как инфы с сервака приходит много в основном потоке жуткие тормоза.
Не работает подключение к серверу conn.connect("http://server.com/fluorine/gateway.aspx");, т.е. нет ответа совсем, ни ACTIVATE ни NET_STATUS. Если запускать с main то все работает, если вызвать в потоке conn.connect(null); - ответ есть, перекопал везде в нете, нет ответа, помогите!

Main:
Код AS3:
package {
 
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.system.MessageChannel;
	import flash.system.Worker;
	import flash.system.WorkerDomain;
	import flash.system.WorkerState;
 
	public class Main extends Sprite {
 
		[Embed(source="../lib/worker.swf", mimeType="application/octet-stream")]
		private static var ServerWorkerClass	: Class;
 
		private var serverWorker				: Worker;
 
		private var workerCommandChannel		: MessageChannel;
        private var resultChannel				: MessageChannel;
 
 
		public function Main():void {
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
			}
		//
		public function init(e:Event = null):void {
			removeEventListener(Event.ADDED_TO_STAGE, init);
			//
			serverWorker = WorkerDomain.current.createWorker(new ServerWorkerClass(), true);
			//
            workerCommandChannel = Worker.current.createMessageChannel(serverWorker);
            serverWorker.setSharedProperty("incomingCommandChannel", workerCommandChannel);
            //
            resultChannel = serverWorker.createMessageChannel(Worker.current);
            resultChannel.addEventListener(Event.CHANNEL_MESSAGE, handleResultMessage);
            serverWorker.setSharedProperty("resultChannel", resultChannel);
            //
            serverWorker.addEventListener(Event.WORKER_STATE, handleWorkerStateChange);
            serverWorker.start();
			}
		//
		private function handleWorkerStateChange(e:Event):void {
			trace("serverWorker.state: " + serverWorker.state);
			if (serverWorker.state == WorkerState.RUNNING) {
				workerCommandChannel.send("init");
				}
			}
		//
		private function handleResultMessage(e:Event):void {
			trace("main handleResultMessage", resultChannel.receive());
			}
		//
		private function handleEvent(e:*):void {
			trace("handleEvent: " + e);
			}
	}
}
Worker:
Код AS3:
package {
	import flash.display.Sprite;
	import flash.events.AsyncErrorEvent;
	import flash.events.Event;
	import flash.events.IOErrorEvent;
	import flash.events.NetStatusEvent;
	import flash.events.SecurityErrorEvent;
	import flash.net.NetConnection;
	import flash.net.ObjectEncoding;
	import flash.system.MessageChannel;
	import flash.system.Worker;
 
	public class Main extends Sprite {
 
		private var commandChannel		: MessageChannel;
        private var resultChannel		: MessageChannel;
 
		public var conn					: NetConnection;
 
		public function Main():void {
			conn = new NetConnection();
			conn.client = this;
			conn.objectEncoding = ObjectEncoding.AMF3;
			//
			init();
			}
		//
		private function init():void {
			commandChannel = Worker.current.getSharedProperty("incomingCommandChannel") as MessageChannel;
			commandChannel.addEventListener(Event.CHANNEL_MESSAGE, handleCommandMessage);
			//
			resultChannel = Worker.current.getSharedProperty("resultChannel") as MessageChannel;
			//resultChannel.send("worker init");
			}
		//
		private function handleCommandMessage(e:Event):void {
			if (!commandChannel.messageAvailable) { return; }
			//
			var message:String = commandChannel.receive();
			if (message == "init") {
				initServer();
				}
			}
		//
		private function initServer():void {
			conn.addEventListener(NetStatusEvent.NET_STATUS, handleEvent);
			conn.addEventListener(IOErrorEvent.IO_ERROR, handleEvent);
			conn.addEventListener(SecurityErrorEvent.SECURITY_ERROR, handleEvent);
			conn.addEventListener(AsyncErrorEvent.ASYNC_ERROR, handleEvent);
			conn.addEventListener(Event.ACTIVATE, handleEvent);
			conn.addEventListener(Event.DEACTIVATE, handleEvent);
			conn.connect("http://server.com/fluorine/gateway.aspx");
			//conn.connect(null);
			}
		//
		private function handleEvent(e:*):void {
			trace("worker handleEvent: " + e)
			resultChannel.send("worker handleEvent: " + e);
			}
		//
	}
}
Тему можно удалить. Разобрался.


Последний раз редактировалось updart; 30.04.2014 в 16:24.
Создать новую тему   Часовой пояс GMT +4, время: 02:36.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
netConenction , workers

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

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


 


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


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