Цитата:
Сообщение от Astraport
Обрамите try catch
|
2 сек.
Может кто наглядно увидит причину
коннектор
Код AS3:
package {
import flash.net.LocalConnection;
import flash.events.Event;
import flash.events.StatusEvent;
import flash.display.Sprite;
import flash.text.TextField;
public class SyncSystem extends Sprite{
public var process:Object;
protected var conn:LocalConnection;
public var channel:String = "default";
public function SyncSystem() {
conn = new LocalConnection();
conn.addEventListener(StatusEvent.STATUS, onStatus);
}
public function send(method:String, param:Object = null):void {
conn.send(channel,method,param);
}
public function set active($setup:Boolean):void {
if ($setup) {
conn.connect(channel);
conn.client = this;
} else trace("UserReject connection");
}
public function command($pack:Object):void {
process = $pack;
dispatchEvent(new Event("CHANNEL"));
}
private function onStatus(event:StatusEvent):void {
trace(event.level);
switch (event.level) {
case "status":
trace("LocalConnection.send() succeeded");
break;
case "error":
trace("LocalConnection.send() failed"+event);
break;
}
}
}
}
сендер
Код AS3:
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
import SyncSystem;
import flash.events.NetStatusEvent;
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.events.AsyncErrorEvent;
import flash.display.Loader;
import flash.display.StageDisplayState;
import flash.utils.ByteArray;
import flash.media.SoundTransform;
import flash.display.StageScaleMode;
import flash.display.StageAlign;
import flash.system.System;
import flash.geom.Matrix;
import flash.geom.Rectangle;
import flash.display.Sprite;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Loader;
import flash.system.Security;
import src.loadPictures;
import flash.utils.Timer;
import flash.events.TimerEvent;
public class MainControl extends Sprite {
private var xml:XML;
private var sync:SyncSystem = new SyncSystem();
public var sender:SyncSystem = new SyncSystem();
private var cache:Object = new Object();
private var setting:Object = new Object();
private var pannel:Sprite;
private var strans:SoundTransform = new SoundTransform(0,0);
private var timer = new Timer(5000);
public function MainControl() {
addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event):void {
this.removeEventListener(Event.ADDED_TO_STAGE, init);
stage.addEventListener(Event.RESIZE, onStageResize, false, 0, true);
stage.align = StageAlign.TOP_LEFT;
System.useCodePage = true;
//Security.allowDomain("*");
timer.addEventListener(TimerEvent.TIMER, refreshTimer);
pannel = new Sprite();
cache.cast = new Array();
cache.playlist = new Array();
cache.images = new Array();
cache.img1 = new Sprite();
cache.img2 = new Sprite();
backimage.addChild(cache.img1);
backimage.addChild(cache.img2);
cache.frame = 0;
cache.image = 0;
cache.bid = 1;
sender.channel = "AdminSecurity";
sender.active = true;
sender.addEventListener("CHANNEL", channel);
addChild(pannel);
ReadXML();
}
private function resetter(e:Event):void {
cache.img1.alpha+=.1;
cache.img2.alpha-=.1;
if (cache.img1.alpha>=1) {
e.target.removeEventListener(Event.ENTER_FRAME, resetter);
while (cache.img2.numChildren) cache.img2.removeChildAt(0);
cache.img3 = cache.img1;
cache.img1 = cache.img2;
cache.img2 = cache.img3;
cache.img2.alpha = 1;
cache.img1.alpha = 0;
if (++cache.image==cache.images.length) cache.image = 0;
cache.img1.addChild(new loadPictures(cache.images[cache.image]));
}
}
private function refreshTimer(e:TimerEvent):void {
cache.img1.addEventListener(Event.ENTER_FRAME, resetter);
}
private function channel(e:Event):void {
var data = e.target.process;
trace("channel");
switch (data.using) {
case "screen": {
trace("screen"+data.bm);
} break;
}
}
private function ReadXML():void {
xml = new XML();
var XML_URL:String = "setting.xml";
var myLoader:URLLoader = new URLLoader(new URLRequest(XML_URL));
myLoader.addEventListener("complete", xmlLoaded);
}
private function backSetter(e:Event):void {
var f = cache.frame++%200;
var d = 10;
if (f==0) {
cache.img1.visible = true;
if (++cache.image==cache.images.length) cache.image = 0;
} else
if (f<d) {
cache.img2.alpha -= Math.floor(((1/d)*100))/100;
cache.img1.alpha += Math.floor(((1/d)*100))/100;
}
if (f==d) {
while (cache.img2.numChildren) cache.img2.removeChildAt(0);
cache.img3 = cache.img1;
cache.img1 = cache.img2;
cache.img2 = cache.img3;
cache.img2.alpha = 1;
cache.img1.alpha = 0;
}
if (f==11) {
cache.img1.addChild(new loadPictures(cache.images[cache.image]));
cache.img1.visible = false;
}
}
private function xmlLoaded(event:Event):void {
xml = XML(event.target.data);
titlebox.title.htmlText = xml.title;
sync.channel = xml.channel;
setting.icon = xml.directory.attribute("icons");
setting.image= xml.directory.attribute("image");
setting.video= xml.directory.attribute("video");
for each(var library:XML in xml.video)
for each( var cast in library) {
cache.playlist.push(setting.video+"/"+cast.attribute("src"));
cache.cast.push({"title":cast, "icon":setting.icon+"/"+cast.attribute("icon"), "src":setting.video+"/"+cast.attribute("src")});
}
for each(var imgs:XML in xml.image)
for each( var img in imgs) {
cache.images.push(setting.image+"/"+img.attribute("src"));
}
cache.img1.addChild(new loadPictures(cache.images[0]));
var i = 0;
for each( var data in cache.cast) {
i++;
this['b'+i].image.selector.visible = false;
this['b'+i].bid = i;
this['b'+i].data = data;
this['b'+i].title.text = data.title;
this['b'+i].addEventListener(MouseEvent.MOUSE_DOWN, sending);
this['b'+i].image.img.addChild(new loadPictures(data.icon));
this['b'+i].w = this['b'+i].image.width;
this['b'+i].h = this['b'+i].image.height;
var connect_nc:NetConnection = new NetConnection();
connect_nc.connect(null);
this['b'+i].stream_ns = new NetStream(connect_nc);
this['b'+i].stream_ns.checkPolicyFile = false;
this['b'+i].stream_ns.bufferTime = 5;
this['b'+i].stream_ns.client = this;
this['b'+i].stream_ns.soundTransform = strans;
this['b'+i].image.video.attachNetStream(this['b'+i].stream_ns);
this['b'+i].stream_ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR, AsyncErrorHandler);
this['b'+i].stream_ns.addEventListener(NetStatusEvent.NET_STATUS, PlayerStatusHandler);
this['b'+i].stream_ns.play(data.src);
this['b'+i].stream_ns.seek(1);
this['b'+i].stream_ns.pause();
}
onStageResize(new Event(""));
timer.start();
b1.show = true;
b1.image.img.visible = false;
b1.image.selector.visible = true;
b1.addEventListener(Event.ENTER_FRAME, shower);
cache.stream = b1;
b1.stream_ns.resume();
sync.send("command", {"using":"playlist","playlist":cache.playlist});
sync.send("command", {"using":"play","src":b1.data.src});
}
private function PlayerStatusHandler(event:NetStatusEvent) {
trace(event.info.code);
switch (event.info.code) {
case "NetStream.Play.Stop": {
if (++cache.bid==7) cache.bid=1;
this['b'+cache.bid].dispatchEvent(new MouseEvent(MouseEvent.MOUSE_DOWN));
} break;
}
}
private function sending(e:MouseEvent):void {
if (cache.stream) {
cache.stream.stream_ns.pause();
cache.stream.stream_ns.seek(1);
cache.stream.image.img.visible = true;
cache.stream.image.selector.visible = false;
cache.stream.show = false;
}
cache.bid = e.currentTarget.bid;
e.currentTarget.show = true;
e.currentTarget.image.img.visible = false;
e.currentTarget.image.selector.visible = true;
if (!e.currentTarget.hasEventListener(Event.ENTER_FRAME)) {
e.currentTarget.addEventListener(Event.ENTER_FRAME, shower);
}
cache.stream = e.currentTarget;
e.currentTarget.stream_ns.resume();
sync.send("command", {"using":"play","src":e.currentTarget.data.src});
if(stage.displayState != StageDisplayState.FULL_SCREEN)
stage.displayState = StageDisplayState.FULL_SCREEN;
}
private function revers(e:MouseEvent):void {
e.currentTarget.show = false;
if (!e.currentTarget.hasEventListener(Event.ENTER_FRAME)) {
e.currentTarget.addEventListener(Event.ENTER_FRAME, shower);
}
}
private function shower(e:Event):void {
e.target.image.width += (((e.target.show) ? e.target.w*1.1 : e.target.w)-e.target.image.width)/5;
e.target.image.height += (((e.target.show) ? e.target.h*1.1 : e.target.h)-e.target.image.height)/5;
e.target.title.y = e.target.image.y+e.target.image.height/2;
}
public function onImageData(d:Object):void {trace("img");}
private function onStageResize(e:Event):void {}
public function onMetaData(p_info:Object):void {}
public function handleCoverImage(p_data:Array):void {
trace("handleCoverImage");
var loader:Loader = new Loader();
loader.loadBytes(p_data[0] as ByteArray);
addChildAt(loader, 0);
}
private function AsyncErrorHandler(e:AsyncErrorEvent):void { trace(e.error);}
}
}
ресивер
Код AS3:
package {
import flash.system.Security;
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.events.Event;
import flash.events.NetStatusEvent;
import flash.display.Sprite;
import flash.display.StageDisplayState;
import SyncSystem;
import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.utils.ByteArray;
import flash.display.PixelSnapping;
public class tvTranslator extends Sprite {
private var cache:Object = new Object();
private var sync:SyncSystem = new SyncSystem();
private var stream_ns:NetStream;
public function tvTranslator() {
addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event):void {
this.removeEventListener(Event.ADDED_TO_STAGE, init);
//Security.allowDomain("localhost");
stage.addEventListener(Event.RESIZE, onStageResize, false, 0, true);
sync.channel = "PanasonicSecurity";
sync.active = true;
sync.addEventListener("CHANNEL", channel);
cache.screen = new Sprite();
var connect_nc:NetConnection = new NetConnection();
connect_nc.connect(null);
stream_ns = new NetStream(connect_nc);
stream_ns.checkPolicyFile = false;
stream_ns.client = this;
stream_ns.addEventListener(NetStatusEvent.NET_STATUS, PlayerStatusHandler);
videocont.video.attachNetStream(stream_ns);
}
private function onStageResize(e:Event):void {
videocont.video.x = 0;
videocont.video.y = 0;
}
private function channel(e:Event):void {
var data = e.target.process;
//logger.text += "channel\n";
switch (data.using) {
case "play": {
broadcasting(data.src);
} break;
case "playlist": {
cache.playlist = data.playlist;
cache.trackid = 0;
} break;
}
}
function PlayerStatusHandler(event:NetStatusEvent) {
trace(event.info.code);
switch (event.info.code) {
case "NetStream.Play.Stop": {
//cache.trackid++;
//broadcasting();
} break;
}
if (cache.playerLastEvent == "NetStream.Buffer.Flush" && event.info.code == "NetStream.Buffer.Empty") {
StopPlayback(event);
} else
if (cache.playerLastEvent == "NetStream.Buffer.Flush" && event.info.code != "NetStream.Buffer.Empty") cache.playerLastEvent = "";
else if (event.info.code == "NetStream.Buffer.Flush")
cache.playerLastEvent = "NetStream.Buffer.Flush";
}
private function StopPlayback(event:NetStatusEvent):void { trace("video end"); }
private function broadcasting(src:String):void {
stream_ns.play(src);
if(stage.displayState != StageDisplayState.FULL_SCREEN) stage.displayState = StageDisplayState.FULL_SCREEN;
}
private function createScreen(e:Event):void {}
public function onMetaData(p_info:Object):void {}
}
}
Добавлено через 12 минут
На сколько я понял у меня вообще не работает LocalConnection
Добавлено через 15 минут
Кто может, поделитесь простым примером связи через локалконекшен между двумя приложениями AIR
Добавлено через 21 минуту
Понял в чем проблема. В AIR к локалконекшену добавляется Ид приложения
Код AS3:
receivingLC.allowDomain('app#com.example');
receivingLC.connect('myConnection');
// sendingLC is an AIR application with app ID = com.example (and no publisher ID)
sendingLC.send('app#com.sample:myConnection', 'myMethod');
Добавлено через 30 минут
кто-то работал с локалконекшеном в эйре? Если есть такие поделитесь экземплом