--- loncom/LondTransaction.pm 2003/05/05 23:58:05 1.2 +++ loncom/LondTransaction.pm 2003/05/13 01:01:49 1.3 @@ -1,7 +1,7 @@ # This module defines and implements a class that represents # a connection to a lond daemon. # -# $Id: LondTransaction.pm,v 1.2 2003/05/05 23:58:05 foxr Exp $ +# $Id: LondTransaction.pm,v 1.3 2003/05/13 01:01:49 foxr Exp $ # # Copyright Michigan State University Board of Trustees # @@ -27,12 +27,15 @@ # =pod -=HEAD1 Synopsis + +=head1 Synopsis + LondTransaction objectifies the state of a transaction between lonc and lond (loncnew really). =cut +package LondTransaction; =pod =head1 Description @@ -52,7 +55,7 @@ defined. =item londSocket -If the request is not a deferred one (deferred = false), +If the request is active, this member contains the LondConnection object reference that this request is being processed on. @@ -78,28 +81,160 @@ is retired, this file will be deleted. =head2 Operational functions +=cut + +=pod + =item new Creates a new transaction object. +=cut + +sub new { + my $class = shift; + my $Transaction = shift; + + + my $self = {request => $Transaction, + active => 0, + deferred => 0}; + bless($self, $class); +} +=pod + =item Activate Activates the transaction by assigning it to a LondConnection object +Parameters: + +=over 3 + +=item Connection + + +Reference to the LondConnection object along which the transaction +will be carried. + +=back + +=cut +sub Activate { + my $self = shift; + my $Connection = shift; # Reference to a lond connection. + + $self->{londSocket} = $Connection; # Store the connection object and + $self->{active} = 1; # Indicate it's active. + +} + +=pod + =item Retire -Retires a transaction after successful completion. + +Retires a transaction after successful completion. If the +transaction is deferred, the deferred file is destroyed. +Otherwise this is a noop. + +=cut +sub Retire { + my $self = shift; + + if($self->{deferred}) { + unlink $self->{DeferredFile}; + } + + # Destroy my member data to release reference counts. + + delete $self->{londSocket}; + delete $self->{clientSocket}; + delete $self->{DeferredFile}; + +} + +=pod =item SetDeferred Sets the state of a transaction to deferred, the deferred member is set true, clientSocket is undefined, and DeferredFile is set. -=item SetClient +Parameters: + +=over 3 + +=item File + +Name of the file that holds the deferred transaction. + +=back + +=cut +sub SetDeferred { + my $self = shift; + my $File = shift; + + $self->{deferred} = 1; + $self->{DeferrredFile} = $File; +} + +=pod + +=item SetClient Sets the state of a transaction to not deferred. The deferred member is set false, clientSocket is set and DeferredFile is undefined. +Parameters: + +=over 3 + +=item Socket + + The socket open on the client. + +=back + +=cut +sub SetClient { + my $self = shift; + my $Client = shift; + + $self->{deferred} = 0; + $self->{clientSocket} = $Client; +} + +=pod + +=item WroteSome + + Called to indicate that some bytes were writtne to lond. + The request is trimmed by the number of bytes written. + If no bytes are left, nonzero is returned, else 0. + +Parameters: + +=over 3 + +=item Count + +Number of bytes written + +=back + +=cut +sub WroteSome { + my $self = shift; + my $Count = shift; + + substr($self->{request}, length($self->{request}), $Count); + + return (length($self->{request]) == 0); + +=pod + =head2 Selectors @@ -107,13 +242,42 @@ is set false, clientSocket is set and De Returns the state of the deferred member. +=cut +sub isDeferred { + my $self = shift; + return $self->{deferred}; +} + +=pod + =item isActive -Returns the staate of the active member. +Returns the value of the active member. + +=cut +sub isActive { + my $self = shift; + return $self->{active}; +} + +=pod =item getClient -if not deferred returns the client socket, else returns undef. +If not deferred returns the client socket, else returns undef. + +=cut +sub getClient { + my $self = shift; + if($self->{deferred}) { + return undef; + } else { + return $self->{clientSocket}; + } +} + + +=pod =item getFile @@ -121,3 +285,43 @@ If deferred, returns the name of the def returns undef. =cut +sub getFile { + my $self = shift; + if($self->{deferred}) { + return $self->{DeferredFile}; + } else { + return undef; + } +} + + +=pod + +=item getServer + + If active returns the lond server socket else undef. + +=cut +sub getServer { + my $self = shift; + + if($self->{active}) { + return $self->{londSocket}; + } else { + return undef; + } +} + +=pod + +=item getRequest + + Returns the remaining request text. + +=cut +sub getRequest { + my $self = shift; + return $self->{request}; +} + +