I'm using that: $poe_kernel->run_one_timeslice();
To avoid a warning, something along the lines of: POE::Kernel->run never called. I stuck the $poe_kernel->run() before the POE block. I copied the code you originally posted to help me (http://www.mail-archive.com/[EMAIL PROTECTED]/msg01803.html), again, and I'm going to try to rework it. I probably missed something when I re-wrote it Thanks Jay ----- Original Message ----- From: "Rocco Caputo" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Sunday, January 25, 2004 3:15 PM Subject: Re: How to avoid connect,disconnect,connect...in a package - Revisited > On Sun, Jan 25, 2004 at 02:02:40PM -0600, Jay Strauss wrote: > > Hi, > > > > I have the following code. But the "connect" sub gets called regardless of > > whether there is a connection or not (I don't even have the server running > > for the test). Which in turn produces: > > > > Can't locate object method "put" via package "POE::Wheel::SocketFactory" > > (perhaps you forgot to load "POE::Wheel::SocketFactory"?) at > > /home/jstrauss/tradestudy/lib/perl/TradeStudy/TWS_Client.pm line 50. > > > > when I call "quote". > > > > If I move the $poe_kernel->run(), below the POE::Component::Client::TCP > > block then I get a connection error (like I expect). > > > > I can't see why "connect" is getting called, before a real connection is > > made. I can't see my problem (I could have sworn I had this working 3 weeks > > ago). Could someone point me in the right direction. > > > > Thanks > > Jay > > I've simplified your test case to > > #!/usr/bin/perl > > use 5.006; > use strict; > use warnings; > > use POE qw(Component::Client::TCP Filter::Reference); > > my $is_connected = 0; > > $poe_kernel->run(); > > POE::Component::Client::TCP->new( > RemoteAddress => "localhost", > Filter => "POE::Filter::Reference", > RemotePort => 12001, > Alias => "client_connection", > Connected => \&connect, > Disconnected => \&disconnect, > ServerInput => \&receive, > ); > > sub connect { > warn "connect"; > } > > sub disconnect { > warn "disconnect"; > } > > sub receive { > warn "receive"; > } > > What strikes me is that you're calling $poe_kernel->run() before you create the > client. The run() method runs POE until completion---which often involves > every session and component finishing and stopping. > > Then you create a client connection, but you don't call run() to execute it. > So this session is built, and then it self-destructs without doing anything > important. > > The cvs version of POE, which is being wrapped up for its 0.28 release, doesn't > display anything when either your original or my simplified test cases are > run. > > -- > Rocco Caputo - [EMAIL PROTECTED] - http://poe.perl.org/ > >
