/[cvs]/nfo/php/libs/org.netfrag.glib/Data/Driver/RPC/Remote.php
ViewVC logotype

Contents of /nfo/php/libs/org.netfrag.glib/Data/Driver/RPC/Remote.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.5 - (show annotations)
Mon Mar 3 21:47:53 2003 UTC (21 years, 6 months ago) by joko
Branch: MAIN
CVS Tags: HEAD
Changes since 1.4: +4 -1 lines
FILE REMOVED
refactored to DataSource::Proxy::XMLRPC

1 <?
2 /*
3 ## --------------------------------------------------------------------------
4 ## $Id: Remote.php,v 1.4 2003/02/20 21:42:43 joko Exp $
5 ## --------------------------------------------------------------------------
6 ## $Log: Remote.php,v $
7 ## Revision 1.4 2003/02/20 21:42:43 joko
8 ## + fix: always converting from utf8 into latin here (for now)
9 ##
10 ## Revision 1.3 2003/02/13 21:51:29 joko
11 ## + now can remember its connection-state
12 ## + sub ping
13 ##
14 ## Revision 1.2 2003/02/13 00:42:44 joko
15 ## +- renamed modules
16 ##
17 ## Revision 1.1 2003/02/09 17:25:38 joko
18 ## + refactored from flib/Application/RPC/Remote.php
19 ##
20 ## Revision 1.6 2003/02/03 03:37:45 jonen
21 ## - removed unused argument '$decode' at function '_call()'
22 ## + added argument '$options=array()' at function '_call()'
23 ## which will be passed to function '&decodeData()' for e.g. utf8 decoding
24 ## + added '$encoder->toISO()' at '&decodeData()', (re)moved from 'ProxyObject.php'
25 ##
26 ## Revision 1.5 2002/12/22 13:24:09 jonen
27 ## + added utf8 encoding at 'send()' toggled by option
28 ##
29 ## Revision 1.4 2002/12/19 02:02:25 jonen
30 ## + minor changes
31 ##
32 ## Revision 1.3 2002/12/19 01:59:37 jonen
33 ## + minor changes: coment debug prints
34 ##
35 ## Revision 1.2 2002/12/05 21:45:31 joko
36 ## + debugging
37 ##
38 ## Revision 1.1 2002/12/01 17:23:58 joko
39 ## + initial check-in
40 ##
41 ## Revision 1.3 2002/12/01 06:22:57 cvsjoko
42 ## + minor update: now can use config defaults or given args
43 ##
44 ## Revision 1.2 2002/10/29 19:14:45 cvsjoko
45 ## - bugfix: dont' do utf8-encoding here
46 ##
47 ## Revision 1.1 2002/10/09 00:51:39 cvsjoko
48 ## + new
49 ##
50 ##
51 ## -------------------------------------------------------------------------
52 */
53
54
55 /*
56
57 TODO:
58 o SOAP?
59
60
61 */
62
63
64 class Data_Driver_RPC_Remote extends DesignPattern_Logger {
65
66 var $configured;
67 var $meta;
68
69 function Data_Driver_RPC_Remote($args = array()) {
70
71 parent::constructor();
72
73 //print Dumper($this, $args);
74
75 global $Data_Driver_RPC_Remote_meta;
76 session_register_safe("Data_Driver_RPC_Remote_meta");
77 $this->meta = $Data_Driver_RPC_Remote_meta;
78
79 if (!isset($this->meta[connected]) || $args[connect]) {
80 $this->meta[connected] = 1;
81 }
82 $this->_save_meta();
83
84 if ($args['Host']) { $this->host = $args['Host']; }
85 if ($args['Port']) { $this->port = $args['Port']; }
86
87 // check if host is valid
88 if (!$this->host) {
89 $this->_raiseException( "->constructor: attribute 'host' is empty, please check your settings");
90 return;
91 }
92
93 if (!$this->port) {
94 $this->_raiseException( "->constructor: attribute 'port' is empty, please check your settings");
95 return;
96 }
97
98 $this->configured = 1;
99
100 }
101
102 function _save_meta() {
103 global $Data_Driver_RPC_Remote_meta;
104 $Data_Driver_RPC_Remote_meta = $this->meta;
105 }
106
107 function send($command, $data = "", $options = array()) {
108
109 $this->log(get_class($this) . "->send: " . $command, PEAR_LOG_DEBUG);
110
111 if (!$this->isConnected()) {
112 $this->_raiseException( "->send: not connected!");
113 return;
114 }
115
116 // do 'encode' here and ...
117 if ($options[utf8]) {
118 $encoder = new Data_Encode($data);
119 $encoder->toUTF8();
120 }
121 // call '_call' with 'decode'
122 return $this->_call($command, $data, $options);
123 }
124
125 function _call($command, $data = "", $options = array() ) {
126
127 if (!$this->configured) {
128 $this->_raiseException( "->_call: class not configured properly");
129 return;
130 }
131
132 // populate options list - mostly for debugging purposes
133 $options_list = array();
134 foreach ($options as $key => $value) {
135 array_push($options_list, "$key=$value");
136 }
137
138 $data_debug = $data;
139 if (is_array($data_debug)) { $data_debug = join(", ", $data_debug); }
140 $options_debug = join(", ", $options_list);
141 $this->log(get_class($this) . ": " . $command . "(" . $data_debug . ") [" . $options_debug . "]", PEAR_LOG_DEBUG);
142
143 // trace
144 //print "call: $command<hr>";
145 //print Dumper($data);
146 //print Dumper($this);
147
148 // data
149 $data_enc = XML_RPC_encode($data);
150
151 // message - request
152 $msg = new XML_RPC_Message($command);
153 $msg->addParam($data_enc);
154 //print htmlentities($msg->serialize());
155 // remote procedure call
156 $rpc = new XML_RPC_Client("/", $this->host, $this->port);
157 $rpc->setDebug(0);
158 if ( !$msg_response = $rpc->send($msg) ) {
159 // TODO: redirect this error elsewhere!
160 //print "RPC-error!<br>";
161 $this->_raiseException( "->_call: no response");
162 return;
163 }
164 // message - response
165 $response_enc = $msg_response->value();
166
167 // TODO: what's this? prematurely returning here should not be considered "stable"....
168 return $this->decodeData($response_enc, $options);
169 }
170
171 function &decodeData(&$payload, $options = array() ) {
172 //if (!is_object($payload)) { return; }
173 if ($payload) {
174 // data
175 $data = XML_RPC_decode($payload);
176 //print "data: " . dumpVar($response);
177
178 // decode UTF8 to ISO if wanted
179 //if ($options[to_latin]) {
180 $encoder = new Data_Encode($data);
181 $encoder->toISO();
182 //}
183
184 $this->meta[connected] = 1;
185 $this->_save_meta();
186
187 return $data;
188 } else {
189 //print "ERROR!<br>";
190 return 0;
191 }
192 }
193
194 function _raiseException($message) {
195 $this->meta[connected] = 0;
196 $this->_save_meta();
197 $this->log(get_class($this) . $message, PEAR_LOG_ERR);
198 }
199
200 function isConnected() {
201 return $this->meta[connected];
202 }
203
204 function ping() {
205 $this->_call('ping');
206 }
207
208 }
209
210 ?>

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed