App-Context
view release on metacpan or search on metacpan
lib/App/Context/POE/Server.pm view on Meta::CPAN
$async_event = $self->abort_running_async_event($runtime_event_token);
}
}
&App::sub_exit($async_event) if ($App::trace);
return($async_event);
}
sub abort_running_async_event {
&App::sub_entry if ($App::trace);
my ($self, $runtime_event_token) = @_;
my $running_async_event = $self->{running_async_event};
my $pending_async_events = $self->{pending_async_events};
my $async_event = $running_async_event->{$runtime_event_token};
if ($async_event) {
$self->{num_async_events}--;
delete $self->{running_async_event}{$runtime_event_token};
$self->_abort_running_async_event($runtime_event_token, @$async_event);
}
&App::sub_exit($async_event) if ($App::trace);
return($async_event);
}
# $runtime_event_tokens take the following forms:
# $runtime_event_token = $pid; -- App::Context::POE::Server::send_async_event_now() and ::finish_pid()
sub _abort_running_async_event {
&App::sub_entry if ($App::trace);
my ($self, $runtime_event_token, $event, $callback_event) = @_;
if ($runtime_event_token =~ /^[0-9]+$/) {
kill(15, $runtime_event_token);
}
else {
$self->log({level=>3},"Unable to abort running async event [$runtime_event_token]\n");
}
&App::sub_exit() if ($App::trace);
}
#############################################################################
# user()
#############################################################################
=head2 user()
The user() method returns the username of the authenticated user.
The special name, "guest", refers to the unauthenticated (anonymous) user.
* Signature: $username = $context->user();
* Param: void
* Return: string
* Throws: <none>
* Since: 0.01
Sample Usage:
$username = $context->user();
=cut
sub user {
&App::sub_entry if ($App::trace);
my $self = shift;
my $user = $self->{user} || getlogin || (getpwuid($<))[0] || "guest";
&App::sub_exit($user) if ($App::trace);
$user;
}
#############################################################################
### POE state routines
#############################################################################
sub _default {
&App::sub_entry if ($App::trace);
my ( $self, $kernel, $heap, $state, $args ) = @_[ OBJECT, KERNEL, HEAP, ARG0, ARG1 ];
my (@args);
@args = @$args if (ref($args) eq "ARRAY");
@args = ($args) if (!ref($args));
$self->log({level=>3},"POE: _default: Entered an unhandled state ($state) with args (@args)\n") if $self->{poe_trace};
&App::sub_exit() if ($App::trace);
}
sub _start {
&App::sub_entry if ($App::trace);
my ( $self, $kernel, $heap ) = @_[ OBJECT, KERNEL, HEAP ];
my $name = $self->{poe_session_name};
$kernel->alias_set($name);
$kernel->sig(CHLD => "poe_sigchld");
$kernel->sig(HUP => "poe_sigignore");
$kernel->sig(INT => "poe_sigterm");
$kernel->sig(QUIT => "poe_sigterm");
$kernel->sig(USR1 => "poe_sigignore");
$kernel->sig(USR2 => "poe_sigignore");
$kernel->sig(TERM => "poe_sigterm");
$kernel->call( IKC => publish => $name, $self->{poe_ikc_published_states} );
$kernel->post("IKC", "monitor", "*",
{register => "ikc_register",
unregister => "ikc_unregister",
shutdown => "ikc_shutdown"});
# don't start kicking off async events until we give the nodes a chance to register themselves
$kernel->delay_set("poe_event_loop_extension", 5) if (!$self->{disable_event_loop_extensions});
$kernel->delay_set("poe_alarm", 5);
$kernel->delay_set("poe_profile", $self->{poe_profile}) if ($self->{poe_profile});
&App::sub_exit() if ($App::trace);
}
sub _stop {
&App::sub_entry if ($App::trace);
my ( $self, $kernel, $heap, $state, $args ) = @_[ OBJECT, KERNEL, HEAP, ARG0, ARG1 ];
#sleep(1); # take a second to let child processes to die (perhaps not necessary, perhaps necessary when using POE::Wheel::Run)
&App::sub_exit() if ($App::trace);
}
sub ikc_register {
&App::sub_entry if ($App::trace);
my ($self, $kernel, $session_name) = @_[OBJECT, KERNEL, ARG1];
$self->log({level=>3},"ikc_register: ($session_name)\n") if $self->{options}{poe_ikc_debug};
my ($retval);
( run in 0.790 second using v1.01-cache-2.11-cpan-f56aa216473 )