/[Sack]/trunk/lib/Sack/Client.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /trunk/lib/Sack/Client.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 203 - (hide annotations)
Sun Nov 8 22:56:46 2009 UTC (14 years, 7 months ago) by dpavlin
File size: 1640 byte(s)
added clean which drops all shards from clients

1 dpavlin 163 #!/usr/bin/perl
2    
3 dpavlin 181 package Sack::Client;
4    
5 dpavlin 163 use warnings;
6     use strict;
7    
8     use IO::Socket::INET;
9     use IO::Select;
10     use Storable qw();
11 dpavlin 168
12     use lib '/srv/Sack/lib';
13 dpavlin 202 use Data::Dump qw(dump);
14 dpavlin 199 use Sack::View;
15 dpavlin 163
16     my $port = shift @ARGV;
17    
18     my $sock = IO::Socket::INET->new(
19     PeerAddr => '127.0.0.1',
20     PeerPort => $port,
21     Proto => 'tcp',
22     ) || die $!;
23    
24     my $sel = IO::Select->new($sock);
25     $sel->add($sock);
26    
27 dpavlin 192 my $data;
28    
29 dpavlin 163 while (1) {
30     for my $sock ($sel->can_read(1)) {
31     my $request = Storable::fd_retrieve($sock);
32 dpavlin 192 warn "[$port] <<<< ", dump( keys %$request ), $/;
33 dpavlin 163 my $response = { port => $port };
34 dpavlin 192 if ( $request->{ping} ) {
35     $response->{ping} = 'pong';
36     } elsif ( $request->{load} ) {
37     $response->{load} = 'shard';
38     } elsif ( defined $request->{shard} ) {
39 dpavlin 199 $data->{ $request->{path} } = $request->{shard};
40 dpavlin 192 $response->{load} = 'shard';
41 dpavlin 199 $response->{shard} = $request->{path};
42     } elsif ( my $code = $request->{view} ) {
43     Sack::View->code( $code );
44     foreach my $path ( keys %$data ) {
45     warn "view $request->{path} on shard $path\n";
46     die "data->{$path} not array but ",dump( $data->{$path} ) unless ref $data->{$path} eq 'ARRAY';
47     Sack::View->on_shard( $data->{$path} );
48     push @{ $response->{on_shard} }, $path;
49     }
50     $response->{out} = Sack::View->out;
51     } elsif ( defined $request->{debug} ) {
52     if ( my $eval = $request->{debug} ) {
53     warn "EVAL $eval ", dump( eval($eval) );
54     } else {
55     warn "XX data ", dump $data;
56     }
57 dpavlin 203 } elsif ( $request->{clean} ) {
58     $data = {};
59 dpavlin 192 } else {
60     $response->{error}->{unknown} = $request;
61     }
62 dpavlin 163 Storable::store_fd( $response, $sock );
63     warn "[$port] >>>> ", dump($response), $/;
64     }
65     }

Properties

Name Value
svn:executable *

  ViewVC Help
Powered by ViewVC 1.1.26