X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXChannel.pm;h=754cd5387127edab92d73b6ebec42a93199b5f05;hb=a2c19a364c62f032cacc0766d987db9daa1f9983;hp=e72be8020ae7c3c49740d90df4c48555702b23c5;hpb=324bd80ed4aef7e2636f5a03288788ce11ab2663;p=spider.git diff --git a/perl/DXChannel.pm b/perl/DXChannel.pm index e72be802..754cd538 100644 --- a/perl/DXChannel.pm +++ b/perl/DXChannel.pm @@ -70,6 +70,10 @@ use vars qw(%channels %valid); group => '0,Access Group,parray', # used to create a group of users/nodes for some purpose or other isolate => '9,Isolate network,yesno', delayed => '9,Delayed messages,parray', + annfilter => '9,Announce Filter', + wwvfilter => '9,WWV Filter', + spotfilter => '9,Spot Filter', + passwd => '9,Passwd List,parray', ); # create a new channel object [$obj = DXChannel->new($call, $msg_conn_obj, $user_obj)] @@ -80,15 +84,18 @@ 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 - $self->{user} = $user if defined $user; + if (defined $user) { + $self->{user} = $user; + $self->{lang} = $user->lang; + $user->new_group() if !$user->group; + $self->{group} = $user->group; + } $self->{startt} = $self->{t} = time; $self->{state} = 0; $self->{oldstate} = 0; - $self->{lang} = $user->{lang} if defined $user; $self->{lang} = $main::lang if !$self->{lang}; - $user->new_group() if !$user->group; - $self->{group} = $user->group; $self->{func} = ""; bless $self, $pkg; return $channels{$call} = $self; @@ -205,7 +212,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; @@ -213,6 +220,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 :-) @@ -227,9 +237,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}; } }