PDA

Volledige versie bekijken : DOS-achtige pathparser & SimpleService


Mediamonkey
%Europe/Berlin %834 %2005, 21:00
Hey lui, JaFF/Tommyfied en Dauntless hebben 't voortouw al genomen dus ik volg.
Ik heb even een vluggertje die ik vanmorgen in elkaar knalde.

Ik werk momenteel aan een project voor de politieacademie waarin veel met webservices wordt gewerkt. Wat jammer is, is dat een WebService een hard pad nodig heeft. Je kunt dus, wanneer je weet dat de swf een dir hoger ligt, niet verwijzen naar "../webservices/system.asmx?wsdl". Het wordt helemaal lastig als die swf op 3 verschillende servers moet werken: http://politieacademie, http://localhost en http://andereserver maar die wel allemaal dezelfde directorystructuur hebben. Ik bedacht een scriptje om de swf's eigen url te gebruiken en dat pad aan te passen met de string die je invoert. Wat ie uitpoept is dan een absoluut pad, bruikbaar voor webservices.

Check dit:

// usage: var WSDLURL = getPath("../webservices/system.asmx?wsdl");
function getPath(path:String):String {
var arr:Array = _root._url.split("/");
arr.pop(); // remove own file
var splitpath:Array = path.split("../");
var timesback:Number = splitpath.length-1;
for (var i=0; i<timesback; i++) arr.pop(); // got the path!
var file:String = splitpath.pop(); // get rest of the path without ../
arr.push(file);
return arr.join("/");
}

Je ziet dat ie nogal rommelig in elkaar zit, maar ik had dan ook niet veel tijd om de applicaties op te leveren :p Rip 'em to pieces, guys! Jullie kunnen 'm vast verbeteren.

Nou okee, nog eentje dan.. Omdat ik in een gulle bui ben :)
Omdat m'n applicaties nogal groot begonnen te worden door al die componenten en ik amper zicht had op wat er zich achter de schermen van m'n swf afspeelde (controlfreak, ikke..) heb ik een SimpleService class geschreven die op zich hetzelfde doet als de WebServiceConnector, maar dan in minder regels. Je kunt mooi het vorige stukje code gebruiken om de WSDLURL in te vullen. Daar was ie immers voor bedoelt.

/* SimpleService class
* @author: Bart Wttewaall, Mediamonkey.nl
* @date: 23-07-2005
*
* Note: Don't forget to include the WebServiceClasses from:
* Window > Other Panels > Common Libraries > Classes
*/

import mx.events.EventDispatcher;
import mx.services.WebService;
import mx.utils.Delegate;

class SimpleService {

private var _params:Array;
private var service:WebService;
private var callback:Object;
private var intervalID:Number;

public var WSDLURL:String;
public var method:String;

public var addEventListener:Function;
public var removeEventListener:Function;
public var dispatchEvent:Function;
public var dispatchQueue:Function;

public function SimpleService(WSDLURL:String, method:String, parameters:Array) {
EventDispatcher.initialize(this);

this.WSDLURL = WSDLURL;
this.method = method;
params = parameters;

service = new WebService(WSDLURL);
}

public function trigger() {
callback = service[method].apply(service, params);
callback.onResult = Delegate.create(this, onResult);
callback.onFault = Delegate.create(this, onFault);
intervalID = setInterval(onStatus, 5000);
}

public function set params(p:Array) { _params = p; }
public function get params():Array { return _params; }

private function onResult(evt) {
clearInterval(intervalID);
callback.results = evt;
dispatchEvent({type:"result", target:callback, data:evt});
}

private function onFault(evt) {
clearInterval(intervalID);
dispatchEvent({type:"fault", target:callback, detail:evt.detail, faultcode:evt.faultcode, faultstring:evt.faultstring});
}

private function onStatus() {
// to do : build a real status event, this is crap.
trace("status: calling..");
dispatchEvent({type:"status", target:callback, message:"calling.."});
}
}

En je gebruikt 'm zo (werkt echt met flash-mx.com's testservice).
LET OP: vergeet niet om de WebServiceClasses aan je fla toe te voegen!!
Window > Other Panels > Common Libraries > Classes

// -- Usage:
import SimpleService;

var WSDLURL = "http://www.flash-mx.com/mm/tips/tips.cfc?WSDL";
var method = "getTipByProduct";
var product = "Flash";
var params = [product];

var service = new SimpleService(WSDLURL, method, params);
service.addEventListener("result", mx.utils.Delegate.create(this, result));
service.addEventListener("fault", mx.utils.Delegate.create(this, fault));

service.trigger();

// trace the webservice's result
function result(evt) {
trace("Result:"+mx.data.binding.ObjectDumper.toString(evt));
}

function fault(evt) {
trace("Fault:"+mx.data.binding.ObjectDumper.toString(evt));
}

