You can use the session id of the first session to look it up, and then call its get_heap() method. I'm not sure this is "the" preferred way, the following code works fine to access the heap of first session from within an event handler of the second:
use strict;
use POE;
use POE::Wheel::SocketFactory;
my $session1 = POE::Session->create(
inline_states => {
_start => \&start1,
}
);
my $session1_id = $session1->ID();
POE::Session->create(
inline_states => {
_start => \&start2,
access_session1 => \&access,
},
);
POE::Kernel->run();
sub start1 {
# start something so the session doesn't go away.
$_[HEAP]->{factory} = POE::Wheel::SocketFactory->new(
BindPort => '88888',
SocketProtocol => 'tcp',
Reuse => 'on',
SuccessEvent => 'event_factory_success',
FailureEvent => 'event_fatal_error',
);
$_[HEAP]->{"test"} = {'a'=>1,'b'=>2};
}
sub start2 {
#fire an event
$_[KERNEL]->yield("access_session1");
}
sub access {
my $sess = $_[KERNEL]->alias_resolve($session1_id);
my $data = $sess->get_heap()->{"test"};
foreach my $k (keys %$data){
print "$k, $data->{$k}\n";
}
}
__OUTPUT__
a, 1
b, 2
-
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.
|