Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Как реализовать триггер??? (http://www.flasher.ru/forum/showthread.php?t=74759)

zevvs 27.01.2006 15:30

Как реализовать триггер???
 
Дано: Flash, использующий часто и много callback-функции. Задача. Реализовать триггер, т.е. гарантировано дождаться результата функции. Тупой цикл не подходит - flash начинает ругаться, что клип собирается повесить машину. Помогите, а то грустно :(

MIX-er 27.01.2006 17:38

ля ля ля ... песенка повеселело?

берёшь переменную какую нить и меняешь её..))

MIX-er 27.01.2006 17:40

вобщем что именно ты подрузомеваешь под тригером???

silin 27.01.2006 18:35

и что ты подразумеваешь под callback-функциями ?
зы:хлебом не корми - дай реализовать какой-нибудь 'триггер' (в простонародье : переключатель, срабатывающий по условию..)

Antares 28.01.2006 00:20

Читать про EventDispatcher и event handlers

zevvs 28.01.2006 12:52

А реально кто-нибудь помочь может?
 
Цитата:

Сообщение от silin
и что ты подразумеваешь под callback-функциями ?
зы:хлебом не корми - дай реализовать какой-нибудь 'триггер' (в простонародье : переключатель, срабатывающий по условию..)

Я не нешел в MX 2004 вообще каких-либо примитивов синхронизации. И сильно подозреваю, что их там нет. Задача, по сути, - дождаться завершения дочернего потока вычислений из потока-родителя.

megasmall 28.01.2006 13:00

вместо цикла юзай onEnterFrame, либо читай про EventDispatcher

silin 28.01.2006 13:20

Цитата:

Задача, по сути, - дождаться завершения дочернего потока вычислений из потока-родителя.
не знаю как организваны эти 'потоки'.., обычная практика такая:
дочерний процесс при завершении вызывает соответствующий метод родителя или любого другого объекта, внесенного в массив слушателей (_listeners),
реализуется методами AsBroadcaster (встроенный объект) или класса EventDispatcher

zevvs 28.01.2006 13:29

Может так понятнее будет?
 
Класс, наследник mx.services.WebService
Код:

/**
 * Base Class For Web Service Page
 * (c) ...
 *
 */

import mx.services.WebService;

class WebServicePage
{
    /**
    * Current Session Id
    *
    */
    public static var SID;

    /**
    * Web Service URL
    *
    */
    private static var serviceURL; 

    /**
    * Inner CallBack Object For SOAP functions
    *
    */
    public var callBack:Object = new Object();
    /**
    * Link to "this" for callback object
    */
    public var service:WebServicePage;
       
        /**
        * Parent Movie Clip For New Page View
        *
        */
        var parentMovie:MovieClip;
   
    public function WebServicePage(_parentMovie) {

                parentMovie = _parentMovie;
                if (!serviceURL) {
                       
                        if (_root.wsdl) {
                               
                                serviceURL = _root.wsdl + '?wsdl';
                        } else {
                               
                                serviceURL = 'http://127.0.0.1/ig-php/server.php?wsdl';
                        }
                }
                this.prototype = new _global.mx.services.WebService(serviceURL);
        if (!WebServicePage.SID) {

Вот тут то и нужно гарантировано дождаться результата....
Код:

                       
                        // Init session trigger
            this.accessRemote('init');
        }
        this.service = this;
    }

    /**
    * Execute SOAP call
    *
    */
    public function accessRemote(methodName:String, obj:Object)
        {       
                       
        this.callBack = this.prototype[methodName](WebServicePage.SID, obj);
        this.callBack.resultFunction = this[methodName add '_onResult'];
        this.callBack.statusFunction = this[methodName add '_onFault'];
        this.callBack.service = this.service;

        if (!this.callBack.statusFunction) {
           
            this.callBack.statusFunction = this['default_onFault'];
        }

        this.callBack.onResult = function(result){
            this.resultFunction(result);
        }
        this.callBack.onFault = function(status){         
            this.statusFunction(status);
        }
    }
   
    /**
    * Store Session ID
    *
    */
    function init_onResult(data)
    {
        WebServicePage.SID = data;
        trace('SessionID = ' add data);   
    }
    function init_onFault(data)
    {
        WebServicePage.SID = 'fault';
        trace('Session fault');   
    }

    function default_onFault(code) {
       
        trace('WEBSERVICE FAULT!');
       
        for(var a in code) {
                       
            trace([a,code[a]]);
        }
    }
   
    /**
    * Unserialize SOAP results
    *
    */
    public function unserialize(data)
    {
        for (var aNode:XMLNode = data.firstChild; aNode != null;  aNode = aNode.nextSibling) {
           
            this[aNode.nodeName] = aNode.firstChild.nodeValue;
        }
    }
}

Использовать WebServiceConnector.trigger - нихрена не помогает!

silin 28.01.2006 13:51

ну так (если правильно понял):
вызов accessRemote ('init') должен быть не в конструкторе, а в методе объекта, отслеживающего(сетинтервалом,энтерфреймом) WebServicePage.SID..


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

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