// try another
var product2 = "DreamWeaver";
service.params = [product2]
service.trigger();

Als je niet in bezit bent van mx.data.binding.ObjectDumper (echt verrekte handig! ik gebruik 'm altijd!) dan kun je die hier (http://download.macromedia.com/pub/flashremoting/mx2004/components/actionscript_2.0/flashremoting_comp_sourcecode.zip) downloaden.

*edit* even wat extra functionaliteiten toegevoegd waar ik vandaag tegenaan liep.

Goed, laat me weten wat jullie er van vinden.
Greets, Mediamonkey

Dauntless
%Europe/Berlin %935 %2005, 23:27
Ziet er allemaal erug handig uit!! :)

Zou je alleen niet beter packages gebruiken voor je classes? Dan kan ik nu naast be.dauntless bv nl.mediaMonkey gebruiken, en dat vind ik wel handiger :).

Als je het niet van plan bent doe ik het natuurlijk gewoon voor mezelf, en dan kan ik hem daarna volop gaan testen :d

En wat doet die objectDumper Class?

[off topic]
-En waar blijft die schieter game nu?
-@Roenes: Waar blijf jíj nu met je topic? :D
[/off topic]

//EDIT
Ohja, en ik heb die AS-tag bug gemeld:
"http://www.google.be"

Mediamonkey
%Europe/Berlin %365 %2005, 09:45
Meh.. packages.. Misschien moest ik er maar eens aan geloven. Tot nog toe kon ik wel af met in elk project een mapje 'classes' en daar m'n standaard spul in kopieren. Ik zal eens kijken bij m'n volgend project of het lekker werkt. :)

De mx.data.binding.ObjectDumper class geeft een string terug van een geparsed object. Je zou 'm kunnen vergelijken met 't standaard testregeltje for (var i in obj) trace(i+" : "+obj[i]); wat je gebruikt voor het uitlezen van een geheel object. De ObjectDumper gaat nog een stapje verder en parsed ook nog eens recursief door child-objecten heen. Wanneer je het met een boolean aangeeft gaat ie ook nog eens methods doorlopen. Echt heel handig wanneer je in 1 regeltje heel het (complexe) object wilt terugtracen, vooral wanneer je niet meer weet wat voor'n properties er ook al weer inzaten.

Die Megaduck game?.. tsja, die staat nog altijd in de vriezer :p Misschien wanneer ik klaar ben met m'n freelance opdracht kijk ik er nog eens naar.

Roenes
%Europe/Berlin %692 %2005, 17:37
[off topic]
-@Roenes: Waar blijf jíj nu met je topic? :D
[/off topic]
Die komt er niet. Ik heb de laatste dagen erg weinig tijd en moet nog aan EAS 2.0 beginnen. :)

Over deze topic. Ik heb em nog niet goed bekeken maar wordt al erg nieuwsgierig. Ik zal binnenkort eens uitgebreid hiernaar kijken :)

Mediamonkey
%Europe/Berlin %957 %2005, 23:59
Even een kleine update gedaan, ook al is dit misschien een tikkie te hoog gegrepen voor de meeste mensen hier. Ik snap wel, webservices worden niet standaard gebruikt door Jan en alleman :) Maar op zich kun je, als je een goeie gratis webservice vindt zoals één die je het weer vertelt naar aanleiding van je postcode of bijvoorbeeld een Google webservice, er best leuke applicaties mee bouwen.

Ik zal van de week nog wel een nieuw topic posten met iets meer algemeen bruikbaar spul.

- Mediamonkey -

Dauntless
%Europe/Berlin %964 %2005, 00:08
Even een kleine update gedaan, ook al is dit misschien een tikkie te hoog gegrepen voor de meeste mensen hier. Ik snap wel, webservices worden niet standaard gebruikt door Jan en alleman :) Maar op zich kun je, als je een goeie gratis webservice vindt zoals één die je het weer vertelt naar aanleiding van je postcode of bijvoorbeeld een Google webservice, er best leuke applicaties mee bouwen.

Ik zal van de week nog wel een nieuw topic posten met iets meer algemeen bruikbaar spul.

- Mediamonkey -
Over het algemeen wordt er niet veel gepost in topics in het ASSC ... Spijtig is voor velen de drempel om hier te posten nog veel te hoog... We zouden hier iets aan moeten doen...

Ik denk dat er hier misschien 30 (als het er al zoveel zijn) mensen zijn die 1. actiev zijn op het forum en 2. een goede basis hebben van AS 2.0 classes.

Daarnaast gaat dit dus inderdaad nog over webservices, en hier gebruiken er echt weinig mensen die ... Ikzelf heb ze ook nog nooit gebruikt eigenlijk :I . Vooral omdat het 1: veel kost en 2: Ik ben nog niet overtuigd van de voordelen/mogelijkheden... (Webservices zijn toch hetzelfde als remoting hé ? :I (anders zit ik goed mis :D )) .

