X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXChannel.pm;h=9bde6aa8fe4a30829b5dfed54895ec92250fd0b7;hb=f3688be5d3f50cccf204d3d01dcaca1e9db7d4f7;hp=e3878ecf719f6fe2c8181a2d11c8323821d59c0f;hpb=cc91428ca79b3cdfdc7733505384f5983ad6c7fa;p=spider.git diff --git a/perl/DXChannel.pm b/perl/DXChannel.pm index e3878ecf..9bde6aa8 100644 --- a/perl/DXChannel.pm +++ b/perl/DXChannel.pm @@ -211,7 +211,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 +219,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 +236,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}; } }