Zurück   Flashforum > Flash > Stuff

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 26-02-2005, 19:59   #1 (permalink)
God made me funky..
 
Registriert seit: Apr 2003
Ort: Bremen
Beiträge: 1.067
[STUFF] AMFConnector

ziemlich simpel gestrickt und aus was größerem rausgerissen,
aber wenn mal wer braucht oder als Idee...

Ich benutz den mit AMFPHP, Als Serverseitige Rückgabe wird folgendes erwartet:

PHP-Code:
//$requestId hat immer der letzte Parameter zu sein, wird vom Connector transparent angehängt...
function aRemoteMethod$requestId ) {
    return array { 
        
'data' => 'WAT AUCH IMMER',
        
'requestId' => $requestId
    
};

ActionScript:
  1. import mx.remoting.Service;
  2. import mx.rpc.FaultEvent;
  3. import mx.remoting.PendingCall;
  4. import mx.rpc.ResultEvent;
  5. import mx.rpc.RelayResponder;
  6. import de.ewerk.tripleplay.Config;
  7.  
  8. class net.e2e4.AMFConnector {
  9.    
  10.     private var service:Service;
  11.     private var requestCallbacks:Object;
  12.     private var requestId:Number;
  13.    
  14.     public  function AMFConnector() {
  15.         this._initService();
  16.         this.requestCallbacks = new Object();
  17.         this.requestId = 0;
  18.     }
  19.    
  20.     private function _initService():Void {
  21.         this.service = new Service(
  22.             Config.SERVICE_GATEWAY,
  23.             null,
  24.             Config.DATA_SOURCE_NAME,
  25.           null,
  26.            null
  27.         );
  28.     }
  29.    
  30.     private function _request( method:String, remoteArgs:Object, cb:Function, passbacks:Object ):Void {
  31.         var requestId:Number = this._generateRequestId();
  32.         if( remoteArgs == null ) {
  33.             remoteArgs = new Array();
  34.         } else if( !(remoteArgs instanceof Array ) ) {
  35.             remoteArgs = new Array( remoteArgs );
  36.         }
  37.         remoteArgs.push( requestId );
  38.         var pc:PendingCall = this.service[ method ].apply(
  39.             null,
  40.             remoteArgs
  41.         );
  42.         pc.responder = new RelayResponder( this, "onResult", "onError");
  43.         this.requestCallbacks[ requestId ] = {
  44.             func: cb,
  45.             passedBackParams : passbacks
  46.         };
  47.     }
  48.    
  49.     private function onResult( e:ResultEvent ):Void {
  50.         e.result.passback = this.requestCallbacks[ e.result.requestId ].passedBackParams;
  51.         this.requestCallbacks[ e.result.requestId ].func( e.result );
  52.         delete this.requestCallbacks[ e.result.requestId ];
  53.     }
  54.    
  55.     private function onError( e:FaultEvent ):Void {
  56.         trace( 'AMFConnector reports an Error:' );
  57.         trace( e.fault.faultstring );
  58.     }
  59.            
  60.     private function _generateRequestId():Number {
  61.         this.requestId = ( this.requestId > 30000 ) ? 0 : ++this.requestId;
  62.         return this.requestId;
  63.     }
  64.            
  65. }

Beispiel DataAccessor

ActionScript:
  1. import net.e2e4.AMFConnector
  2.  
  3. class SimpleDataAcccesExample extends AMFConnector {
  4.    
  5.     private static var _instance:SimpleDataAcccessExample;
  6.  
  7.     private function SimpleDataAcccessExample() {
  8.         super();
  9.     }
  10.    
  11.     public static function getInstance():SimpleDataAccessExample {
  12.         if( !_instance ) {
  13.             _instance = newSimpleDataAcccesExample();
  14.         }
  15.         return _instance;
  16.     }
  17.    
  18.     public function requestData( callback:Function, callbackArgs:Object ) {
  19.         this._request(
  20.             'aRemoteMethod',
  21.             [
  22.                 1,
  23.                 2,
  24.                 3
  25.             ],
  26.             callback,
  27.             callbackArgs
  28.         );
  29.     }
  30. }

und den benutzen wir jetzt auch mal
ActionScript:
  1. import SimpleDataAcccessExample;
  2. import mx.utils.Delegate;
  3.  
  4. class Foo {
  5.    
  6.     public Foo();
  7.    
  8.     public function doSomethingRemote() {
  9.         SimpleDataAccessExample.requestData(
  10.             Delegate.create( this, _somethingRemoteCallback ),
  11.             'Ich werde wieder an den Callback zurückübergeben'
  12.         );
  13.     }
  14.    
  15.     private function _somethingRemoteCallback( e:Object ) {
  16.                 trace( e.data );
  17.         trace( e.passback );
  18.     }
  19. }

Beispielcode ist untested, sollte aber klar machen wie es geht...
__________________
Kunst ist in erster Linie eine Frage der Form und nicht des Inhalts
Paul Rand

Geändert von e2e4 (26-02-2005 um 20:01 Uhr)
e2e4 ist offline   Mit Zitat antworten
Alt 28-02-2005, 07:12   #2 (permalink)
flachzange
 
Benutzerbild von elias
 
Registriert seit: Jun 2003
Ort: berlin
Beiträge: 3.932
an der stelle würde mich mal interessieren was für ein nutzen die flash remoting
klassen haben. können die irgendwas tolles?
__________________
elias ist offline   Mit Zitat antworten
Alt 28-02-2005, 07:27   #3 (permalink)
God made me funky..
 
Registriert seit: Apr 2003
Ort: Bremen
Beiträge: 1.067
Kann ich dir ehrlicherweise nicht sagen. ich brauchte einfach eine schnelle Lösung(schnell wie in schnell einsetzbar) für eine Remoteanbindung und da ich mit AS2 unterwegs bin, hab ich die halt genommen, da sie ja ihren Job machen...
__________________
Kunst ist in erster Linie eine Frage der Form und nicht des Inhalts
Paul Rand
e2e4 ist offline   Mit Zitat antworten
Alt 28-02-2005, 07:52   #4 (permalink)
flachzange
 
Benutzerbild von elias
 
Registriert seit: Jun 2003
Ort: berlin
Beiträge: 3.932
du kannst NetConnection benutzen, das spart schonmal ca 9kb platz.
kann es sein das die remoting klassen ihre stärken erst mit den flash
komponenten ausspielen?
__________________
elias ist offline   Mit Zitat antworten
Alt 28-02-2005, 09:56   #5 (permalink)
www.kruesch.de
 
Benutzerbild von flory
 
Registriert seit: Feb 2002
Beiträge: 1.057
ja, dafür sind sie gedacht.

Florian
__________________
www.planet-xaml.net
flory ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 19:17 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele