Zurück   Flashforum > Flash und Server > Flash Remoting

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 01-10-2004, 14:01   #1 (permalink)
Neuer User
 
Benutzerbild von K-Grabowski
 
Registriert seit: Jan 2003
Ort: Arminia!!!! Bielefeld
Beiträge: 1.138
RemoteManager V2

denke mal hier ist er besser aufgehoben:

ActionScript:
  1. import mx.remoting.Connection;
  2. import mx.remoting.Service;
  3. import mx.rpc.RelayResponder;
  4. import mx.rpc.ResultEvent;
  5. import mx.rpc.FaultEvent;
  6. import mx.remoting.debug.NetDebug;
  7.  
  8. class RemoteManager {
  9.    
  10.     private var queue:Array;
  11.     private static var instance:RemoteManager = null;
  12.     private var executing:Boolean;
  13.     private var con:Connection;
  14.     private var services:Array;
  15.     private var user:String;
  16.     private var pass:String;
  17.     private var gatewayUrl:String;
  18.     private var connected:Boolean;
  19.     private var initialized:Boolean;
  20.  
  21.    
  22.     private function RemoteManager ()
  23.     {
  24.         NetDebug.initialize();
  25.        
  26.         services = new Array();
  27.         connected = false;
  28.         queue = new Array();
  29.         executing = false;
  30.     }
  31.    
  32.     public function initialize (pGatewayUrl:String, pUser:String, pPass:String)
  33.     {
  34.         if (initialized) return;
  35.        
  36.        
  37.        
  38.         gatewayUrl = pGatewayUrl;
  39.         user = pUser;
  40.         pass = pPass;
  41.        
  42.     }
  43.     private function addService (pService:String):Void
  44.     {
  45.        
  46.         if (getService(pService) != null) return;
  47.        
  48.         var o:Object = new Object();
  49.         o.name = pService;
  50.         o.responder = new RelayResponder(this,"onResult","onStatus");
  51.         o.service = new Service(null,null,pService,con, o.responder);
  52.        
  53.         services.push(o);
  54.        
  55.        
  56.     }
  57.     private function getService (pService:String):Object
  58.     {
  59.         var i:Number = services.length;
  60.        
  61.         while (--i > -1) {
  62.             if (services[i].name == pService) {
  63.                 return services[i];
  64.             }
  65.         }
  66.         return null;
  67.     }
  68.    
  69.     private function connect () :Void
  70.     {
  71.         if (connected) return;
  72.         con = new Connection();
  73.         con.connect(gatewayUrl);
  74.         con.setCredentials(user,pass);
  75.         connected = true;
  76.     }
  77.    
  78.     private function disconnect () :Void
  79.     {
  80.         if (!connected) return;
  81.         con.close();
  82.         connected = false;
  83.     }
  84.    
  85.     public static function getInstance ():RemoteManager {
  86.        
  87.         if (instance == null) {
  88.             instance = new RemoteManager();
  89.         }
  90.         return instance;
  91.        
  92.     }
  93.    
  94.     public function addRemoteCall(pService:String, pMethodName:String , pResponder:Object):Void {
  95.        
  96.         if (arguments.length < 3) {
  97.             trace ("invalid Number of Arguments");
  98.             return;
  99.         }
  100.        
  101.         if (!connected) connect();
  102.        
  103.         addService(pService);
  104.        
  105.         queue.push({s:getService(pService).service, f: pMethodName, r: pResponder, a:arguments.splice(3,arguments.length)});
  106.         remoteCall();
  107.  
  108.     }
  109.    
  110.     private function remoteCall ():Void {
  111.        
  112.         if ( executing)  return;
  113.        
  114.         if (queue.length == 0) {
  115.             disconnect();
  116.             return;
  117.         }
  118.        
  119.         executing = true;
  120.         var c:Object = queue[0];
  121.         c.s[c.f].apply( c.s , c.a );
  122.    
  123.     }
  124.    
  125.     private function informResponder (responderFunction:String, result:Object):Void
  126.     {
  127.         if (queue[0].r != null) {
  128.             queue[0].r[responderFunction](result);
  129.         }
  130.         queue.shift();
  131.         executing = false;
  132.         remoteCall();
  133.        
  134.     }
  135.    
  136.     public function onResult (re:ResultEvent):Void {
  137.        
  138.         informResponder("onResult", re.result);
  139.  
  140.     }
  141.    
  142.     public function onStatus (fe:FaultEvent):Void {
  143.         informResponder("onFault", fe.fault);
  144.  
  145.     }
  146.  
  147. }

vereinfacht die Remote-Calls und führt die Aufrufe hintereinander aus.

Anwendung:

ActionScript:
  1. rm = RemoteManager.getInstance();
  2. rm.initialize("http://www.deineur.de/gateway.php","deinUsername","deinPassword");
  3.  
  4. // Passwort und Username werden für geschützte Remote-Funktionen benötigt.
  5.  
  6. o = {};
  7. o.onResult = function (result) {
  8.     trace(result);
  9. }
  10. o.onError = function (fault) {
  11.     trace (fault.faultstring);
  12. }
  13.  
  14. rm.addRemoteCall("deinService","getName",o, "zackzack");
erste Arg ist der Service, zweiter der Funktionsname, dritter der Listener,
hinter dem dritten argument kommen die Arguments für die PHP-Funktion.

müssten noch nen paar dinge rein, z.b. das verhalten wenn der Service nicht existiert etc.
__________________
Wieviel hätte ich also für dieses Fahrzeug zu investieren???
K-Grabowski ist offline   Mit Zitat antworten
Alt 02-10-2004, 10:52   #2 (permalink)
-
 
Registriert seit: Jul 2003
Beiträge: 714
Ich habe bis jetzt noch nicht so die Zeit gefunden, einen eigenen zu schreiben.
Aber an die connect und disconnect - Methoden habe ich auch schon gedacht. Sonst super.

Was ich mir sonst noch so gedacht haben:
Wie wäre es wenn man mehrere Service-Methoden zu einer Gruppe zusammenfassen würde.

Beispiel: Gästebuch.
Da trägt man sich ein (service.write()) und dann werden alle Einträge gelesen (service.read()).

Das man das zusammenpack in z.B.:
rm.addRemoteCall("Gästebuch", "schreibeLese")
Und da intern service.write() & service.read() nacheinander ausgeführt werden.

Ich hoffe du verstehts meine Gedanken.
Bei meinem Beispiel (Gästenbuch) hält sich das noch in Grenzen.
Aber es gibt bestimmt Anwendugen wo man mehrere Service - Methoden immer und immer wieder hintereinander aufrufen muss.
Da wäre das doch eine Erleichterung.

cu messingfeld
messingfeld ist offline   Mit Zitat antworten
Alt 02-10-2004, 13:06   #3 (permalink)
Neuer User
 
Benutzerbild von K-Grabowski
 
Registriert seit: Jan 2003
Ort: Arminia!!!! Bielefeld
Beiträge: 1.138
wäre es nicht sinnvoller das dann individuell auszulagern?

ActionScript:
  1. function readAndWrite () {
  2. re.addRemoteCall("Gästebuch","write");
  3. re.addRemoteCall("Gästebuch","read");
  4. }
  5.  
  6. readAndWrite();
__________________
Wieviel hätte ich also für dieses Fahrzeug zu investieren???
K-Grabowski ist offline   Mit Zitat antworten
Alt 02-10-2004, 13:24   #4 (permalink)
-
 
Registriert seit: Jul 2003
Beiträge: 714
Wäre schon, war auch nur so ein Gedanke.

Aber trotzdem könnte man dann einen gemeinsamen Responder für diese Gruppe definieren.

Wo bei dir bisher für jede Service-Methode dieser einzeln wäre:
ActionScript:
  1. if (arguments.length < 3) {
  2.             trace ("invalid Number of Arguments");
  3.             return;
  4.         }

Da du für jede Methode eine "Ergebnisverarbeitung" verlangst. Das könnte man dann intern regeln. Und dann ein Ergebnis für die Gruppe zurückgeben.

Naja könnte dann alles ein wenig OverKill wirken.
Aber sind ja nur alle Gedankenblitze von mir.

Think different


cu messingfeld
messingfeld ist offline   Mit Zitat antworten
Alt 02-10-2004, 16:39   #5 (permalink)
Neuer User
 
Benutzerbild von K-Grabowski
 
Registriert seit: Jan 2003
Ort: Arminia!!!! Bielefeld
Beiträge: 1.138
ja gut, ich kann ja entweder arguments auf 2 beschränken, dann könnte man auch einen Remote-Call ohne Responder machen, oder ich kann ja einfach null übergeben.
__________________
Wieviel hätte ich also für dieses Fahrzeug zu investieren???
K-Grabowski ist offline   Mit Zitat antworten
Alt 02-10-2004, 17:12   #6 (permalink)
-
 
Registriert seit: Jul 2003
Beiträge: 714
Zitat:
Zitat von K-Grabowski
ja gut, ich kann ja entweder arguments auf 2 beschränken, dann könnte man auch einen Remote-Call ohne Responder machen, oder ich kann ja einfach null übergeben.
Da bleibt dann das Prob das man an einer Service-Methode den Responder wieder dran "hängen" muss.

Ich habe mehr an sowas oder ähnliches gedacht.

ActionScript:
  1. // Think different - Beispiel ;-)
  2. rm.createRemoteGroup("Service", "Gästebuch", "Responder");
  3. rm.addToRemoteGroup("Gästebuch", "write");
  4. rm.addToRemoteGroup("Gästebuch", "read");
  5. rm.callRemoteGroup("Gästebuch");

Ich werde mich wohl mal nächste Woche dran setzen und auch mal was versuchen.
Aber vielleicht werde ich dann merken das ich auf der falschen Pfärte bin.

Auf jeden Fall macht es Spaß das hier der Remoting (besser AmfPHP) - Bereich wächst.

cu messingfeld

Geändert von messingfeld (02-10-2004 um 17:13 Uhr)
messingfeld ist offline   Mit Zitat antworten
Alt 05-10-2004, 09:56   #7 (permalink)
Neuer User
 
Benutzerbild von K-Grabowski
 
Registriert seit: Jan 2003
Ort: Arminia!!!! Bielefeld
Beiträge: 1.138
jau, musst mal zeigen wie du es gemacht hast, hab meinen auch noch einen bisschen umgebaut, ist aber noch nicht ganz fertig, muss noch optimiert werden. Aber hab zurzeit kaum zeit dafür.
__________________
Wieviel hätte ich also für dieses Fahrzeug zu investieren???
K-Grabowski ist offline   Mit Zitat antworten
Alt 05-10-2004, 11:40   #8 (permalink)
Neuer User
 
Benutzerbild von K-Grabowski
 
Registriert seit: Jan 2003
Ort: Arminia!!!! Bielefeld
Beiträge: 1.138
V2.01

habs jetzt auch in zwei Klassen gesplittet.

