/[cvs]/nfo/php/libs/org.netfrag.flib/Application/RPC/ProxyObject.php
ViewVC logotype

Annotation of /nfo/php/libs/org.netfrag.flib/Application/RPC/ProxyObject.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.5 - (hide annotations)
Wed Dec 18 22:36:49 2002 UTC (21 years, 9 months ago) by jonen
Branch: MAIN
Changes since 1.4: +43 -8 lines
+ added support to get remote objects via backend via 'guid'
+ renamed '_loadBackend' to '_loadRemote'
+ constructor now accepts additional options:
  + remote: try to get object via '_loadRemote' ...
  + oid: use the given identifier as an 'oid' when doing '_loadRemote'
  + guid: use the given identifier as a 'guid' when doing '_loadRemote'

1 joko 1.1 <?
2     ## -------------------------------------------------------------------------------------
3 jonen 1.5 ## $Id: ProxyObject.php,v 1.4 2002/12/12 02:46:31 joko Exp $
4 joko 1.1 ## -------------------------------------------------------------------------------------
5 joko 1.2 ## $Log: ProxyObject.php,v $
6 jonen 1.5 ## Revision 1.4 2002/12/12 02:46:31 joko
7     ## + state (session) gets flushed when data was successfully loaded from remote side
8     ## + fixed _loadBackend
9     ## + fixed flushState
10     ##
11 joko 1.4 ## Revision 1.3 2002/12/06 04:12:54 joko
12     ## + replaced 'xyzCache' through 'xyzProxy'
13     ## + function store(...)
14     ##
15 joko 1.3 ## Revision 1.2 2002/12/05 21:44:09 joko
16     ## + debugging
17     ##
18 joko 1.2 ## Revision 1.1 2002/12/01 17:23:58 joko
19     ## + initial check-in
20     ##
21 joko 1.1 ## Revision 1.11 2002/11/12 06:05:58 cvsjoko
22     ## + renamed class: Text_Encode -> TextEncode
23     ##
24     ## Revision 1.10 2002/10/29 19:15:33 cvsjoko
25     ## - moved utf8/iso-conversion to lib/utils/Text_Encode.php
26     ##
27     ## Revision 1.9 2002/10/26 12:32:36 cvsjoko
28     ## - removed debugging via "print"
29     ## + added generic logging via PEAR::Log
30     ##
31     ## Revision 1.8 2002/10/22 09:51:38 cvsmax
32     ## + moved semi-method 'createBackend' to method $site->user->create at User.class.php
33     ##
34     ## Revision 1.7 2002/10/21 18:27:09 cvsjoko
35     ## - manually disabled any form of caching
36     ##
37     ## Revision 1.6 2002/10/17 03:48:47 cvsmax
38     ## + new
39     ## + function _createBackend create new Backend
40     ## + function _create api-create
41     ##
42     ## Revision 1.5 2002/10/16 03:37:54 cvsjoko
43     ## + bugfix: wrong comparison in restriction to save to array
44     ##
45     ## Revision 1.4 2002/10/10 03:04:23 cvsjoko
46     ## + no debug-output
47     ##
48     ## Revision 1.3 2002/10/10 03:03:27 cvsjoko
49     ## + bugfix: save object to cache only if payload from backend isn't empty
50     ##
51     ## Revision 1.2 2002/10/10 02:40:06 cvsjoko
52     ## + new level of data-caching (session and persistant)
53     ## + function _loadState loads data from session
54     ## + function _saveState saves data to session
55     ## + function save api-save (session & backend)
56     ## + function _commit saves data to backend
57     ## + handy utils
58     ## + function _setAttributes
59     ## + function flushState
60     ##
61     ## Revision 1.1 2002/10/09 00:51:39 cvsjoko
62     ## + new
63     ## -------------------------------------------------------------------------------------
64    
65     class ProxyObject {
66    
67     var $objectId;
68     // purpose ...
69     var $meta;
70     var $payload;
71     var $attributes;
72     var $backend;
73    
74 jonen 1.5 function ProxyObject($objectId = "", $options = array() ) {
75 joko 1.1 session_register_safe("proxy");
76     $this->backend = new Remote;
77 jonen 1.5 $this->_init($objectId, $options);
78 joko 1.1 }
79    
80 jonen 1.5 function _init($objectId="", $options = array() ) {
81 joko 1.1 if ($objectId) {
82     $this->objectId = $objectId;
83 jonen 1.5 $this->meta = $options;
84    
85     // set default load mechanismn
86     if( $this->meta[remote] && ((!$this->meta[oid] && !$this->meta[guid]) || ($this->meta[oid] && $this->meta[guid])) ) {
87     $this->meta[oid] = 1;
88     }
89    
90 joko 1.1 $this->load();
91 joko 1.3 //$this->_saveProxy();
92 joko 1.1 }
93     }
94    
95     function load() {
96     if (!$this->_loadState()) {
97 joko 1.3 if (!$this->_loadProxy()) {
98 jonen 1.5
99     // just load object from remote side if its flagged to be a remote one ...
100     if ($this->meta[remote]) {
101     $this->_loadRemote();
102     }
103    
104 joko 1.1 }
105     }
106     }
107    
108     function save($data, $type) {
109     $this->_setAttributes($data);
110     $this->_saveState();
111     if ($type == 'commit') {
112     $this->_commit();
113     }
114     if ($type == 'create') {
115     $this->_create();
116     }
117     }
118    
119     function flush() {
120     $this->flushState();
121 joko 1.3 $this->flushProxy();
122 joko 1.1 }
123    
124     function _commit() {
125     $this->_saveBackend($this->attributes);
126     $this->flushState();
127 joko 1.3 $this->flushProxy();
128 joko 1.1 }
129    
130    
131     // TODO: make this work
132     /*
133     function _create() {
134     $this->_createBackend($this->attributes);
135     $this->flushState();
136 joko 1.3 $this->flushProxy();
137 joko 1.1 }
138     */
139    
140     function getAttributes() {
141     if (!$this->meta[decoded]) {
142     $this->_decode();
143     $this->_saveState();
144     }
145     return $this->attributes;
146     }
147    
148     function _setAttributes($data) {
149     $this->attributes = $data;
150     }
151    
152 joko 1.3 function flushProxy() {
153 joko 1.1 connectdb();
154     $sql = "DELETE FROM f_proxy WHERE oid='$this->objectId'";
155     send_sql($sql);
156     }
157    
158     function flushState() {
159     global $proxy;
160     unset($proxy[$this->objectId]);
161 joko 1.4 $this->meta[decoded] = 0;
162 joko 1.1 }
163    
164     function _loadState() {
165     global $proxy;
166     logp(get_class($this) . "->_loadState()", LOG_DEBUG);
167     if ($this->attributes = $proxy[$this->objectId]) {
168     //print "_loadState:" . dumpVar($this->attributes);
169     $this->meta[decoded] = 1;
170     // TODO: make a parameter from this (0 deactivates session-layer)
171     return 0;
172     }
173     }
174    
175     function _saveState() {
176     global $proxy;
177     logp(get_class($this) . "->_saveState()", LOG_DEBUG);
178     $proxy[$this->objectId] = $this->attributes;
179     //print "_saveState: " . dumpVar($this->attributes);
180     // TODO: throw exception-message back to user if operation fails
181     }
182    
183 joko 1.3 function _loadProxy() {
184     logp(get_class($this) . "->_loadProxy()", LOG_DEBUG);
185 joko 1.1 connectdb();
186     $sql = "SELECT payload FROM f_proxy WHERE oid='$this->objectId'";
187     if ($res = send_sql($sql)) {
188     $row = mysql_fetch_array($res, MYSQL_ASSOC);
189     if ($row) {
190     $this->payload = $row[payload];
191     // TODO: make a parameter from this (0 deactivates mysqldb-layer)
192     return 0;
193     }
194     }
195     }
196    
197 joko 1.3 // TODO: use PEAR here
198     function _saveProxy() {
199     logp(get_class($this) . "->_saveProxy()", LOG_DEBUG);
200 joko 1.1 connectdb();
201     if ($this->payload) {
202     //$sql = "INSERT INTO f_proxy SET payload='$this->payload' WHERE oid='$this->objectId'";
203     $sql = "INSERT INTO f_proxy SET oid='$this->objectId', payload='$this->payload'";
204     if (!send_sql($sql)) {
205     $sql = "UPDATE f_proxy SET payload='$this->payload' WHERE oid='$this->objectId'";
206     send_sql($sql);
207     }
208     }
209     }
210    
211 jonen 1.5 function _loadRemote() {
212     logp(get_class($this) . "->_loadRemote()", LOG_DEBUG);
213    
214 joko 1.1 // TODO: test backend for reachability first (eventually cache this information and "reset" it by another party)
215 jonen 1.5
216     // check for guid or oid
217     if($this->meta[guid]) {
218     $args = array( guid => $this->objectId, classname => $this->meta[classname] );
219     $result = $this->backend->call('getObjectByGuid', $args );
220     }
221     if($this->meta[oid]) {
222     $result = $this->backend->call('getObject', $this->objectId);
223     }
224    
225     if ($result) {
226 joko 1.2 //print "result: " . dumpVar($result) . "<br>";
227 joko 1.1 if (count($result) == 0) { return; }
228 jonen 1.5
229     // ----- move this to _encode some times: $this->_encode()
230 joko 1.1 $encoder = new TextEncode($result);
231     $encoder->toISO();
232     if ($_GET[debug]) {
233     print dumpVar($result);
234     }
235     $this->payload = serialize($result);
236 jonen 1.5 // ----- move this to _encode some times
237    
238 joko 1.3 $this->_saveProxy();
239 joko 1.4 //print "oid: $this->objectId<br>";
240     $this->flushState();
241 jonen 1.5 } else {
242     print "Error in _loadRemote!!!<br>";
243 joko 1.1 }
244 jonen 1.5
245 joko 1.1 }
246    
247     function _saveBackend($result) {
248     logp(get_class($this) . "->_saveBackend()", LOG_DEBUG);
249     $encoder = new TextEncode($result);
250     $encoder->toUTF8();
251     $response = $this->backend->send('saveObject', array('oid' => $this->objectId, 'data' => $result) );
252     }
253    
254     function _decode() {
255     // fill attributes-hashtable from message-hashtable
256     if (!$this->payload) { return; }
257     //if ($this->attributes = $backend->decodeData($this->payload)) {
258     if ($this->attributes = unserialize($this->payload)) {
259     $this->meta[decoded] = 1;
260     }
261     }
262 joko 1.3
263     function store($struct) {
264     $this->payload = serialize($struct);
265     $this->_saveProxy();
266     }
267 joko 1.1
268     }
269    
270     ?>

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