add more routing code together with associated commands
[spider.git] / perl / DXChannel.pm
index 6b0bb554abebcbf877ad51558df696c4cd3e8f0b..8a300d5f24dd3823827d0f080f68cc176e54f0c1 100644 (file)
@@ -4,7 +4,7 @@
 # This is the base class for all channel operations, which is everything to do 
 # with input and output really.
 #
-# The instance variable in the outside world will be generally be called $dxchann
+# The instance variable in the outside world will be generally be called $dxchan
 #
 # This class is 'inherited' (if that is the goobledegook for what I am doing)
 # by various other modules. The point to understand is that the 'instance variable'
@@ -33,9 +33,10 @@ use DXDebug;
 use Filter;
 
 use strict;
-use vars qw(%channels %valid);
+use vars qw(%channels %valid @ISA $count);
 
 %channels = ();
+$count = 0;
 
 %valid = (
                  call => '0,Callsign',
@@ -89,26 +90,22 @@ use vars qw(%channels %valid);
                  logininfo => '9,Login info req,yesno',
                  talklist => '0,Talk List,parray',
                  cluster => '5,Cluster data',
+                 isbasic => '9,Internal Connection', 
+                 errors => '9,Errors',
+                 route => '9,Route Data',
                 );
 
 # 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->{spotsfilter};
-       undef $self->{inannfilter};
-       undef $self->{inwwvfilter};
-       undef $self->{inspotsfilter};
-       undef $self->{passwd};
-       undef $self->{node};
+       for (keys %$self) {
+               if (ref($self->{$_})) {
+                       delete $self->{$_};
+               }
+       }
+       dbg('chan', "DXChannel $self->{call} destroyed ($count)");
+       $count--;
 }
 
 # create a new channel object [$obj = DXChannel->new($call, $msg_conn_obj, $user_obj)]
@@ -134,6 +131,8 @@ sub alloc
        $self->{lang} = $main::lang if !$self->{lang};
        $self->{func} = "";
 
+       $count++;
+       dbg('chan', "DXChannel $self->{call} created ($count)");
        bless $self, $pkg; 
        return $channels{$call} = $self;
 }
@@ -369,12 +368,9 @@ sub disconnect
 {
        my $self = shift;
        my $user = $self->{user};
-       my $conn = $self->{conn};
-       my $call = $self->{call};
        
-       $self->finish($conn);
        $user->close() if defined $user;
-       $conn->disconnect() if $conn;
+       $self->{conn}->disconnect;
        $self->del();
 }
 
@@ -442,7 +438,7 @@ sub decode_input
        
        # the above regexp must work
        unless (defined $sort && defined $call && defined $line) {
-               $data =~ s/([\x00-\x1f\x7f-\xff])/uc sprintf("%%%02x",ord($1))/eg;
+#              $data =~ s/([\x00-\x1f\x7f-\xff])/uc sprintf("%%%02x",ord($1))/eg;
                dbg('err', "DUFF Line on $chcall: $data");
                return ();
        }