New to POE, so please be gentle. Using Tk and POE to write a client. Have read that there are some issues with Tk, POE and ActiveStates Perl on Win32; however, I think my problems are more basic. I am using the TkClient example from the Cookbook as the basis of my Tk interface.
I have been able to successfully connect to a server, display status messages in the Tk windows and receive input from the server. I cannot send info to the server. Would like to tie the 'Request Update' button to the 'send' event. How do I do this? vitals: POE = v0.27 OS=Windows 2000 ActiveStates Perl = v 5.8.0 Build 806 --- client.pl ----- #!/perl/bin/perl use warnings; use strict; use Tk; use POE; use POE::Filter::Stream; use POE::Component::Client::TCP; local $| = 1; my $svr = "localhost"; # Server's ip address my $port = "32080"; # Server's port which app is running on. my $status = "Starting point..."; # Create the session that will drive the user interface. POE::Session->create ( inline_states => { _start => \&ui_start, ct_start => sub { $_[HEAP]->{server}=POE::Component::Client::TCP->new ( Alais => 'web', RemoteAddress => $svr, RemotePort => $port, Connected => \&handle_connect, ConnectError => \&handle_connect_error, Disconnected => \&handle_disconnect, ServerInput => \&handle_server_input, ServerError => \&handle_server_error, ServerFlushed => \&handle_server_flush, send => \&handle_send, ); $status = "Connected"; }, cv_send => \&handle_send, # This doesnt work, but when I push the "request update" button I come here. } ); # Run the program until it is exited. $poe_kernel->run(); sub ui_start { my ( $kernel, $session, $heap ) = @_[ KERNEL, SESSION, HEAP ]; $poe_main_window->Label( -text => "Counter" )->pack; $heap->{counter_widget} = $poe_main_window->Label( -textvariable => \$status )->pack; $poe_main_window->Button ( -text => "Connect", -command => $session->postback("ct_start") )->pack; $poe_main_window->Button ( -text => "Request Update", -command => $session->postback("cv_send") # subst 'send' for 'cv_send' doesnt work )->pack; $poe_main_window->Button ( -text => "Disconnect", -command => $session->postback("Disconnect") )->pack; $status="Press Connect Button"; } sub handle_start { my @args = @_[ARG0..$#_]; } sub handle_connect { $status = "2Connected"; } sub handle_send { my ($kernel, $heap,$input_record) = @_[KERNEL, HEAP, ARG0]; chomp $input_record; print "Server send $input_record\n"; $_[HEAP]->{server}->put("$input_record\n") ; # <<<<<< This doesnt work } sub handle_connect_error { my ( $kernel, $heap, $syscall_name, $error_number, $error_string) = @_[KERNEL, HEAP,ARG0, ARG1, ARG2]; $status = "I had problems.\n$syscall_name\n $error_number\n$error_string"; } sub handle_disconnect { my ($kernel, $heap ) = @_[ KERNEL, HEAP ]; #$kernel->yield("shutdown"); $status = "Disconnect me."; } sub handle_server_input { my ($kernel, $heap,$input_record) = @_[KERNEL, HEAP, ARG0]; chomp $input_record; $status = "Server input:$input_record"; #print "Server input >$input_record<\n"; #$_[HEAP]->{server}->put("1") if ($input_record ne "Update requested"); } sub handle_server_error { my ($syscall_name, $error_number, $error_string) = @_[ARG0, ARG1, ARG2]; $status = "I had an error:\n$syscall_name\n $error_number\n$error_string"; } sub handle_server_flush { # no special parameters $status= "Time to flush\n"; } Thank you, Tom