Erweiterung GetFunction um Modul+Interface

Für die automatische Generierung von Klassen würde ich mir wünschen, die existierende GetFunction-Funktion um folgende Felder zu Ergänzen:

  1. Prefix, wie er auch für PHP-Funktionen eingesetzt wird, also z.B. GetVariable [prefix]=‚IPS‘
  2. Modul, aus welchen Modul der Befehl kommt, z.B. Referenz auf Modulid, die man dann mit GetModule nutzen kann
  3. Interface, welches die Funktion bereitstellt. Das brauche ich für die Generierung von SOAP-Stubs. Leider sind die WDSL so enhanced, das TypInfos und Namespaces von gängigen Interpretern nicht verstanden werden.

Tommi

  1. Das kannst du auf dem Namen ableiten. Die Funktionen sind, außer den wenigen Ausnahmen (GetValue, SetValue…) immer mit einen PREFIX_NAME erstellt.
  2. Du kannst den umgekehrten Weg gehen und dir die Funktionen einer Instanz ausgeben lassen.
  3. Verstehe ich nicht ganz, aber wenn du einen Pointer auf das Interface willst, dann bin ich mir nicht sicher, ob ich dir diesen liefern will. Wir machen uns damit sehr viel mehr Ärger mit der Speicherverwaltung als wir beide bereit sind an Zeit zu investieren. :wink:

Gegenfrage: Hast du nicht eher Lust einen SOAP Server auf Basis von http://php.net/manual/de/soapserver.construct.php zu erstellen? Das ist nämlich etwas, dass ich schon selber einmal angefangen habe. Ist jedoch noch nicht allzu weit fortgeschritten. Und es wäre über die IP-Symcon Versionen hinaus kompatibel. Und mit der normalen IPS Doku kompatibel. Das alte SOAP Interface ist da nämlich immer etwas kompliziert zu erklären.

paresy

hi,
mein Startpunkt ist hier:

$fs = IPS_GetFunctionList(0);
foreach($fs as $f) {
$f = IPS_GetFunction($f);
print $f[‚FunctionName‘]."
";
}

  1. OK, wenn das die Konvention ist, trenne ich beim ersten Unterstrich
  2. Umgedreht: Ich habe die Funktion und möchte die Infos des Moduls(Name, Version etc). Da habe ich keine Instance.
    3.Ich möchte nur den Interface-Namen, um mir hinterher die SOAP-URL zusammenschrauben zu können, also

$fun=$f[‚FunctionName‘];
$if=$f[‚Interface‘];
$url=„http://127.0.0.1:3773/wsdl/“.$if;
$soap=new SoapClient($url);
$soap->$fun($param);

;
Damit kann ich mir die Funktionen generieren wie Ihr es schon mit ips.smd für json gemacht habt und als Include in meine externen PHP-Scripte packen, um IPS-Funktionen auch außerhalb von IPS aufzurufen.

Das mit dem SOAP-Server verstehe ich noch nicht, soll das als ServerScript im WF laufen? Auch dort muss es einen weg geben, das automatisch zu generieren, sonst pflegt man sich auf Dauer den Wolf bei den vielen Funktionen.