2 # DX database control routines
4 # This manages the on-line cluster user 'database'
6 # This should all be pretty trees and things, but for now I
7 # just can't be bothered. If it becomes an issue I shall
10 # Copyright (c) 1998 - Dirk Koopman G1TLH
20 %cluster = (); # this is where we store the dxcluster database
24 my ($pkg, $call, $confmode, $here, $dxprot) = @_;
25 die "$call is already alloced" if $cluster{$call};
27 $self->{call} = $call;
28 $self->{confmode} = $confmode;
29 $self->{here} = $here;
30 $self->{dxprot} = $dxprot;
32 $cluster{$call} = bless $self, $pkg;
36 # search for a call in the cluster
39 my ($pkg, $call) = @_;
40 return $cluster{$call};
46 return values(%cluster);
52 delete $cluster{$self->{call}};
56 mynode => 'Parent Node',
58 confmode => 'Conference Mode',
60 dxprot => 'Channel ref',
61 version => 'Node Version',
69 return if $name =~ /::DESTROY$/;
72 die "Non-existant field '$AUTOLOAD'" if !$valid{$name};
73 @_ ? $self->{$name} = shift : $self->{$name} ;
77 # USER special routines
88 my ($pkg, $mynode, $call, $confmode, $here, $dxprot) = @_;
89 my $self = $pkg->alloc($call, $confmode, $here, $dxprot);
90 $self->{mynode} = $mynode;
92 $users{$call} = $self;
99 $self->delcluster(); # out of the whole cluster table
100 delete $users{$self->{call}}; # out of the users table
105 return %users + 1; # + 1 for ME (naf eh!)
109 # NODE special routines
114 @ISA = qw(DXCluster);
120 my ($pkg, $call, $confmode, $here, $version, $dxprot) = @_;
121 my $self = $pkg->alloc($call, $confmode, $here, $dxprot);
122 $self->{version} = $version;
123 $nodes{$call} = $self;
130 my ($pkg, $call) = @_;
131 return $nodes{$call};
139 foreach $list (values(%nodes)) {
140 push @out, $list if $list->{version};
148 my $call = $self->call;
150 DXUser->delete($call); # delete all the users one this node
151 delete $nodes{$call};
156 return %nodes + 1; # + 1 for ME!