Hi,

I'm using POE for 3 months now with great pleasure. Thanks to all the
developers!

I'm now playing with TCP client and server.
I've created a POE::Component::Server::TCP which has global state stored in
its HEAP, initialized in the Started event.

How can I get access to that HEAP from the Client* events (ClientConnected
in particular) as those are called from a different session ?
Maybe there is a parent-child relationship between the sessions I could use
to retrieve the server session and call it's ->get_heap() ?.

Below is some sample code that I'm sure you'll help me to complete.

Olivier
dolmen on cpan.org


#!/usr/bin/perl

use strict;
use warnings;
use Test::More tests => 8;

use POE qw(Component::Server::TCP Component::Client::TCP);


my $host = 'localhost';
my $port = 12344;

POE::Component::Server::TCP->new(
  Alias         => "server",
  Address       => $host,
  Port          => $port,
  Started       => sub {
    pass "[Server] Started #".$_[SESSION]->ID;
    $_[HEAP]{test} = 42;
  },
  ClientConnected => sub {
    pass "[Server] ClientConnected #".$_[SESSION]->ID;
    # How to get access to {test} from the server session's HEAP ?
    #is(???, 42, "Server HEAP access");
  },
  ClientInput => sub {
    pass "[Server] ClientInput #".$_[SESSION]->ID;
    diag($_[ARG0]);
  },
  ClientDisconnected => sub {
    pass "[Server] ClientDisconnected #".$_[SESSION]->ID;
    $poe_kernel->post('server', 'shutdown');
  },
);

POE::Component::Client::TCP->new(
  Alias         => "client",
  RemoteAddress => $host,
  RemotePort    => $port,
  Started       => sub {
    pass "[Client] Started";
  },
  Connected => sub {
    pass "[Client] Connected";
    $_[HEAP]{server}->put("Hello");
    $poe_kernel->yield('shutdown');
  },
  ServerInput => sub { },
  Disconnected => sub {
    pass "[Client] Disconnected";
  },
);

$poe_kernel->run;

pass 'Stopped';

Reply via email to