X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXChannel.pm;h=6495e7a7edde6ed7e9ff32ac5630e755d9053816;hb=f0ac8322367c66080b6dbb74da4de72dae126dc3;hp=e3878ecf719f6fe2c8181a2d11c8323821d59c0f;hpb=6aca4e461103870de99b0ce452f21cf7fedeb54b;p=spider.git diff --git a/perl/DXChannel.pm b/perl/DXChannel.pm index e3878ecf..6495e7a7 100644 --- a/perl/DXChannel.pm +++ b/perl/DXChannel.pm @@ -76,6 +76,22 @@ use vars qw(%channels %valid); passwd => '9,Passwd List,parray', ); +# object destruction +sub DESTROY +{ + my $self = shift; + undef $self->{user}; + undef $self->{conn}; + undef $self->{loc}; + undef $self->{pagedata}; + undef $self->{group}; + undef $self->{delayed}; + undef $self->{annfilter}; + undef $self->{wwvfilter}; + undef $self->{spotfilter}; + undef $self->{passwd}; +} + # create a new channel object [$obj = DXChannel->new($call, $msg_conn_obj, $user_obj)] sub alloc { @@ -84,6 +100,7 @@ sub alloc die "trying to create a duplicate channel for $call" if $channels{$call}; $self->{call} = $call; + $self->{priv} = 0; $self->{conn} = $conn if defined $conn; # if this isn't defined then it must be a list if (defined $user) { $self->{user} = $user; @@ -211,7 +228,7 @@ sub msg return DXM::msg($self->{lang}, @_); } -# stick a broadcast on the delayed queue +# stick a broadcast on the delayed queue (but only up to 20 items) sub delay { my $self = shift; @@ -219,6 +236,9 @@ sub delay $self->{delayed} = [] unless $self->{delayed}; push @{$self->{delayed}}, $s; + if (@{$self->{delayed}} >= 20) { + shift @{$self->{delayed}}; # lose oldest one + } } # change the state of the channel - lots of scope for debugging here :-) @@ -233,9 +253,7 @@ sub state # if there is any queued up broadcasts then splurge them out here if ($self->{delayed} && ($self->{state} eq 'prompt' || $self->{state} eq 'convers')) { - for (@{$self->{delayed}}) { - $self->send($_); - } + $self->send (@{$self->{delayed}}); delete $self->{delayed}; } }