Добрый день, столкнулся вот с такой проблемой:
Есть 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);
}
//
}
}
Тему можно удалить. Разобрался.