Help with POE::Filter::JSON

"Votava, Craig M \(Craig\)" <[email protected]>
Newsgroups gmane.comp.lang.perl.poe
Message-ID <EDC714147512684D9BFBE6AB9C53AED101AB3BA3@ILEXC1U03.ndc.lucent.com>
Folks-

 

I'm trying to learn how to use POE::Filter::JSON, but am having some
problems (none of the input is being un-JSON-ified).

 

Attached is my code so far.

 

Any suggestions or pointers are much appreciated.

 

Thanks

 

-Craig

 

Use this as the contents of the input file (or any json input):
{"Text":["Hi there...","How are
you?","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15",
"16","17","18","19","20","21","22","23","24","24","26","27","28","29"]}
 
Here is the script:
use strict;
use warnings;
 
use Tk; # This MUST come before use POE...
use POE;
use POE::Wheel::FollowTail;
use POE::Filter::Stackable;
use POE::Filter::Line;
use POE::Filter::JSON;
use Data::Dumper;
 
my $infile = shift || die "Missing Input File...";
 
_displayData();
 
my $sess = _processData($infile);
 
# This should simply create a dummy postback on the tail session 
my $subref = $sess->postback('DontDie');
 
print STDERR "STARTING to process data...\n";
POE::Kernel->run;
exit;
 
sub _processData{
    my $ifile=shift || die "Missing input file";
    POE::Session->create(
        inline_states=>{
            _start=>sub {
                my $filters;
                print "Session ", $_[SESSION]->ID, " has started.\n";
                $_[KERNEL]->alias_set("myClient");
                my ( $kernel, $heap ) = @_[ KERNEL, HEAP ];
                # Setup filters in filter stack...
                $filters = POE::Filter::Stackable->new(
                    Filters=>[
                        POE::Filter::Line->new(),
                        POE::Filter::JSON->new(
                        json_any => {
                            allow_nonref =>1,
                        },
                        ),
                    ],
                );
                $_[HEAP]->{wheel}=POE::Wheel::FollowTail->new(
                    Seek=>0,
                    Filename=>$ifile,
                    InputEvent=>'display',
                    Filter=> $filters,
                );
            },
            display => sub{
                InputEvent=>$_[KERNEL]->post(Display=>data=>$_[ARG0]),
            },    
            sendStop   => sub{
                print "Stopping file input\n";
                my $heap = $_[HEAP];
                delete $heap->{wheel};
            },    
        },
    ),
}
 
 
sub _displayData{    
 
    my $hwid = shift;
    my $text;
 
    POE::Session->create( inline_states => {
        _start => sub { 
                $_[KERNEL]->alias_set("Display");
                my $kernel=$_[KERNEL];    
 
                my $top = $poe_main_window;
 
                # Create Stop button...
                $top->Button(-text=>"Stop", -command=>sub{
                    &stop($kernel);
                    $top->update;
                } )->pack(-side=>'bottom');    
 
                # Create top level Tree...
                $text = $top->Scrolled('Text',
                    -scrollbars=>'osow')->
                    pack(-fill=>'both', -side=>'left',
                           -expand=>1);
 
            },
        data=>sub{
            my $node=$_[ARG0] || return;
            #my $txt = join("\n", @{$node->{Text}});
            $text->insert('end', Dumper($node) . "\n");
 
            $text->update;
        },
    });
}
 
sub stop{
    my $ker = shift;
    if ($ker){    
print STDERR "Sending sendStop to myClient\n";
        $ker->call("myClient","sendStop");
    }
}
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.