remove finishes and derive disconnect instead

This commit is contained in:
minima 2001-03-14 00:48:35 +00:00
parent 5d2f2feddd
commit d4c9584441
6 changed files with 37 additions and 38 deletions

View File

@ -5,6 +5,7 @@
4. made the \r\n work correctly on External connections
5. removed client.pl
6. fixed memory leakages in DXMsg
7. fixed pc39/21 handling
10Mar01=======================================================================
1. minor changes to the admin manual to reflect differences in distibutions
thanks to pa3ezl (g0vgs)

View File

@ -123,11 +123,12 @@ sub normal
#
# end a connection (called by disconnect)
#
sub finish
sub disconnect
{
my $self = shift;
my $call = $self->call;
Log('BBS', "$call", "disconnected");
$self->SUPER::disconnect;
}
#

View File

@ -366,9 +366,7 @@ sub disconnect
{
my $self = shift;
my $user = $self->{user};
my $call = $self->{call};
$self->finish;
$user->close() if defined $user;
$self->{conn}->disconnect;
$self->del();

View File

@ -384,7 +384,7 @@ sub process
#
# finish up a user context
#
sub finish
sub disconnect
{
my $self = shift;
my $call = $self->call;
@ -409,6 +409,8 @@ sub finish
Log('DXCommand', "$call disconnected");
my $ref = DXCluster->get_exact($call);
$ref->del() if $ref;
$self->SUPER::disconnect;
}
#

View File

@ -1144,38 +1144,6 @@ sub process
#
# finish up a pc context
#
sub finish
{
my $self = shift;
my $call = $self->call;
my $ref = DXCluster->get_exact($call);
# unbusy and stop and outgoing mail
my $mref = DXMsg::get_busy($call);
$mref->stop_msg($call) if $mref;
# broadcast to all other nodes that all the nodes connected to via me are gone
foreach my $node (grep { $_->dxchan == $self } DXNode::get_all) {
next if $node->call eq $call;
next if $node->call eq $main::mycall;
broadcast_ak1a(pc21($node->call, 'Gone.'), $self) unless $self->{isolate};
}
# remove outstanding pings
delete $pings{$call};
# now broadcast to all other ak1a nodes that I have gone
broadcast_ak1a(pc21($call, 'Gone.'), $self) unless $self->{isolate};
# I was the last node visited
$self->user->node($main::mycall);
# send info to all logged in thingies
$self->tell_login('logoutn');
Log('DXProt', $call . " Disconnected");
$ref->del() if $ref;
}
#
# some active measures
@ -1682,11 +1650,40 @@ sub disconnect
{
my $self = shift;
my $nopc39 = shift;
my $call = $self->call;
if ($self->{conn} && !$nopc39) {
unless ($nopc39) {
$self->send_now("D", DXProt::pc39($main::mycall, $self->msg('disc1', "System Op")));
}
# unbusy and stop and outgoing mail
my $mref = DXMsg::get_busy($call);
$mref->stop_msg($call) if $mref;
# broadcast to all other nodes that all the nodes connected to via me are gone
foreach my $node (grep { $_->dxchan == $self } DXNode::get_all) {
next if $node->call eq $call;
next if $node->call eq $main::mycall;
broadcast_ak1a(pc21($node->call, 'Gone.'), $self) unless $self->{isolate};
$node->del;
}
# remove outstanding pings
delete $pings{$call};
# now broadcast to all other ak1a nodes that I have gone
broadcast_ak1a(pc21($call, 'Gone.'), $self) unless $self->{isolate};
# I was the last node visited
$self->user->node($main::mycall);
# send info to all logged in thingies
$self->tell_login('logoutn');
Log('DXProt', $call . " Disconnected");
my $ref = DXCluster->get_exact($call);
$ref->del() if $ref;
$self->SUPER::disconnect;
}

View File

@ -102,7 +102,7 @@ sub error_handler
{
my $dxchan = shift;
$dxchan->{conn}->set_error(undef) if exists $dxchan->{conn};
$dxchan->disconnect;
$dxchan->disconnect(1);
}
# handle incoming messages