Re: Callback to delay a Server::TCP component?

[email protected] ("[email protected]") Sun, 18 Apr 2010 18:32:51 -0700
Newsgroups perl.poe
Message-ID <[email protected]>
Hello,

    This is a problem that we've thought of and solved. See the 
"Concurrency" option to PoCo::Server::TCP

    
http://search.cpan.org/~rcaputo/POE-1.289/lib/POE/Component/Server/TCP.pm#Concurrency

    You must have missed that part or the docs wasn't clear. If you have 
suggestions on how to make it more clearer - please let us know!

    Happy hacking! :)

~Apocalypse

Mike Schilli wrote:
> Hi POE folks,
>
> while writing a port forwarder similar to the one in the POE cookbook,
> just by using POE::Component::Server::TCP and ::Client::TCP instead, I 
> hit
> a roadblock when it came to synchronizing the components.
>
> After POE::Component::Server::TCP has started up (binding to the 'From'
> port), if a client connects to it, the server will call the
> client_connect callback, which I'm using to spawn an instance of
> POE::Component::Client::TCP to connect to the 'To' port.
>
> At this time, I need the server to wait accepting requests from the
> connecting client *until* POE::Component::Client::TCP has connected to 
> the
> 'To' port.
>
> However, there's no way to say in the client_connect callback that the
> server should not proceed to the 'client_request' stage yet.
>
> I found a workaround by setting a global variable $CONNECTED in
>
>   my $client_session =
>     POE::Component::Client::TCP->new(
>         # ...
>         Connected => sub { $CONNECTED = 1; },
>         # ...
>
> and adding
>
>   $kernel->run_one_timeslice() while !$CONNECTED;
>
> to the client_request callback of the POE::Component::Server::TCP
> server. This does the trick, but I don't like that it's a
> global variable that allows only single use of this component.
>
> Is there a better way?
>
> -- Mike
>
> Mike Schilli
> [email protected]