mega-merge of major parts of mojo
[spider.git] / cmd / who.pl
1 #\r
2 # who : is online\r
3 # a complete list of stations connected\r
4 #\r
5 # Copyright (c) 1999 Dirk Koopman G1TLH\r
6 #\r
7 #\r
8 \r
9 \r
10 my $self = shift;\r
11 my $dxchan;\r
12 my @out;\r
13 \r
14 push @out, "  Callsign Type      Started           Name     Ave RTT Link";\r
15 \r
16 foreach $dxchan ( sort {$a->call cmp $b->call} DXChannel::get_all ) {\r
17     my $call = $dxchan->call();\r
18         my $t = cldatetime($dxchan->startt);\r
19         my $type = $dxchan->is_node ? "NODE" : "USER";\r
20         my $sort = "    ";\r
21         if ($dxchan->is_node) {\r
22                 $sort = "DXSP" if $dxchan->is_spider;\r
23                 $sort = "CLX " if $dxchan->is_clx;\r
24                 $sort = "DXNT" if $dxchan->is_dxnet;\r
25                 $sort = "AR-C" if $dxchan->is_arcluster;\r
26                 $sort = "AK1A" if $dxchan->is_ak1a;\r
27         } else {\r
28                 $sort = "LOCL" if $dxchan->conn->isa('IntMsg');\r
29                 $sort = "WEB " if $dxchan->is_web;\r
30                 $sort = "EXT " if $dxchan->conn->isa('ExtMsg');\r
31                 $type = "RBN " if $dxchan->is_rbn;              # Yes, this is NOT a typo\r
32         }\r
33         my $name = $dxchan->user->name || " ";\r
34         my $ping = $dxchan->is_node && $dxchan != $main::me ? sprintf("%5.2f", $dxchan->pingave) : "     ";\r
35         my $conn = $dxchan->conn;\r
36         my $ip = '';\r
37         if ($conn) {\r
38                 $ip = $dxchan->hostname;\r
39                 $ip = "AGW Port ($conn->{agwport})" if exists $conn->{agwport};\r
40         }\r
41         push @out, sprintf "%10s $type $sort $t %-10.10s $ping $ip", $call, $name;\r
42 }\r
43 \r
44 return (1, @out)\r