projects
/
spider.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
add various stats commands
[spider.git]
/
perl
/
DXCluster.pm
diff --git
a/perl/DXCluster.pm
b/perl/DXCluster.pm
index 021ff7f270875b3e0ea2cbab2e11609bc8c2e43e..8338cccb5a511c3da8e0d1096a5679d6520424fe 100644
(file)
--- a/
perl/DXCluster.pm
+++ b/
perl/DXCluster.pm
@@
-14,10
+14,8
@@
package DXCluster;
package DXCluster;
-use Exporter;
-@ISA = qw(Exporter);
use DXDebug;
use DXDebug;
-use
Carp
;
+use
DXUtil
;
use strict;
use vars qw(%cluster %valid);
use strict;
use vars qw(%cluster %valid);
@@
-25,16
+23,22
@@
use vars qw(%cluster %valid);
%cluster = (); # this is where we store the dxcluster database
%valid = (
%cluster = (); # this is where we store the dxcluster database
%valid = (
- mynode => '0,Parent Node
,showcall
',
+ mynode => '0,Parent Node',
call => '0,Callsign',
confmode => '0,Conference Mode,yesno',
here => '0,Here?,yesno',
call => '0,Callsign',
confmode => '0,Conference Mode,yesno',
here => '0,Here?,yesno',
- dxchan
=> '5,Channel ref
',
+ dxchan
call => '5,Channel Call
',
pcversion => '5,Node Version',
pcversion => '5,Node Version',
- list => '5,User List,dolist',
+ list => '5,User List,
DXCluster::
dolist',
users => '0,No of Users',
);
users => '0,No of Users',
);
+use vars qw($VERSION $BRANCH);
+$VERSION = sprintf( "%d.%03d", q$Revision$ =~ /(\d+)\.(\d+)/ );
+$BRANCH = sprintf( "%d.%03d", q$Revision$ =~ /\d+\.\d+\.(\d+)\.(\d+)/ ) || 0;
+$main::build += $VERSION;
+$main::branch += $BRANCH;
+
sub alloc
{
my ($pkg, $dxchan, $call, $confmode, $here) = @_;
sub alloc
{
my ($pkg, $dxchan, $call, $confmode, $here) = @_;
@@
-43,7
+47,7
@@
sub alloc
$self->{call} = $call;
$self->{confmode} = $confmode;
$self->{here} = $here;
$self->{call} = $call;
$self->{confmode} = $confmode;
$self->{here} = $here;
- $self->{dxchan
} = $dxchan
;
+ $self->{dxchan
call} = $dxchan->call
;
$cluster{$call} = bless $self, $pkg;
return $self;
$cluster{$call} = bless $self, $pkg;
return $self;
@@
-102,6
+106,14
@@
sub field_prompt
my ($self, $ele) = @_;
return $valid{$ele};
}
my ($self, $ele) = @_;
return $valid{$ele};
}
+#
+# return a list of valid elements
+#
+
+sub fields
+{
+ return keys(%valid);
+}
# this expects a reference to a list in a node NOT a ref to a node
sub dolist
# this expects a reference to a list in a node NOT a ref to a node
sub dolist
@@
-110,7
+122,8
@@
sub dolist
my $out;
my $ref;
my $out;
my $ref;
- foreach $ref (@{$self}) {
+ foreach my $call (keys %{$self}) {
+ $ref = $$self{$call};
my $s = $ref->{call};
$s = "($s)" if !$ref->{here};
$out .= "$s ";
my $s = $ref->{call};
$s = "($s)" if !$ref->{here};
$out .= "$s ";
@@
-136,10
+149,40
@@
sub cluster
return " $DXNode::nodes nodes, $users local / $tot total users Max users $DXNode::maxusers Uptime $uptime";
}
return " $DXNode::nodes nodes, $users local / $tot total users Max users $DXNode::maxusers Uptime $uptime";
}
-sub DESTROY
+sub mynode
+{
+ my $self = shift;
+ my $noderef = shift;
+
+ if ($noderef) {
+ $self->{mynode} = $noderef->call;
+ } else {
+ $noderef = DXCluster->get_exact($self->{mynode});
+ unless ($noderef) {
+ my $mynode = $self->{mynode};
+ my $call = $self->{call};
+ dbg("parent node $mynode has disappeared from $call") if isdbg('err');
+ }
+ }
+ return $noderef;
+}
+
+sub dxchan
{
my $self = shift;
{
my $self = shift;
- dbg('cluster', "destroying $self->{call}\n");
+ my $dxchan = shift;
+
+ if ($dxchan) {
+ $self->{dxchancall} = $dxchan->call;
+ } else {
+ $dxchan = DXChannel->get($self->{dxchancall});
+ unless ($dxchan) {
+ my $dxcall = $self->{dxchancall};
+ my $call = $self->{call};
+ dbg("parent dxchan $dxcall has disappeared from $call") if isdbg('err');
+ }
+ }
+ return $dxchan;
}
no strict;
}
no strict;
@@
-152,6
+195,9
@@
sub AUTOLOAD
$name =~ s/.*:://o;
confess "Non-existant field '$AUTOLOAD'" if !$valid{$name};
$name =~ s/.*:://o;
confess "Non-existant field '$AUTOLOAD'" if !$valid{$name};
+ # this clever line of code creates a subroutine which takes over from autoload
+ # from OO Perl - Conway
+ *{$AUTOLOAD} = sub {@_ > 1 ? $_[0]->{$name} = $_[1] : $_[0]->{$name}} ;
@_ ? $self->{$name} = shift : $self->{$name} ;
}
@_ ? $self->{$name} = shift : $self->{$name} ;
}
@@
-174,9
+220,9
@@
sub new
die "tried to add $call when it already exists" if DXCluster->get_exact($call);
my $self = $pkg->alloc($dxchan, $call, $confmode, $here);
die "tried to add $call when it already exists" if DXCluster->get_exact($call);
my $self = $pkg->alloc($dxchan, $call, $confmode, $here);
- $self->{mynode} = $node;
+ $self->{mynode} = $node
->call
;
$node->add_user($call, $self);
$node->add_user($call, $self);
- dbg(
'cluster', "allocating user $call to $node->{call} in cluster\n"
);
+ dbg(
"allocating user $call to $node->{call} in cluster\n") if isdbg('cluster'
);
return $self;
}
return $self;
}
@@
-184,10
+230,10
@@
sub del
{
my $self = shift;
my $call = $self->{call};
{
my $self = shift;
my $call = $self->{call};
- my $node = $self->
{mynode}
;
+ my $node = $self->
mynode
;
$node->del_user($call);
$node->del_user($call);
- dbg(
'cluster', "deleting user $call from $node->{call} in cluster\n"
);
+ dbg(
"deleting user $call from $node->{call} in cluster\n") if isdbg('cluster'
);
}
sub count
}
sub count
@@
-221,10
+267,10
@@
sub new
my $self = $pkg->alloc($dxchan, $call, $confmode, $here);
$self->{pcversion} = $pcversion;
$self->{list} = { } ;
my $self = $pkg->alloc($dxchan, $call, $confmode, $here);
$self->{pcversion} = $pcversion;
$self->{list} = { } ;
- $self->{mynode} = $self
;
# for sh/station
+ $self->{mynode} = $self
->call;
# for sh/station
$self->{users} = 0;
$nodes++;
$self->{users} = 0;
$nodes++;
- dbg(
'cluster', "allocating node $call to cluster\n"
);
+ dbg(
"allocating node $call to cluster\n") if isdbg('cluster'
);
return $self;
}
return $self;
}
@@
-250,7
+296,7
@@
sub del
$ref->del(); # this also takes them out of this list
}
delete $DXCluster::cluster{$call}; # remove me from the cluster table
$ref->del(); # this also takes them out of this list
}
delete $DXCluster::cluster{$call}; # remove me from the cluster table
- dbg(
'cluster', "deleting node $call from cluster\n"
);
+ dbg(
"deleting node $call from cluster\n") if isdbg('cluster'
);
$users -= $self->{users}; # it may be PC50 updated only therefore > 0
$users = 0 if $users < 0;
$nodes--;
$users -= $self->{users}; # it may be PC50 updated only therefore > 0
$users = 0 if $users < 0;
$nodes--;
@@
-303,5
+349,13
@@
sub dolist
{
}
{
}
+
+sub DESTROY
+{
+ my $self = shift;
+ undef $self->{list} if $self->{list};
+}
+
+
1;
__END__
1;
__END__