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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.4 - (show annotations)
Thu Dec 12 02:46:31 2002 UTC (21 years, 9 months ago) by joko
Branch: MAIN
Changes since 1.3: +8 -1 lines
+ state (session) gets flushed when data was successfully loaded from remote side
+ fixed _loadBackend
+ fixed flushState

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

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