RemoteManager Klasse
ActionScript:
  1. import mx.remoting.Connection;
  2. import mx.remoting.Service;
  3. import mx.rpc.RelayResponder;
  4. import mx.rpc.ResultEvent;
  5. import mx.rpc.FaultEvent;
  6. import mx.remoting.debug.NetDebug;
  7. import de.hh.remote.*;
  8.  
  9.  
  10. class de.hh.remote.RemoteManager {
  11.    
  12.     private var queue:Array;
  13.     private static var instance:RemoteManager = null;
  14.     private var executing:Boolean;
  15.     private var con:Connection;
  16.     private var services:Array;
  17.     private var user:String;
  18.     private var pass:String;
  19.     private var gatewayUrl:String;
  20.     private var connected:Boolean;
  21.     private var initialized:Boolean;
  22.     private var responder:RelayResponder;
  23.  
  24.    
  25.     private function RemoteManager ()
  26.     {
  27.         NetDebug.initialize();
  28.        
  29.         services = new Array();
  30.         connected = false;
  31.         queue = new Array();
  32.         executing = false;
  33.         responder = new RelayResponder(this,"onResult","onFault");
  34.     }
  35.    
  36.     public function setGatewayUrl (pGatewayUrl:String):Void
  37.     {
  38.         gatewayUrl = pGatewayUrl;
  39.     }
  40.    
  41.     public function removeCredentials ():Void
  42.     {
  43.         user = pass = null;
  44.     }
  45.    
  46.     public function setCredentials ( pUser:String , pPass:String ):Void
  47.     {
  48.         user = pUser;
  49.         pass = pPass;
  50.     }
  51.    
  52.     private function addService (pService:String):Void
  53.     {
  54.        
  55.         removeService(pService);
  56.        
  57.         var s:Service = new Service(null,null,pService,con, responder);
  58.        
  59.         services.push(s);
  60.        
  61.        
  62.     }
  63.    
  64.     private function removeService (pService:String):Void
  65.     {
  66.         var i:Number = services.length;
  67.        
  68.         while (--i > -1) {
  69.             if (services[i].name == pService) {
  70.                 services.splice(i,1);
  71.             }
  72.         }
  73.        
  74.     }
  75.        
  76.     private function getService (pService:String):Service
  77.     {
  78.         var i:Number = services.length;
  79.        
  80.         while (--i > -1) {
  81.             if (services[i].name == pService) {
  82.                 return services[i];
  83.             }
  84.         }
  85.         return null;
  86.     }
  87.    
  88.     private function connect () :Void
  89.     {
  90.         if (connected) return;
  91.         con = new Connection();
  92.         if (!con.connect(gatewayUrl)) trace ("can't connect to the gateway, or gateway isn't set");
  93.         if (user != null && pass != null) {
  94.             con.setCredentials(user,pass);
  95.         }
  96.         connected = true;
  97.     }
  98.    
  99.     private function disconnect () :Void
  100.     {
  101.         if (!connected) return;
  102.         con.close();
  103.         connected = false;
  104.     }
  105.    
  106.     public static function getInstance ():RemoteManager {
  107.        
  108.         if (instance == null) {
  109.             instance = new RemoteManager();
  110.         }
  111.         return instance;
  112.        
  113.     }
  114.    
  115.     public function addCall(pService:String, pMethodName:String , pResponder:RelayResponder):Void
  116.     {
  117.         if (!connected) connect();
  118.        
  119.         addService(pService);
  120.        
  121.         queue.push( new RemoteCall( getService(pService), pMethodName, pResponder, arguments.splice(3,arguments.length) ) );
  122.         doCall();
  123.  
  124.     }
  125.    
  126.     private function doCall ():Void {
  127.        
  128.         if ( executing)  return;
  129.        
  130.         if (queue.length == 0) {
  131.             disconnect();
  132.             return;
  133.         }
  134.         executing = true;
  135.         var c:RemoteCall = queue[0];
  136.         c.getService()[ c.getMethod() ].apply( c.getService() , c.getArgs() );
  137.    
  138.     }
  139.    
  140.     private function informResponder (responderFunction:String, result:Object):Void
  141.     {
  142.         if (queue[0].getResponder() != null)
  143.         {
  144.             queue[0].getResponder()[responderFunction](result);
  145.         }
  146.         queue.shift();
  147.         executing = false;
  148.         doCall();
  149.        
  150.     }
  151.    
  152.     public function onResult (re:ResultEvent):Void
  153.     {
  154.         informResponder("onResult", re);
  155.  
  156.     }
  157.    
  158.     public function onFault (fe:FaultEvent):Void
  159.     {
  160.  
  161.         informResponder("onFault", fe);
  162.  
  163.     }
  164.  
  165. }

RemoteCall Klasse

ActionScript:
  1. import mx.remoting.Service;
  2. import mx.rpc.*;
  3.  
  4. class de.hh.remote.RemoteCall
  5. {
  6.    
  7.     private var method:String;
  8.     private var args:Array;
  9.     private var responder:RelayResponder;
  10.     private var service:Service;
  11.    
  12.     public function RemoteCall (p_service:Service, p_method:String, p_responder:RelayResponder, p_args:Array)
  13.     {
  14.         service = p_service;
  15.         method = p_method;
  16.         responder = p_responder;
  17.         args = p_args;
  18.     }
  19.    
  20.     public function getMethod ():String
  21.     {
  22.         return method;
  23.     }
  24.    
  25.     public function getArgs ():Array
  26.     {
  27.         return args;
  28.     }
  29.    
  30.     public function getResponder ():RelayResponder
  31.     {
  32.         return responder;
  33.     }
  34.    
  35.     public function getService ():Service
  36.     {
  37.         return service;
  38.     }
  39.    
  40. }

Anwendung:

