- Initial import of the mob, reorganizing dirs to match packaged version
[plcapi.git] / demo / client / introspect.php
1 <html>\r\r
2 <head><title>xmlrpc</title></head>\r\r
3 <body>\r\r
4 <h1>Introspect demo</h1>\r\r
5 <h2>Query server for available methods and their description</h2>\r\r
6 <h3>The code demonstrates usage of multicall and introspection methods</h3>\r\r
7 <?php\r\r
8         include("xmlrpc.inc");\r\r
9 \r\r
10         function display_error($r)\r\r
11         {\r\r
12                 print "An error occurred: ";\r\r
13                 print "Code: " . $r->faultCode()\r\r
14                         . " Reason: '" .$r->faultString()."'<br/>";\r\r
15         }\r\r
16 \r\r
17         // 'new style' client constuctor\r\r
18         $c = new xmlrpc_client("http://phpxmlrpc.sourceforge.net/server.php");\r\r
19         print "<h3>methods available at http://" . $c->server . $c->path .  "</h3>\n";\r\r
20 \r\r
21         $m = new xmlrpcmsg('system.listMethods');\r\r
22         $r =& $c->send($m);\r\r
23         if($r->faultCode())\r\r
24         {\r\r
25                 display_error($r);\r\r
26         }\r\r
27         else\r\r
28         {\r\r
29                 $v=$r->value();\r\r
30                 for($i=0; $i<$v->arraysize(); $i++)\r\r
31                 {\r\r
32                         $mname=$v->arraymem($i);\r\r
33                         print "<h4>" . $mname->scalarval() . "</h4>\n";\r\r
34 \r\r
35                         // build messages first, add params later\r\r
36                         $m1  = new xmlrpcmsg('system.methodHelp');\r\r
37                         $m2  = new xmlrpcmsg('system.methodSignature');\r\r
38                         $val = new xmlrpcval($mname->scalarval(), "string");\r\r
39                         $m1->addParam($val);\r\r
40                         $m2->addParam($val);\r\r
41 \r\r
42                         // send multiple messages in one pass.\r\r
43                         // If server does not support multicall, client will fall back to 2 separate calls\r\r
44                         $ms = array($m1, $m2);\r\r
45                         $rs =& $c->send($ms);\r\r
46 \r\r
47                         if($rs[0]->faultCode())\r\r
48                         {\r\r
49                                 display_error($rs[0]);\r\r
50                         }\r\r
51                         else\r\r
52                         {\r\r
53                                 $val=$rs[0]->value();\r\r
54                                 $txt=$val->scalarval();\r\r
55                                 if($txt != "")\r\r
56                                 {\r\r
57                                         print "<h4>Documentation</h4><p>${txt}</p>\n";\r\r
58                                 }\r\r
59                                 else\r\r
60                                 {\r\r
61                                         print "<p>No documentation available.</p>\n";\r\r
62                                 }\r\r
63                         }\r\r
64 \r\r
65                         if($rs[1]->faultCode())\r\r
66                         {\r\r
67                                 display_error($rs[1]);\r\r
68                         }\r\r
69                         else\r\r
70                         {\r\r
71                                 print "<h4>Signature</h4><p>\n";\r\r
72                                 $val = $rs[1]->value();\r\r
73                                 if($val->kindOf()=="array")\r\r
74                                 {\r\r
75                                         for($j=0; $j<$val->arraysize(); $j++)\r\r
76                                         {\r\r
77                                                 $x = $val->arraymem($j);\r\r
78                                                 $ret = $x->arraymem(0);\r\r
79                                                 print "<code>" . $ret->scalarval() . " "\r\r
80                                                         . $mname->scalarval() . "(";\r\r
81                                                 if($x->arraysize()>1)\r\r
82                                                 {\r\r
83                                                         for($k=1; $k<$x->arraysize(); $k++)\r\r
84                                                         {\r\r
85                                                                 $y = $x->arraymem($k);\r\r
86                                                                 print $y->scalarval();\r\r
87                                                                 if($k < $x->arraysize()-1)\r\r
88                                                                 {\r\r
89                                                                         print ", ";\r\r
90                                                                 }\r\r
91                                                         }\r\r
92                                                 }\r\r
93                                                 print ")</code><br/>\n";\r\r
94                                         }\r\r
95                                 }\r\r
96                                 else\r\r
97                                 {\r\r
98                                         print "Signature unknown\n";\r\r
99                                 }\r\r
100                                 print "</p>\n";\r\r
101                         }\r\r
102                 }\r\r
103         }\r\r
104 ?>\r\r
105 <hr/>\r\r
106 <em>$Id$</em>\r\r
107 </body>\r\r
108 </html>\r\r