Как создать RemoteService в чистом приложении AS3 - PullRequest
0 голосов
/ 06 апреля 2011

Я хочу сделать удаленный сервисный вызов из моего чистого приложения AS3.В случае Pure AS3 класс RemoteObject недоступен.Может ли кто-нибудь помочь мне с решением.

Спасибо, Судеш

Ответы [ 2 ]

1 голос
/ 06 апреля 2011

Вот класс, который я написал для этого. Я использую его в каждом проекте, поэтому мне больше не нужно об этом думать.

public class ServiceCaller extends EventDispatcher
{
    private static var s__instance:ServiceCaller;

    private var m__netConnection:NetConnection;

    public function ServiceCaller() 
    {
        var l__tempConnection:NetConnection = new NetConnection();
        l__tempConnection.objectEncoding = ObjectEncoding.AMF3;
        m__netConnection = new NetConnection();
        m__netConnection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
        m__netConnection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
        m__netConnection.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);       
    }

    public function connect(i__url:String):void
    {           
        m__netConnection.connect(Model.instance.config.gatewayUrl); 
    }

    private function netStatusHandler(i__event:NetStatusEvent):void 
    {
        trace(i__event.info.code);
    }

    private function statusHandler(i__object:Object):void
    {
        for (var l__key:String in i__object)
            trace(l__key, i__object[l__key]);
        CursorManager.removeBusyCursor();
    }

    private function securityErrorHandler(i__event:SecurityErrorEvent):void 
    {
        throw new Error("securityErrorHandler: " + i__event.toString());
    }

    private function ioErrorHandler(i__event:IOErrorEvent):void 
    {
        throw new Error("ioErrorHandler: " + i__event.toString());
    }

    public function callService(i__name:String, i__listener:Function, ...arguments):void
    {
        m__netConnection.call.apply(m__netConnection, [i__name, new Responder(i__listener, statusHandler)].concat(arguments));
    }


    static public function get instance():ServiceCaller 
    {           
        if (!s__instance)
            s__instance = new ServiceCaller();
        return s__instance; 
    }

    static public function set instance(value:ServiceCaller):void 
    {
        s__instance = value;
    }

}

Чтобы использовать его, сначала нужно позвонить один раз ServiceCaller.instance.connect("gatewayURL");, а затем каждый раз, когда вы хотите позвонить:

ServiceCaller.instance.callService("serviceName", onResult, param1, param2);

onResult - это функция обратного вызова, которая получает результат в качестве параметра. Вы можете добавить столько параметров, сколько нужно вашему сервису.

0 голосов
/ 06 апреля 2011

Просто используйте flash.net.NetConnection ... проверьте метод call (), а также класс flash.net.Responder.

...