/[cvs]/joko/TestArea/perl/runtime/POE/rpc/filter-reference/server.pl
ViewVC logotype

Annotation of /joko/TestArea/perl/runtime/POE/rpc/filter-reference/server.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide annotations)
Sun May 11 21:48:56 2003 UTC (21 years, 2 months ago) by joko
Branch: MAIN
CVS Tags: HEAD
File MIME type: text/plain
initial commit

1 joko 1.1 #!/usr/bin/perl
2    
3     #use warnings;
4     #use strict;
5    
6     use POE;
7     use POE::Filter::Reference;
8     use POE::Component::Server::TCP;
9     #use POE::Component::Client::TCP;
10     use Data::Dumper;
11    
12     ### Create a server that receives and sends Perl data structures. It
13     ### will be referred to by the name "sum-server" when necessary. It
14     ### listens on localhost port 12345. It uses POE::Filter::Reference
15     ### to parse input and format output.
16    
17     POE::Component::Server::TCP->new
18     ( Alias => "sum_server",
19     Address => "localhost",
20     Port => 12345,
21     ClientFilter => "POE::Filter::Reference",
22    
23     # Handle client requests here.
24    
25     ClientInput => sub {
26     my ( $heap, $list ) = @_[ HEAP, ARG0 ];
27     my $sum = 0;
28     my ( @odd, @even, @bad, $status );
29    
30     print Dumper ($list);
31    
32     # Process the request into buckets for odd, even, and
33     # non-integers. Sum the integers in the request.
34    
35     if ( ref($list) eq 'ARRAY' ) {
36     foreach (@$list) {
37     if (/^\d+$/) {
38     if ( $_ % 2 ) { push @odd, $_; }
39     else { push @even, $_; }
40     $sum += $_;
41     }
42     else {
43     push @bad, $_;
44     }
45     }
46     $status = "OK";
47     }
48     else {
49     $status = "Error: Bad request type: " . ref($list);
50     }
51    
52     # Build the response hash, then send it to the client.
53    
54     my %response =
55     ( sum => $sum,
56     odd => \@odd,
57     even => \@even,
58     bad => \@bad,
59     stat => $status,
60     );
61    
62     $heap->{client}->put( \%response );
63     },
64    
65     # Since this is a one-shot test program, shut down the server
66     # after the first client has disconnected. This posts "shutdown"
67     # to the server itself. Using yield() here would just shut down
68     # the client connection.
69    
70     ClientDisconnected => sub {
71     my $kernel = $_[KERNEL];
72     $kernel->post( sum_server => "shutdown" );
73     },
74     );
75    
76    
77     ### Run both the client and server. Yes, in the same program.
78    
79     $poe_kernel->run();

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed