Zurück   Flashforum > Flash und Server > Flash Remoting

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 05-10-2006, 19:57   #1 (permalink)
Neuer User
 
Registriert seit: Sep 2006
Beiträge: 34
falsche Rückgabewerte aus Funktion

Hallo zusammen !

Folgendes "Problem" mit main.asc:

PHP-Code:
application.onConnect = function(clientObjticket)
{

        
clientObj.validUsr false;
        
clientObj.ticket ticket;

        
clientObj.validUsr =  service.isValidUser(clientObj.ticket);

trace("validUser ? " clientObj.validUsr);

if (
clientObj.validUsr) {
  
trace("Connection accepted !");
  
application.acceptConnection(clientObj);
  
trace("SESSION: " clientObj.ticket " accepted.");
}else{
  
trace("Connection rejected !");
//  application.rejectConnection(clientObj);
//  service.deactiateUser(clientObj.ticket);
//  trace("SESSION: " + clientObj.ticket + " rejected.");
}


Beim Connect eines Clients wird die Funktion "service.isValidUser(clientObj.ticket)" via AMFPHP aufgerufen. Die zuvor definierte Variable (clientObj.validUsr) wird am Anfang ja auf false gesetzt. Bereits beim trace erhält sie aber den Wert true.

Wie aus dem Log zu sehen ist passiert das aber viel zu früh, da der Rückgabewert nicht true, sondern "HUHU" ist. Somit scheitert auch die definierte if Abfrage.

Muss man bei remote Abfragen irgend etwas anders machen oder kann / muss man gar einen (sleep) timer definieren, um die richtigen Werte zu erhalten ?

Hier das log:
Code:
2006-10-05      20:42:30        8852    (s)2641173      validUser ? true        -
2006-10-05      20:42:30        8852    (s)2641173      Connection accepted !   -
2006-10-05      20:42:30        8852    (s)2641173      SESSION: 7907063a0225b091349749548c13522c accepted.     -
2006-10-05      20:42:30        8852    (s)2641173      NetServices info 1: isValidUser_Result was received from server: HUHU-
2006-10-05      20:42:30        8852    (s)2641173      who[NetServices] severity[info] number[1] meesage[isValidUser_Result was received from server: HUHU]  -
Danke und Gruß
Stefan
UnknownX ist offline   Mit Zitat antworten
Alt 05-10-2006, 20:55   #2 (permalink)
Supermassive
 
Benutzerbild von elysian
 
Registriert seit: Aug 2004
Ort: Frankfurt, Bornheim
Beiträge: 861
xervus,

wie das immer bei rpc ist, passieren die serviceaufrufe asynchron. in der zeile

clientObj.validUsr = service.isValidUser(clientObj.ticket);

rufst du eine remote funktion und in der nächsten zeile versuchst du bereits, mit dem ergebnis zu arbeiten. das ist zu diesem zeitpunkt aber noch gar nicht da! für sowas verwendet man result- und fault-handler, die als prefix wieder den namen der remotefunktion haben: isValidUser_Result und isValidUser_Fault... zumindest in der coldfusion-welt.

wie's mit php im detail funktioniert, kann ich aber nicht sagen. aber vielleicht hilft das ja schon...

cheers, thomas
__________________
Personal » amenity*blogging » elysian.de » Flexpertise - Enterprise Flex Collaboration
Networks » Xing » ColdFusion Community
Everything Cairngorm »
cairngormdocs.org
elysian ist offline   Mit Zitat antworten
Alt 05-10-2006, 21:04   #3 (permalink)
Neuer User
 
Registriert seit: Sep 2006
Beiträge: 34
Hallo und Danke für den Ansatz.

Wie arbeitet man denn in der ColdFusion Welt damit ?

Im Prinzip geht es ja hier nicht um PHP, sondern um reines Actionscript.

Verstehe ich das so, dass der Zusatz _Result bewirken soll, dass zunächst das Ergebnis abgewartet wird ?

Kannst Du mir mal ein Beispiel schicke, wo Du sowas verbaut hast ?

Danke und Gruß
Stefan
UnknownX ist offline   Mit Zitat antworten
Alt 05-10-2006, 21:20   #4 (permalink)
Neuer User
 
Registriert seit: Sep 2006
Beiträge: 34
Hallo nochmal !

Danke - ich habe es hin bekommen !!!

Viele Grüße
Stefan
UnknownX ist offline   Mit Zitat antworten
Alt 05-10-2006, 21:39   #5 (permalink)
Neuer User
 
Registriert seit: Sep 2006
Beiträge: 34
Hallo nochmal ich ;-)