ActionScript:
  1. import de.hh.remote.*;
  2. import mx.rpc.*;
  3.  
  4. var rm:RemoteManager = RemoteManager.getInstance();
  5. rm.setGatewayUrl("http://www.meineDomain.de/gateway.php");
  6. rm.setCredentials("userName","pass"); // wird nur benötigt falls man rechte braucht
  7.  
  8.  
  9.  
  10. var o:Object = {};
  11. o.onResult = function (e:ResultEvent) {
  12.     trace(e.result.items[0].P_Headline);
  13. }
  14. o.onFault = function (e:FaultEvent) {
  15.     trace (e.fault.faultstring);
  16.     trace (e.fault.description);
  17.     trace (e.fault.faultcode);
  18. }
  19.  
  20. rm.addCall("meineServiceKlasse","meineMethode",new RelayResponder(o,"onResult","onFault"), "argument1", "argument2");
  21. rm.addCall("meineServiceKlasse","meineMethode2",null, "argument1"); // falls kein Responder nötig
  22. rm.addCall("meineServiceKlasse","meineMethode3",new RelayResponder(o,"onResult","onFault"), "argument1", "argument2");
__________________
Wieviel hätte ich also für dieses Fahrzeug zu investieren???

Geändert von K-Grabowski (05-10-2004 um 12:42 Uhr)
K-Grabowski ist offline   Mit Zitat antworten
Alt 05-10-2004, 12:01   #9 (permalink)
Neuer User
 
Registriert seit: Nov 2001
Ort: berlin
Beiträge: 66
hy

import de.hh.remote.*; ??

ich habe das jetzt so verstanden:
ich lege zwei scripte an: einmal den RemoteManager.as und RemoteCall.as

lege dann im Ordner flashMX/de/firstRun/classes/
die Ordner de/hh/remote
und lege dort die 2 Scripte rein?

ich bekomm jedenfalls den fehler: die klasse konnte nicht geladen werden.
was mach ich falsch??
patte04 ist offline   Mit Zitat antworten
Alt 05-10-2004, 12:24   #10 (permalink)
Neuer User
 
Benutzerbild von K-Grabowski
 
Registriert seit: Jan 2003
Ort: Arminia!!!! Bielefeld
Beiträge: 1.138
ich hab die in nem eigenen klassen-order mit der struktur
de/hh/remote

müsste zwar eigentlich auch gehen wenn du die in den firstrun - classes order packst, aber sonst versuch folgendes:

mach dir nen order und nenne den classes oder so.
dadrinne machste nen de ordner, worein du nen hh order machst, darein nen remote ordner und darein legste die beiden klassen.

in Flash-MX-2004 setzt du unter bearbeiten/voreinstellungen/actionscript/actionscript2 einstellungen einen zusätzlichen klassenpfad auf diesen classes ordner. dann sollte es gehen.
__________________
Wieviel hätte ich also für dieses Fahrzeug zu investieren???
K-Grabowski ist offline   Mit Zitat antworten
Alt 05-10-2004, 13:09   #11 (permalink)
Neuer User
 
Registriert seit: Nov 2001
Ort: berlin
Beiträge: 66
yessss
:-) funzt wunderbar. ich weiss jetzt auch warum das mit den ordnern bei mir nicht ging. aber nicht lachen:

man sollte flash einfach nochmal neu starten, so einfach kann es sein.

vielen dank für deine hilfe, und ich finde den RemoteManager perfekt für meine Zwecke. danke fürs freistellen.


vielleicht bekommt man das script von @messingfeld auch noch ans laufen.


thanx
patte
patte04 ist offline   Mit Zitat antworten
Alt 19-11-2004, 09:37   #12 (permalink)
////////////////
 
Benutzerbild von fliponaut
 
Registriert seit: Jun 2004
Ort: berlin
Beiträge: 44
moin moin ...
ich benutze nun ja auch schon laengere zeit den remoteManager und eigentlich gab es noch keine probleme
heute wollte ich die ganze sache dann jedoch mal im "netconnection debugger" beobachten ... dabei sind mir ein paar sachen aufgefallen.

1) es kommt immer wieder die gleiche "warning"
PHP-Code:
number4
severity
"warning"
Trace"createGatewayConnection - gatewayUrl is invalid"
who"NetServices" 
kennt die jemand - oder weiss, was das zu sagen hat? es funktioniert ja alles, aber wundern tut mich das schon.

