in reply to Adding sessions on-the-fly to POE program
I could be wrong, but I think you are registering to receive the PoCo::IRC's events from within the PoCo::Server::TCP session. It boils down to whether the client_input state is attached to the PoCo::Server::TCP session or to your session. The PoCo::IRC component could be sending events to the wrong one.
Update: I believe my post is correct. I have modified massacred your code to see which session is being called:
use POE qw(Component::Server::TCP Component::IRC); POE::Component::Server::TCP->new( Port => '9999', Address => '0.0.0.0', ClientInput => \&client_input, ); POE::Session->create( package_states => [ main => [qw(_start)], ], ); $poe_kernel->run(); sub _start { print "My session has id: ", $_[SESSION]->ID(), "\n"; } sub client_input { print "Starting bot in session: ", $_[SESSION]->ID(), "\n"; }
And it outputs the following:
My session has id: 3 Starting bot in session: 4
So it looks like client_input is being called on a different session than the one you need to register with POE::Component::IRC. I would probably solve this by creating a new state in your session that handles the PoCo::IRC instantiation and registration stuff. Something like this:
use POE qw(Component::Server::TCP Component::IRC); POE::Component::Server::TCP->new( Port => '9999', Address => '0.0.0.0', ClientInput => \&client_input, ); POE::Session->create( package_states => [ main => [qw(_start create_bot)], ], ); $poe_kernel->run(); sub create_bot { print "Starting bot in session: ", $_[SESSION]->ID(), "\n"; } sub _start { print "My session has id: ", $_[SESSION]->ID(), "\n"; $_[KERNEL]->alias_set("mine"); } sub client_input { $_[KERNEL]->post(mine => 'create_bot'); }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Adding sessions on-the-fly to POE program
by japhy (Canon) on Oct 26, 2004 at 22:33 UTC |