package UR::Service::RPC::TcpConnectionListener;
use UR;
use strict;
use warnings;
our $VERSION = "0.45"; # UR $VERSION;
class UR::Service::RPC::TcpConnectionListener {
is => 'UR::Service::RPC::Executer',
};
sub execute {
my($self,$rpcserver) = @_;
my $fh = $self->fh;
my $socket = $fh->accept();
unless ($self->authenticate($socket)) {
$socket->close();
return;
}
my $exec = $self->create_worker($socket);
$rpcserver->add_executer($exec);
return $exec;
}
# Sub classes can override this
sub authenticate {
# my($self,$new_socket) = @_;
return 1;
}
# Child classes can override either of these to get custom behavior
sub worker_class_name {
'UR::Service::RPC::Executer';
}
sub create_worker {
my($self,$new_socket) = @_;
my $class = $self->worker_class_name;
my $exec = $class->create(fh => $new_socket);
return $exec;
}
1;