Annotation of loncom/LondTransaction.pm, revision 1.5
1.1 foxr 1: # This module defines and implements a class that represents
2: # a connection to a lond daemon.
3: #
1.5 ! foxr 4: # $Id: LondTransaction.pm,v 1.4 2003/05/15 02:21:45 foxr Exp $
1.1 foxr 5: #
6: # Copyright Michigan State University Board of Trustees
7: #
8: # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
9: #
10: # LON-CAPA is free software; you can redistribute it and/or modify
11: # it under the terms of the GNU General Public License as published by
12: # the Free Software Foundation; either version 2 of the License, or
13: # (at your option) any later version.
14: #
15: # LON-CAPA is distributed in the hope that it will be useful,
16: # but WITHOUT ANY WARRANTY; without even the implied warranty of
17: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18: # GNU General Public License for more details.
19: #
20: # You should have received a copy of the GNU General Public License
21: # along with LON-CAPA; if not, write to the Free Software
22: # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23: #
24: # /home/httpd/html/adm/gpl.txt
25: #
26: # http://www.lon-capa.org/
27: #
28:
29: =pod
1.3 foxr 30:
31: =head1 Synopsis
32:
1.2 foxr 33: LondTransaction objectifies the state of a transaction between lonc and
1.1 foxr 34: lond (loncnew really).
35:
36: =cut
37:
1.3 foxr 38: package LondTransaction;
1.2 foxr 39:
40: =pod
41: =head1 Description
42:
43: LondTransaction objects hold the state required to manage a
44: transaction between lonc and lond, from the loncnew point of view.
45: The state consists of the following member data:
46:
47: =item request
48:
49: The text of the request to send to lond.
50:
51: =item active
52:
53: If zero, the request is not active and the londSocket item is not
54: defined.
55:
56: =item londSocket
57:
1.3 foxr 58: If the request is active,
1.2 foxr 59: this member contains the LondConnection object reference that
60: this request is being processed on.
61:
62: =item deferred
63:
64: True if the request is a deferred (delayed) request.
65: The member data below are either present or not depending on
66: whether or not deferred is true.
67:
68: =item clientSocket
69:
70: If deferred is false, this member data is defined and is the
71: handle to the socket that is connected to the apache child that
72: has requested this transaction.
73:
74: =item DeferredFile
75:
76: If deferred is false, this member data is defined and is the name
77: of the file that contains the deferred request. When the transaction
78: is retired, this file will be deleted.
79:
80: =head1 Member Functions
81:
82: =head2 Operational functions
83:
1.3 foxr 84: =cut
85:
86: =pod
87:
1.2 foxr 88: =item new
89:
90: Creates a new transaction object.
91:
1.3 foxr 92: =cut
93:
94: sub new {
95: my $class = shift;
96: my $Transaction = shift;
97:
98:
99: my $self = {request => $Transaction,
100: active => 0,
101: deferred => 0};
102: bless($self, $class);
1.5 ! foxr 103: return $self;
1.3 foxr 104: }
105: =pod
106:
1.2 foxr 107: =item Activate
108:
109: Activates the transaction by assigning it to a LondConnection object
110:
1.3 foxr 111: Parameters:
112:
113: =over 3
114:
115: =item Connection
116:
117:
118: Reference to the LondConnection object along which the transaction
119: will be carried.
120:
121: =back
122:
123: =cut
124: sub Activate {
125: my $self = shift;
126: my $Connection = shift; # Reference to a lond connection.
127:
128: $self->{londSocket} = $Connection; # Store the connection object and
129: $self->{active} = 1; # Indicate it's active.
130:
131: }
132:
133: =pod
134:
1.2 foxr 135: =item Retire
136:
1.3 foxr 137:
138: Retires a transaction after successful completion. If the
139: transaction is deferred, the deferred file is destroyed.
140: Otherwise this is a noop.
141:
142: =cut
143: sub Retire {
144: my $self = shift;
145:
146: if($self->{deferred}) {
147: unlink $self->{DeferredFile};
148: }
149:
150: # Destroy my member data to release reference counts.
151:
152: delete $self->{londSocket};
153: delete $self->{clientSocket};
154: delete $self->{DeferredFile};
155:
156: }
157:
158: =pod
1.2 foxr 159:
160: =item SetDeferred
161:
162: Sets the state of a transaction to deferred, the deferred member
163: is set true, clientSocket is undefined, and DeferredFile is set.
164:
1.3 foxr 165: Parameters:
166:
167: =over 3
168:
169: =item File
170:
171: Name of the file that holds the deferred transaction.
172:
173: =back
174:
175: =cut
176: sub SetDeferred {
177: my $self = shift;
178: my $File = shift;
179:
180: $self->{deferred} = 1;
1.5 ! foxr 181: $self->{DeferredFile} = $File;
1.3 foxr 182: }
183:
184: =pod
185:
186: =item SetClient
1.2 foxr 187:
188: Sets the state of a transaction to not deferred. The deferred member
189: is set false, clientSocket is set and DeferredFile is undefined.
190:
1.3 foxr 191: Parameters:
192:
193: =over 3
194:
195: =item Socket
196:
197: The socket open on the client.
198:
199: =back
200:
201: =cut
202: sub SetClient {
203: my $self = shift;
204: my $Client = shift;
205:
206: $self->{deferred} = 0;
207: $self->{clientSocket} = $Client;
208: }
209:
210: =pod
211:
1.2 foxr 212: =head2 Selectors
213:
214:
215: =item isDeferred
216:
217: Returns the state of the deferred member.
218:
1.3 foxr 219: =cut
220: sub isDeferred {
221: my $self = shift;
222: return $self->{deferred};
223: }
224:
225: =pod
226:
1.2 foxr 227: =item isActive
228:
1.3 foxr 229: Returns the value of the active member.
230:
231: =cut
232: sub isActive {
233: my $self = shift;
234: return $self->{active};
235: }
236:
237: =pod
1.2 foxr 238:
239: =item getClient
240:
1.3 foxr 241: If not deferred returns the client socket, else returns undef.
242:
243: =cut
244: sub getClient {
245: my $self = shift;
246: if($self->{deferred}) {
247: return undef;
248: } else {
249: return $self->{clientSocket};
250: }
251: }
252:
253:
254: =pod
1.2 foxr 255:
256: =item getFile
257:
258: If deferred, returns the name of the deferred queue file else
259: returns undef.
260:
261: =cut
1.3 foxr 262: sub getFile {
263: my $self = shift;
264: if($self->{deferred}) {
265: return $self->{DeferredFile};
266: } else {
267: return undef;
268: }
269: }
270:
271:
272: =pod
273:
274: =item getServer
275:
276: If active returns the lond server socket else undef.
277:
278: =cut
279: sub getServer {
280: my $self = shift;
281:
282: if($self->{active}) {
283: return $self->{londSocket};
284: } else {
285: return undef;
286: }
287: }
288:
289: =pod
290:
291: =item getRequest
292:
293: Returns the remaining request text.
294:
295: =cut
296: sub getRequest {
297: my $self = shift;
298: return $self->{request};
299: }
300:
301:
1.5 ! foxr 302: 1;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>