Attached.  Sample output:

1) macbookpoe:~/projects/misc/support% perl shutdown-another.pl
Fri Aug 19 08:47:39 2011 - Controller started.  Press Ctrl+C to exit.
Fri Aug 19 08:47:40 2011 - Ticker is working.
Fri Aug 19 08:47:41 2011 - Ticker is working.
Fri Aug 19 08:47:42 2011 - Ticker is working.
^CFri Aug 19 08:47:42 2011 - Controller caught sigint.  Shutting down...
Fri Aug 19 08:47:42 2011 - Ticker is shutting down.  Please be patient...
Fri Aug 19 08:47:43 2011 - Ticker has finished shutting down.
Fri Aug 19 08:47:43 2011 - Controller is being garbage collected.
Fri Aug 19 08:47:43 2011 - Ticker session is being destroyed.
1) macbookpoe:~/projects/misc/support% 

-- 
Rocco Caputo <rcap...@pobox.com>

On Aug 19, 2011, at 04:02, Rizwan Hisham wrote:

> Dear List,
> How do I kill a running session from inside another session. There is no
> parent child relation between the two session, they totally independent from
> each other. Cant seem to find anyway to do it.
> 
> If its possible then kindly provide a small sample code as well :)
> 
> Thanks
> 
> -- 
> Best Ragards
> Rizwan Qureshi
> VoIP/Asterisk Engineer
> Axvoice Inc.
> 
> V: +92 (0) 3333 6767 26
> E: rizwanhas...@gmail.com
> W: www.axvoice.com

#!/usr/bin/env perl

use POE;

POE::Session->create(
	inline_states => {
		_start => sub {
			$_[KERNEL]->alias_set("ticker");
			$_[KERNEL]->delay(tick => 1);
		},
		tick => sub {
			_log("Ticker is working.");
			$_[KERNEL]->delay(tick => 1);
		},
		shutdown => sub {
			# Clean up our resources so we can exit cleanly.
			_log("Ticker is shutting down.  Please be patient...");
			$_[KERNEL]->delay(tick => undef);

			# Pretend shutdown takes some time.
			$_[KERNEL]->delay(faux_shutdown => 1);
		},
		faux_shutdown => sub {
			_log("Ticker has finished shutting down.");
		},
		_stop => sub {
			_log("Ticker session is being destroyed.");
		},
	},
);

POE::Session->create(
	inline_states => {
		_start => sub {
			$_[KERNEL]->alias_set("controller");
			$_[KERNEL]->sig(INT => "got_sigint");

			_log("Controller started.  Press Ctrl+C to exit.");
		},
		got_sigint => sub {
			_log("Controller caught sigint.  Shutting down...");
			$_[KERNEL]->post( ticker => "shutdown" );
			$_[KERNEL]->sig_handled();
		},
		_stop => sub {
			_log("Controller is being destroyed.");
		},
	},
);

POE::Kernel->run();
exit;

sub _log {
	my $message = join "", @_;
	print scalar(localtime), " - $message\n";
}

Reply via email to