Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Логгер: AIR - AS2 (localhost) (http://www.flasher.ru/forum/showthread.php?t=117024)

wvxvw 16.10.2008 18:59

Логгер: AIR - AS2 (localhost)
 
Вот, увидел, что оказывается каждый сложившийся флешер должен написать логгер в AIR :) С первого разу не получилось.
Вопрос такой: Есть АИР приложение (ну простое до безумия, код ниже), если создать еще 1 локал коннекшн и из него посылать сообщения прямо в том же приложении - они нормально приходят. Если пытаюсь их послать из АС2 флешки загруженой с localhost - естесственно, ничего не приходит. Пробовал по-всякому alowDomain и alowInsecureDomain - никаких изменений. Чего мне не хватает?
Код:

package com.aditall.log
{
        import flash.events.Event;
        import flash.events.StatusEvent;
        import flash.net.LocalConnection;
       
        [Event("logReceived")]
       
        /**
        * Logger class.
        * @author wvxvw
        */
        public class Logger extends LocalConnection
        {
                public static const LOG_RECEIVED:String = "logReceived";
                private static const MIXER_LC_NAME:String = "aditallmixer";
               
                private var _logMessage:String = "Connecting...";
               
                public function Logger()
                {
                        super();
                        client = this;
                        allowDomain("localhost", "http://localhost/local/MIXER/mixer_build_mtasc.swf");
                        allowInsecureDomain("localhost", "http://localhost/local/MIXER/mixer_build_mtasc.swf");
                        connect(MIXER_LC_NAME);
                }
               
                public function log(logStr:String):void { logMessage = logStr; }
               
                [Bindable("logReceived")]
                public function get logMessage():String { return _logMessage; }
               
                public function set logMessage(s:String):void
                {
                        trace("called "+s);
                        _logMessage = s;
                        dispatchEvent(new Event(LOG_RECEIVED));
                }
        }
       
}

Код:

<?xml version="1.0"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
        applicationComplete="handleAppComplete(event)">
        <mx:Script>
                <![CDATA[
                        import com.aditall.log.Logger;
                        import flash.events.Event;
                        import flash.events.StatusEvent;
                        import flash.net.LocalConnection;
                        import mx.core.WindowedApplication;
                       
                        public var loggerLC:Logger;
                        //public var testLC:LocalConnection;
                       
                        [Bindable]
                        public var loggerMessage:String;
                       
                        public function handleAppComplete(evt:Event):void
                        {
                                logArea.width = (evt.target as WindowedApplication).width - 80;
                                logArea.height = (evt.target as WindowedApplication).height - 80;
                                //testLC = new LocalConnection();
                                //testLC.addEventListener(StatusEvent.STATUS, handleStatus);
                                loggerLC = new Logger();
                                loggerLC.addEventListener(Logger.LOG_RECEIVED, handleLogUpdate);
                                loggerLC.log(loggerLC.domain);
                                //testLC.send("aditallmixer", "log", "Hi!");
                        }
                       
                        private function handleStatus(evt:StatusEvent):void
                        {
                                trace(evt.level);
                        }
                       
                        private function handleLogUpdate(evt:Event):void
                        {
                                loggerMessage = loggerLC.logMessage;
                        }
                ]]>
        </mx:Script>
        <mx:TextArea text="{loggerMessage}" id="logArea" />
</mx:WindowedApplication>

AS2:
Код:

....
if (!_lc)
                {
                        _lc = new LocalConnection();
                        _lc.send(_lcName, LOG, _settings);
                        _lc.onStatus = Delegate.create(Tracer, onLCStatusDelegate);
                        _lc.allowDomain("app#com.aditall.log.logger");
                }
....
_lc.send(_lcName, LOG, sender + JS_SEPARATOR + message);
....
static private function onLCStatusDelegate(infoObject:Object):Void
        {
                getURL(JS_TRACER + "[onStatus]" + JS_SEPARATOR + infoObject.level + " domain " + _lc.domain() + JS_CLOSE);
        }
....

последнее все время выводит: "[onStatus] => error domain localhost"

BlooDHounD 16.10.2008 20:33

попробуй дать название lcName так, что бы он начинался с "__".

wvxvw 16.10.2008 21:21

Пасиб, уже нашел, оказалось, в что LocalConnection.send() метод вызываемый у AIR ЛК объекта должен был начинаться с домейна этого объекта. Т.е. допустим, я хотел вызвать log("Привет"); тогда нужно было писать так:
Код:

mySendingLC.send("app#com.aditall.log.logger.1234567890:log", "Привет");
Там где 123456789 на самом деле должен быть гуид который генерится при создании АИР приложения, все остальное соответственно по схеме "app" - значит, что это АИР приложение com.aditall.log.logger - это путь к классу (т.е. класс называется Logger).

BlooDHounD 16.10.2008 21:32

если конекшен нэйм начинает с __, то доменная политика ограничиваться только allowDomain

wvxvw 16.10.2008 21:38

Хы, действительно так, пасиб. :)


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

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