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');
}
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.