Maar toch krijg je hier nog altijd meer reacties dan op FlashKit bv. M'n A* staat er nu al een 4 dagen of zo, en nog geen enkele reactie... Daar ligt het niveau precies nog lager dan hier... Op kirupa komt er wel reactie op topics als deze, mits een beetje aandringen :p.

Als ik eens actief bezig ben met webServices zal ik hier nog eens kijken ;).

Mediamonkey
%Europe/Berlin %976 %2005, 00:25
Misschien ligt hier een schone taak voor mij om eens een kleine tutorial over webservices te schrijven met diverse links naar gratis webservices. Paar demo's en zo.. Ik zal er binnenkort eens wat over posten, misschien dat dat helpt :)

Dauntless
%Europe/Berlin %979 %2005, 00:30
Misschien ligt hier een schone taak voor mij om eens een kleine tutorial over webservices te schrijven met diverse links naar gratis webservices. Paar demo's en zo.. Ik zal er binnenkort eens wat over posten, misschien dat dat helpt :)
Ok, die zal ik 100% zeker lezen!! Haast je! :D :p

En voor de rest zouden degene die al in het ASSC een topic gestart hebben, wat meer, kleinere topics moeten openen met kleinere projectjes. Dat neemt voor anderen misschien die drempel om een topic te openen weg...

Roenes
%Europe/Berlin %447 %2005, 11:43
Misschien ligt hier een schone taak voor mij om eens een kleine tutorial over webservices te schrijven met diverse links naar gratis webservices. Paar demo's en zo.. Ik zal er binnenkort eens wat over posten, misschien dat dat helpt :)Graag, want ik heb laatste gekeken naar je classes maar ik weet niets over webservices en kan er dus vrij weinig zinnigs over zeggen. Anders had ik allang nog een keer gereageerd :)

Ik denk dat er hier misschien 30 (als het er al zoveel zijn) mensen zijn die 1. actiev zijn op het forum en 2. een goede basis hebben van AS 2.0 classes.Optimist :D

Mensen die een goede basis hebben van AS2 zijn er natuurlijk wel veel maar die ook actief zijn op het forum.. Een paar maar. Als in het AS forum een AS2 vraag wordt gesteld zie je altijd 3 of 4 dezelfde personen reageren. Dat zegt al genoeg ;)

Over het algemeen wordt er niet veel gepost in topics in het ASSC ... Spijtig is voor velen de drempel om hier te posten nog veel te hoog... We zouden hier iets aan moeten doen...Daar heb je helaas wel gelijk in. Maar ik denk dat wij het voortouw moeten nemen door een paar kleine en "simpele" dingen te posten. Desnoods wat dingen als vuurwerk en een simpel spel en zo. Maar daar nemen wij vaak de moeite niet voor omdat wij het idee hebben dat het niveau dan niet hoog genoeg is voor ASSC. Maar hierdoor zullen mensen die wat minder van AS weten als ons hier niet posten met hun creatie's omdat ze denken dat wij dat te min zouden vinden?? Atthans, dat idee heb ik.

Zoiezo vraag ik me af hoeveel mensen het ASSC uberhaupt checken. Volgens mij is dat ook maar een handje vol mensen omdat ook hier weer steeds dezelfde mensen reageren :)

Mediamonkey
%Europe/Berlin %524 %2005, 13:34
Nou, toch een kleine 200 views per topic hier, dat vind ik nog best redelijk.
Ik heb de code trouwens net afgemaakt, nu nog een verhaaltje er omheen schrijven.
En ik ben het er mee eens dat we ook kleine scriptjes hier kunnen gaan posten.
Ik zal m'n persoonlijke bibliotheek aan scriptjes er eens bij nemen. :)

matzo
%Europe/Berlin %736 %2005, 18:40
ja kleine scriptjes vind ik handig want anders is het zo overdonderend, een hele pagina code, hoewel ik redelijke ervaring heb met java en php. ik vind het wel leuk, as hoewel dat ik er niet zoveel van snap, maar ik snap het altijd als jullie het uitleggen.

Flashingback
%Europe/Berlin %758 %2005, 19:12
Mogen beginneling classes ook gepost worden want dan komt er mischien nog wel iets van mijn kant als ik weer is thuis ben.

Roenes
%Europe/Berlin %780 %2005, 19:43
Mogen beginneling classes ook gepost worden want dan komt er mischien nog wel iets van mijn kant als ik weer is thuis ben.Tuurlijk! Alles waar jij trots op bent of het gewoon wil showen is welkom! :)

Dauntless
%Europe/Berlin %859 %2005, 21:38
Heb jij op 13-jarige leeftijd al "redelijke" ervaring met php en JAVA??