package POEDaemon::EasyDBI; use strict; use warnings FATAL => 'all'; no warnings 'redefine'; use Data::Dumper; use POE qw(Component::EasyDBI); use POEDaemon; sub states { return $_[0], [qw( edbi_start edbi_stop edbi_connect_error edbi_connected )]; } sub edbi_start { log_enabled && logline 'POE::Component::EasyDBI->spawn'; POE::Component::EasyDBI->spawn ( alias => 'edbi', dsn => cfg->{sql}->{dsn}, username => cfg->{sql}->{username}, password => cfg->{sql}->{password}, max_retries => -1, ping_timeout => 5, no_connect_failures => 1, alt_fork => 1, connect_error => [ MAIN_POE_SESSION_NAME, 'edbi_connect_error' ], connected => [ MAIN_POE_SESSION_NAME, 'edbi_connected' ], stopwatch => 1, ); } sub edbi_stop { my $kernel = $_[KERNEL]; $kernel->yield(eventsystem_input => { type => 'dbdisconnect', time => time_hires, }); $kernel->post(edbi => 'shutdown'); } sub edbi_connect_error { my $args = $_[ARG0]; log_enabled && logline "'%s'", $args->{error} || 'n/a'; } sub edbi_connected { my $args = $_[ARG0]; log_enabled && logline "\n%s", Dumper $args; } 1;