3 # A thing that implements dxcluster 'protocol'
5 # This is a perl module/program that sits on the end of a dxcluster
6 # 'protocol' connection and deals with anything that might come along.
8 # this program is called by ax25d and gets raw ax25 text on its input
10 # Copyright (c) 1998 Dirk Koopman G1TLH
22 @inqueue = undef; # the main input queue, an array of hashes
24 # handle out going messages
27 my ($conn, $sort, $call, $line) = @_;
29 print DEBUG "$t > $sort $call $line\n" if defined DEBUG;
30 print "> $sort $call $line\n";
31 $conn->send_now("$sort$call|$line");
36 my ($conn, $sort, $call, $line) = @_;
38 print DEBUG "$t > $sort $call $line\n" if defined DEBUG;
39 print "> $sort $call $line\n";
40 $conn->send_later("$sort$call|$line");
43 # handle disconnections
47 my ($user) = $dxconn->{user};
48 my ($conn) = $dxconn->{conn};
49 $user->close() if defined $user;
54 # handle incoming messages
57 my ($conn, $msg, $err) = @_;
58 my $dxconn = DXConnect->get_by_cnum($conn); # get the dxconnnect object for this message
60 if (defined $err && $err) {
65 my $self = bless {}, "inqueue";
66 $self->{dxconn} = $dxconn;
77 # cease running this program, close down all the connections nicely
81 foreach $dxconn (DXConnect->get_all()) {
86 # this is where the input queue is dealt with and things are dispatched off to other parts of
90 my $self = shift @inqueue;
93 my $data = $self->{data};
94 my $dxconn = $self->{dxconn};
95 my ($sort, $call, $line) = $data =~ /^(\w)(\S+)|(.*)$/;
97 # do the really sexy console interface bit! (Who is going to do the TK interface then?)
98 print DEBUG atime, " < $sort $call $line\n" if defined DEBUG;
99 print "< $sort $call $line\n";
103 if ($dxconn) { # there should not be one of these, disconnect
106 my $user = DXUser->get($call); # see if we have one of these
111 #############################################################
113 # The start of the main line of code
115 #############################################################
117 # open the debug file, set various FHs to be unbuffered
118 open(DEBUG, ">>$debugfn") or die "can't open $debugfn($!)\n";
119 select DEBUG; $| = 1;
120 select STDOUT; $| = 1;
122 # initialise User file system
123 DXUser->init($userfn);
125 # start listening for incoming messages/connects
126 Msg->new_server("$clusteraddr", $clusterport, \&login);
129 $SIG{'INT'} = \&cease;
130 $SIG{'TERM'} = \&cease;
131 $SIG{'HUP'} = 'IGNORE';
133 # this, such as it is, is the main loop!
135 Msg->event_loop(1, 0.001);