The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
#!/usr/bin/perl -w

use POE;
use POE::Component::Server::IRC::OperServ;

my ($pocosi) = POE::Component::Server::IRC::OperServ->spawn( Alias => 'ircd', Debug => 1 );

POE::Session->create (
	inline_states => { _start => \&test_start,
			   _stop  => \&test_stop,
			   ircd_cmd_rehash => \&ircd_rehash },
	heap => { Auth => 1,
		  Obj  => $pocosi },
);

$poe_kernel->run();
exit 0;

sub test_start {
  my ($kernel,$heap) = @_[KERNEL,HEAP];

  $kernel->post ( 'ircd' => 'register' );
  $kernel->post ( 'ircd' => 'add_i_line' => { IPMask => '*', Port => 6969 } );
  $kernel->post ( 'ircd' => 'add_operator' => { UserName => 'Flibble', Password => 'letmein' } );
  $kernel->post ( 'ircd' => 'add_listener' => { Port => 6969 } );
  $kernel->post ( 'ircd' => 'set_motd' => [ 'This is an experimental server', 'Testing POE::Component::Server::IRC', 'Enjoy!' ] );
}

sub test_stop {
	print "Test Server stopped\n";
}

sub ircd_rehash {
  my ($kernel,$heap,$input) = @_[KERNEL,HEAP,ARG0];

  if ( $heap->{Auth} == 0 ) {
	$heap->{Auth} = 1;
  } else {
	$heap->{Auth} = 0;
  }
  $kernel->call ( 'ircd' => 'configure' => Auth => $heap->{Auth} );
  $kernel->call ( 'ircd' => 'ircd_server_wallops' => { command => 'WALLOPS', prefix => $heap->{Obj}->server_name(), params => [ 'Server rehashed by ' . $input->{prefix} ] } => undef );
}