# -*- perl -*-
#
# $Id: server,v 1.2 1999/04/09 19:56:24 joe Exp $
#
# This example implements a very simple server, let's call it
# multiplier. When a client connects, it waits for decimal numbers
# as input. These numbers are written back, multiplied by 2.
#
require 5.004;
use strict;
use lib qw(blib/arch blib/lib);
$| = 1;
require Net::Daemon::Test;
require IO::Socket;
package Multiplier;
use vars qw($VERSION @ISA);
$VERSION = '0.01';
@ISA = qw(Net::Daemon::Test);
sub Version ($) {
return "Multiplier - A simple network calculator; 1998, Jochen Wiedmann";
}
sub GetLine {
my $sock = shift;
$sock->getline();
}
sub Print {
my $sock = shift;
$sock->print(@_) && $sock->flush();
}
sub Run ($) {
my $self = shift;
my($line, $sock);
$sock = $self->{'socket'};
eval {
while (1) {
if (!defined($line = GetLine($sock))) {
if ($sock->error()) {
die "Client connection error " . $sock->error() . " ($!)";
}
last;
}
my $num;
{
my $lock = lock($Net::Daemon::RegExpLock)
if ($self->{'mode'} eq 'threads');
if ($line =~ /(\d+)/) {
$num = $1;
}
}
if (defined($num)) {
if (!Print($sock, $num*2, "\n")) {
die "Client connection error " . $sock->error() .
" ($!) while writing.";
}
} else {
die "Server cannot parse input: $line";
}
}
};
if ($@) {
print STDERR "$@\n";
$self->Error($@);
}
$sock->close();
}
package main;
my $server = Multiplier->new({ 'pidfile' => 'none'
}, \@ARGV);
$server->Bind();