Sagen wir es mal so ... das mit dem "isValidUser_Result" habe ich verstanden.

An dieser Stelle fehlen mir dann natürlich die dem
application.onConnect
übergebenen Werte der Variable clientObj :-(

Wie bekomme ich die denn noch dazu ? Parametisieren kann man den Aufruf von
isValidUser_Result(result)
an dieser Stelle ja wohl kaum noch ... und das Array clientObj erst zu PHP zu senden um es dann im result zurück zu holen wäre ja wohl auch nicht die beste Lösung ?!

Danke schön !!!
UnknownX ist offline   Mit Zitat antworten
Alt 06-10-2006, 00:18   #6 (permalink)
Supermassive
 
Benutzerbild von elysian
 
Registriert seit: Aug 2004
Ort: Frankfurt, Bornheim
Beiträge: 861
Zitat:
Zitat von UnknownX Beitrag anzeigen
Hallo nochmal ich ;-)
Sagen wir es mal so ... das mit dem "isValidUser_Result" habe ich verstanden.
_Result und _Fault (oder _Status, weiss nicht mehr genau) werden beim eintreffen eines results an den namen der aufgerufenen methode angehängt und sind die standard-handler für die net-connection (via flashremoting)
Zitat:
Zitat von UnknownX Beitrag anzeigen
An dieser Stelle fehlen mir dann natürlich die dem
application.onConnect
übergebenen Werte der Variable clientObj :-(

Wie bekomme ich die denn noch dazu ? Parametisieren kann man den Aufruf von isValidUser_Result(result) an dieser Stelle ja wohl kaum noch ... und das Array clientObj erst zu PHP zu senden um es dann im result zurück zu holen wäre ja wohl auch nicht die beste Lösung ?!
...richtig, du musst die werte, die du persistent halten willst, über den aufruf hinweg sozusagen cachen, damit du beim abarbeiten des results weisst, auf basis welcher daten das geschehen ist.

die alternative wäre, die parameter (maximal ein set an ids, kein array oder so...) unverändert wieder mitsamt result zurückzugeben.

solange man sich in der klassischen client-pul-situation befindet, führt an dieser oder einer ähnlichen lösung kein weg vorbei. auch deshalb heisst es "asynchron"

cheers, thomas
__________________
Personal » amenity*blogging » elysian.de » Flexpertise - Enterprise Flex Collaboration
Networks » Xing » ColdFusion Community
Everything Cairngorm »
cairngormdocs.org

Geändert von elysian (06-10-2006 um 23:30 Uhr)
elysian ist offline   Mit Zitat antworten
Alt 06-10-2006, 18:51   #7 (permalink)
Neuer User
 
Registriert seit: Sep 2006
Beiträge: 34
Hallo zurück !

Ich habe es Gestern erfolgreich ans Laufen bekommen - ob der Weg sagen wir mal "gut" ist stelle ich hier zur Diskussion - jedenfalls funktioniert er nach ersten Tests:

main.asc
Code:
load("netservices.asc");
function isValidUser_Result (result) {
  trace("wird ausgefuehrt :" + result);

  switch(result) {
    case true:
      trace("Connection accepted !");
      application.acceptConnection(_global.clientObj);
      trace("SESSION accepted.");
      break;
    default:
      trace("Connection rejected !");
      application.rejectConnection(_global.clientObj);
      service.deactiateUser(_global.clientObj.ticket);
      trace("SESSION " + _global.clientObj.ticket + " rejected.");
  }
}

// define Remote Connections
     NetServices.setDefaultGatewayUrl("http://192.168.110.8/gateway.php");
     var gatewayConnection = NetServices.createGatewayConnection();
     var service = gatewayConnection.getService("UserHandling", this);

application.onAppStart = function ()
{
        trace(' -------------------------------- ');
        trace('application started: ' + this.name);
        trace('running version    : 06.10.05.16');
        trace(' -------------------------------- ');
}


application.onConnect = function(clientObj, ticket)
{
// Define the named result function getUserList_Result(  ) to handle the result from
// the service function getUserList(  ).

        _global.clientObj = clientObj;
        clientObj.validUsr = false;
        clientObj.ticket = ticket;

        service.isValidUser(clientObj.ticket);
}
Durch die Definition von clientObj als globalen Wert stehen diese Werte nunmehr auch in der _Result Funktion zur Verfügung.

Auch klappt die Unterscheidung mit true und false. Die Abfrage false an sich habe ich als "default" Regel der Switch Funktion definiert, da mich eigentlich ja nur ein definitives "true" interessiert ...

Verbesserungsvorschläge ?

Danke noch mal !!!

Viele Grüße
Stefan
UnknownX 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 03:08 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele