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 )