Re: Setting a variable in the heap
Thanks for the help. I have a question about the solution proposed: If I use a closure, do I need the Args=> [ $site ] entry in the session definition. One other issue that has cropped up, do I need to have a _start state defined or is that taken care of by the client/tcp PoPo? Thanks again, Jeff - Original Message - From: [EMAIL PROTECTED] <[EMAIL PROTECTED]> Date: Fri, 10 Sep 2004 00:50:38 -0500 Subject: Re: Setting a variable in the heap To: Jeff Konz <[EMAIL PROTECTED]> Cc: [EMAIL PROTECTED] It seems there is a handy "Started" argument to PoCo::Client::TCP::new. You can also do effectively the same thing by establishing a closure around $site below in one or more of your PoCo::Client::TCP event handlers. The following is untested: use POE qw(Component::Client::TCP); foreach my $site ( qw/ site1 site2 site3 / ) { POE::Component::Client::TCP->new ( RemoteAddress => $site, RemotePort => 6789, #Started => sub { $_[HEAP]->{sitename} = $site; }, # could do it with a closure Started => sub { $_[HEAP]->{sitename} = $_[ARG0]; }, # not a closure Args => [ $site ], ServerInput => sub { my ( $kernel, $heap, $input ) = @_[ KERNEL, HEAP, ARG0 ]; my $sitename = $heap->{sitename}; # print "got input from $site: $input\n"; # a closure gets you the same thing print "got input from $sitename: $input\n"; }, ); } - Lance Braswell - + 1 469 357 6112 Jeff Konz <[EMAIL PROTECTED]> 09/09/2004 09:17 PM Please respond to Jeff Konz <[EMAIL PROTECTED]> [EMAIL PROTECTED] cc SubjectSetting a variable in the heap Hello, I am a new user of POE and I have a script that creates a connection to a tcp server and am processing the data coming from that server. I have 7 different servers that I run the script against. I would like to create a single POE script that does what I need. I know that I can set up individual sessions within the script to handle this. In order to process the data, my state needs to know what system the data comes from. The easiest way I see to do this is to have a variable in the sessions heap that is something like: heap->{sitename} = site1 So my question is two fold, first is this the proper syntax to do this and second if it is, where do I put this statment within the POE script( I.E. Within the new() construct of the POE::Component::Client::TCP or somewhere else)? I have read the docs that are available, but I can not find a reference to setting vars within the heap. Thanks for any help you can provide, Jeff
Re: Setting a variable in the heap
> If I use a closure, do I need the Args=> [ $site ] entry in the > session definition. No. Though it doesn't really matter if it is there for the closure case, it just doesn't get used. It is also an interesting academic exercise as to why: my $site; Started => sub { $_[HEAP]->{sitename} = $site; } is a closure but Started => sub { $_[HEAP]->{sitename} = $_[ARG0]; } is not a closure I mean is not @_ defined at the subroutine definiton time? Hmmm... ;) > One other issue that has cropped up, do I need to have a _start state > defined or is that taken care of by the client/tcp PoPo? >From the PoCo::Client::TCP::new source: my $start_callback = delete $param{Started}; # and later $session_type->create ( @$session_params, inline_states => { _start => sub { my ($kernel, $heap) = @_[KERNEL, HEAP]; $heap->{shutdown_on_error} = 1; $kernel->alias_set( $alias ) if defined $alias; $kernel->yield( 'reconnect' ); $start_callback->(@_); }, # So it is handled in the PoCo and "Started" is your way in. Jeff Konz <[EMAIL PROTECTED]> wrote on 09/13/2004 10:15:52 AM: > Thanks for the help. I have a question about the solution proposed: > > If I use a closure, do I need the Args=> [ $site ] entry in the > session definition. > > One other issue that has cropped up, do I need to have a _start state > defined or is that taken care of by the client/tcp PoPo? > > Thanks again, > > Jeff > > > - Original Message - > From: [EMAIL PROTECTED] <[EMAIL PROTECTED]> > Date: Fri, 10 Sep 2004 00:50:38 -0500 > Subject: Re: Setting a variable in the heap > To: Jeff Konz <[EMAIL PROTECTED]> > Cc: [EMAIL PROTECTED] > > > It seems there is a handy "Started" argument to > PoCo::Client::TCP::new. You can also do effectively the same thing by > establishing a closure around $site below in one or more of your > PoCo::Client::TCP event handlers. > > The following is untested: > > use POE qw(Component::Client::TCP); > > foreach my $site ( qw/ site1 site2 site3 / ) { > POE::Component::Client::TCP->new > ( RemoteAddress => $site, > RemotePort => 6789, > #Started => sub { $_[HEAP]->{sitename} = $site; }, # > could do it with a closure > Started => sub { $_[HEAP]->{sitename} = $_[ARG0]; }, > # not a closure > Args => [ $site ], > ServerInput => sub { > my ( $kernel, $heap, $input ) = @_[ KERNEL, > HEAP, ARG0 ]; > my $sitename = $heap->{sitename}; > # print "got input from $site: $input\n"; # a > closure gets you the same thing > print "got input from $sitename: $input\n"; > }, > ); > } > - > Lance Braswell - + 1 469 357 6112 > > > > Jeff Konz <[EMAIL PROTECTED]> > > 09/09/2004 09:17 PM > > Please respond to > Jeff Konz <[EMAIL PROTECTED]> > > > [EMAIL PROTECTED] > > cc > > SubjectSetting a variable in the heap > > > > > > > > > > > > Hello, > > I am a new user of POE and I have a script that creates a connection > to a tcp server and am processing the data coming from that server. I > have 7 different servers that I run the script against. > > I would like to create a single POE script that does what I need. I > know that I can set up individual sessions within the script to handle > this. In order to process the data, my state needs to know what > system the data comes from. > > The easiest way I see to do this is to have a variable in the sessions > heap that is something like: > > heap->{sitename} = site1 > > So my question is two fold, first is this the proper syntax to do this > and second if it is, where do I put this statment within the POE > script( I.E. Within the new() construct of the > POE::Component::Client::TCP or somewhere else)? > > I have read the docs that are available, but I can not find a > reference to setting vars within the heap. > > Thanks for any help you can provide, > > Jeff
Re: Setting a variable in the heap
It seems there is a handy "Started" argument to PoCo::Client::TCP::new. You can also do effectively the same thing by establishing a closure around $site below in one or more of your PoCo::Client::TCP event handlers. The following is untested: use POE qw(Component::Client::TCP); foreach my $site ( qw/ site1 site2 site3 / ) { POE::Component::Client::TCP->new ( RemoteAddress => $site, RemotePort => 6789, #Started => sub { $_[HEAP]->{sitename} = $site; }, # could do it with a closure Started => sub { $_[HEAP]->{sitename} = $_[ARG0]; }, # not a closure Args => [ $site ], ServerInput => sub { my ( $kernel, $heap, $input ) = @_[ KERNEL, HEAP, ARG0 ]; my $sitename = $heap->{sitename}; # print "got input from $site: $input\n"; # a closure gets you the same thing print "got input from $sitename: $input\n"; }, ); } - Lance Braswell - + 1 469 357 6112 Jeff Konz <[EMAIL PROTECTED]> 09/09/2004 09:17 PM Please respond to Jeff Konz <[EMAIL PROTECTED]> To [EMAIL PROTECTED] cc Subject Setting a variable in the heap Hello, I am a new user of POE and I have a script that creates a connection to a tcp server and am processing the data coming from that server. I have 7 different servers that I run the script against. I would like to create a single POE script that does what I need. I know that I can set up individual sessions within the script to handle this. In order to process the data, my state needs to know what system the data comes from. The easiest way I see to do this is to have a variable in the sessions heap that is something like: heap->{sitename} = site1 So my question is two fold, first is this the proper syntax to do this and second if it is, where do I put this statment within the POE script( I.E. Within the new() construct of the POE::Component::Client::TCP or somewhere else)? I have read the docs that are available, but I can not find a reference to setting vars within the heap. Thanks for any help you can provide, Jeff
Setting a variable in the heap
Hello, I am a new user of POE and I have a script that creates a connection to a tcp server and am processing the data coming from that server. I have 7 different servers that I run the script against. I would like to create a single POE script that does what I need. I know that I can set up individual sessions within the script to handle this. In order to process the data, my state needs to know what system the data comes from. The easiest way I see to do this is to have a variable in the sessions heap that is something like: heap->{sitename} = site1 So my question is two fold, first is this the proper syntax to do this and second if it is, where do I put this statment within the POE script( I.E. Within the new() construct of the POE::Component::Client::TCP or somewhere else)? I have read the docs that are available, but I can not find a reference to setting vars within the heap. Thanks for any help you can provide, Jeff