Reformat source code: demos
[plcapi.git] / demo / client / introspect.php
1 <html>\r\r<head><title>xmlrpc</title></head>\r\r<body>\r\r<h1>Introspect demo</h1>\r\r<h2>Query server for available methods and their description</h2>\r\r<h3>The code demonstrates usage of multicall and introspection methods</h3>\r\r<?php\r\rinclude "xmlrpc.inc";\r\r\rfunction display_error($r)\r\r\r{\r\r\r    print "An error occurred: ";\r\r\r    print "Code: " . $r->faultCode()\r\r        . " Reason: '" . $r->faultString() . "'<br/>";\r\r\r}\r\r\r// 'new style' client constuctor\r\r$c = new xmlrpc_client("http://phpxmlrpc.sourceforge.net/server.php");\r\rprint "<h3>methods available at http://" . $c->server . $c->path . "</h3>\n";\r\r\r$m = new xmlrpcmsg('system.listMethods');\r\r$r = &$c->send($m);\r\rif ($r->faultCode()) {\r\r\r    display_error($r);\r\r\r} else {\r\r\r    $v = $r->value();\r\r\r    for ($i = 0; $i < $v->arraysize(); $i++) {\r\r\r        $mname = $v->arraymem($i);\r\r\r        print "<h4>" . $mname->scalarval() . "</h4>\n";\r\r\r        // build messages first, add params later\r\r        $m1 = new xmlrpcmsg('system.methodHelp');\r\r\r        $m2 = new xmlrpcmsg('system.methodSignature');\r\r\r        $val = new xmlrpcval($mname->scalarval(), "string");\r\r\r        $m1->addParam($val);\r\r\r        $m2->addParam($val);\r\r\r        // send multiple messages in one pass.\r\r        // If server does not support multicall, client will fall back to 2 separate calls\r\r        $ms = array($m1, $m2);\r\r\r        $rs = &$c->send($ms);\r\r\r        if ($rs[0]->faultCode()) {\r\r\r            display_error($rs[0]);\r\r\r        } else {\r\r\r            $val = $rs[0]->value();\r\r\r            $txt = $val->scalarval();\r\r\r            if ($txt != "") {\r\r\r                print "<h4>Documentation</h4><p>${txt}</p>\n";\r\r\r            } else {\r\r\r                print "<p>No documentation available.</p>\n";\r\r\r            }\r\r\r        }\r\r\r        if ($rs[1]->faultCode()) {\r\r\r            display_error($rs[1]);\r\r\r        } else {\r\r\r            print "<h4>Signature</h4><p>\n";\r\r\r            $val = $rs[1]->value();\r\r\r            if ($val->kindOf() == "array") {\r\r\r                for ($j = 0; $j < $val->arraysize(); $j++) {\r\r\r                    $x = $val->arraymem($j);\r\r\r                    $ret = $x->arraymem(0);\r\r\r                    print "<code>" . $ret->scalarval() . " "\r\r                        . $mname->scalarval() . "(";\r\r\r                    if ($x->arraysize() > 1) {\r\r\r                        for ($k = 1; $k < $x->arraysize(); $k++) {\r\r\r                            $y = $x->arraymem($k);\r\r\r                            print $y->scalarval();\r\r\r                            if ($k < $x->arraysize() - 1) {\r\r\r                                print ", ";\r\r\r                            }\r\r\r                        }\r\r\r                    }\r\r\r                    print ")</code><br/>\n";\r\r\r                }\r\r\r            } else {\r\r\r                print "Signature unknown\n";\r\r\r            }\r\r\r            print "</p>\n";\r\r\r        }\r\r\r    }\r\r\r}\r\r?>\r\r</body>\r\r</html>\r