2) zudem disconnected sich der remotemanager ja immer, wenn keine calls mehr in der queue stehen. beim ersten mal laueft dann ja auch alles toll (im netconnection debugger). nachdem aber einmal das "close" aufgerufen wurde, zeigt der debugger nur noch warnings an, leider keine calls/results mehr!?

vielleicht koennt ihr mir da ja ein bisschen weiterhelfen?!

gruss, philipp
fliponaut ist offline   Mit Zitat antworten
Alt 23-11-2004, 10:38   #13 (permalink)
Neuer User
 
Benutzerbild von greta_lee
 
Registriert seit: Nov 2003
Beiträge: 13
Hallo K-Grabowski,

hast Du mal getestet, ob folgender Code wirklich funktioniert?

...
con = new Connection();
if (!con.connect(gatewayUrl)) trace ("can't connect to the gateway, or gateway isn't set");
...


Bei mir gibt die Funktion connect() immer ein true zurück, auch wenn die Gateway-Url falsch ist. Es gibt erst eine Fehlermeldung, wenn zum ersten mal ein Call gemacht wird. Der geht aber dann leider nicht in die _status-Methode, sondern gibt nur einen Fehler in der Console aus.

Es würde mir sehr helfen, wenn Du dazu einen Rat hättest.
greta_lee ist offline   Mit Zitat antworten
Alt 23-11-2004, 11:01   #14 (permalink)
Neuer User
 
Benutzerbild von K-Grabowski
 
Registriert seit: Jan 2003
Ort: Arminia!!!! Bielefeld
Beiträge: 1.138
ne hatte es ehrlich gesagt nicht getestet und funzt auch nicht, es wird lediglich geprüft ob der gatewayurl-string ein "http:" oder ein "https:" enthält.
Zitat:
connect
connect( url: String) : Boolean


Definiert die Flash Remoting-URL, die von Flash Remoting-Servicefunktionsaufrufen verwendet wird. Diese Methode kommuniziert nicht mit dem Server. Wenn Flash Remoting einen Servicefunktionsaufruf ausführt, wird eine HTTP- oder HTTPS-Verbindung zu den Anwendungsservern hergestellt. Diese Verbindung bleibt nur solange bestehen, bis die Ergebnisse des Aufrufs an die Flash-Anwendung zurückgegeben werden. Hinweis: Wenn Sie eine Gateway-Verbindung herstellen und auf Remote-Servicefunktionen zugreifen möchten, sollten Sie das Serviceobjekt verwenden.
Parameter
url: String - Die Flash Remoting-URL [Protokoll://] Host [:Port] /Anwendungsname. Der Wert für Anwendungsname hängt von dem Gateway-Typ und der Flash Remoting-Konfiguration ab. Weitere Informationen finden Sie unter Die Flash Remoting Gateway-Verbindung herstellen. Wenn Sie Protokoll:// auslassen, geht Flash davon aus, dass Sie über das nicht sichere HTTP-Protokoll eine Verbindung zu einem Anwendungsserver herstellen möchten. Der zweite akzeptable Wert für Protokoll lautet https. Die folgenden URLs sind beispielsweise korrekt formatiert:

http://localhost:8500/flashservices/gateway
https://www.myCompany.com/myMainDire...moting/gateway



Zurückgegebene Daten
Der Boolesche Wert true, wenn der Protokollteil der URL (http: oder https gültig ist, anderenfalls false.
hab jetzt auf die schnelle auch keine Lösung parat.
__________________
Wieviel hätte ich also für dieses Fahrzeug zu investieren???
K-Grabowski ist offline   Mit Zitat antworten
Alt 23-11-2004, 11:29   #15 (permalink)
Neuer User
 
Benutzerbild von greta_lee
 
Registriert seit: Nov 2003
Beiträge: 13
Vielleicht fällt uns noch eine Lösung ein?! Es kann einfach nicht sein, dass man dem User eine Anwendung zur Verfügung stellt, die ihm nicht sagt, wenn z.B. kein Netz da ist. Denn dieser Fehler läßt sich einfach nicht abfangen und demnach kann man keine Fehlermeldung ausgeben.

Worin steht eigentlich die Doku, die zu zitierst? Ich suche schon so lange nach guter Doku. Meistens suche ich mir alles aus dem Netz zusammen. Einiges steht in den livedocs von Macromedia. Aber nur in englisch und nicht sehr ausführlich.
greta_lee 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:15 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele