Cluster-Init
view release on metacpan or search on metacpan
lib/Cluster/Init/Daemon.pm view on Meta::CPAN
package Cluster::Init::Daemon;
use strict;
use warnings;
use Data::Dump qw(dump);
use Carp::Assert;
use IO::Socket;
use IPC::LDT;
use Event;
my $debug=$ENV{DEBUG} || 0;
use Cluster::Init::Util qw(debug NOOP);
use Cluster::Init::Group;
use Cluster::Init::Process;
use Cluster::Init::Status;
use Cluster::Init::DFA::Daemon qw(:constants);
use base qw(Cluster::Init::DFA::Daemon Cluster::Init::Util);
#our %action = DFA_ACTIONS;
sub init
{
my $self = shift;
# $self->Cluster::Init::Util::init;
$self->fields qw(server client ldt);
$self->state(START);
# $self->idle(to=>$self,min=>10,max=>20,data=>IDLE);
$self->idle(IDLE);
$self->idle(WRITETIME,{min=>30,max=>45});
$self->{status}=Cluster::Init::Status->new
(
clstat=>$self->conf('clstat')
);
# debug dump $self;
return $self;
}
sub writestat
{
my $self=shift;
my $status=$self->{status};
$status->writestat(@_);
return '';
}
sub conf
{
my $self=shift;
my $var=shift;
return $self->{conf}->get($var);
}
sub bye
{
debug "bye bye";
Event::unloop();
return 1;
}
sub read_cltab
{
my $self=shift;
my $data=shift;
my $rc = $self->{conf}->read_cltab;
unless ($rc)
{
$data->{msg}=$self->{conf}->{msg};
return (CLTAB_NOK,$data);
}
return (CLTAB_OK,$data);
}
sub start_listener
{
my $self=shift;
if ($debug > 4)
{
require NetServer::Portal;
NetServer::Portal->default_start(); # creates server
warn "NetServer::Portal listening on port ".(7000+($$ % 1000))."\n";
$Event::DebugLevel=$debug;
}
unlink $self->conf('socket');
my $server = new IO::Socket::UNIX (
Local => $self->conf('socket'),
Type => SOCK_STREAM,
Listen => SOMAXCONN
);
if ($server)
{
$self->server($server);
$self->io(SOCKETIO, {fd=>$server});
return "";
}
else
{
return (SOCKET_ERROR);
}
}
sub watch_client
{
( run in 0.520 second using v1.01-cache-2.11-cpan-39bf76dae61 )