/[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

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 202 by dpavlin, Sun Nov 8 21:52:13 2009 UTC revision 247 by dpavlin, Thu Nov 26 22:08:36 2009 UTC
# Line 14  use Data::Dump qw(dump); Line 14  use Data::Dump qw(dump);
14  use Sack::View;  use Sack::View;
15    
16  my $port = shift @ARGV;  my $port = shift @ARGV;
17    my $debug = 0;
18    my $data_path = "/tmp/sack.data.$port";
19    
20  my $sock = IO::Socket::INET->new(  my $sock = IO::Socket::INET->new(
21          PeerAddr => '127.0.0.1',          PeerAddr => '127.0.0.1',
# Line 24  my $sock = IO::Socket::INET->new( Line 26  my $sock = IO::Socket::INET->new(
26  my $sel = IO::Select->new($sock);  my $sel = IO::Select->new($sock);
27  $sel->add($sock);  $sel->add($sock);
28    
29  my $data;  my $data = Storable::retrieve $data_path if -e $data_path;
30    
31  while (1) {  while (1) {
32          for my $sock ($sel->can_read(1)) {          for my $sock ($sel->can_read(1)) {
33                  my $request = Storable::fd_retrieve($sock);                  my $request = eval { Storable::fd_retrieve($sock) };
34                  warn "[$port] <<<< ", dump( keys %$request ), $/;                  if ( $@ ) {
35                            warn "[$port] EXIT $@\n";
36                            exit;
37                    }
38                    warn "[$port] <<<< ", dump( keys %$request ), $/ if $debug;
39                  my $response = { port => $port };                  my $response = { port => $port };
40                  if ( $request->{ping} ) {                  if ( $request->{ping} ) {
41                          $response->{ping} = 'pong';                          $response->{ping} = 'pong';
# Line 39  while (1) { Line 45  while (1) {
45                          $data->{ $request->{path} } = $request->{shard};                          $data->{ $request->{path} } = $request->{shard};
46                          $response->{load} = 'shard';                          $response->{load} = 'shard';
47                          $response->{shard} = $request->{path};                          $response->{shard} = $request->{path};
48                  } elsif ( my $code = $request->{view} ) {                  } elsif ( my $view = $request->{view} ) {
49                          Sack::View->code( $code );                          Sack::View->code( $request->{code} );
50                          foreach my $path ( keys %$data ) {                          foreach my $path ( keys %$data ) {
51                                  warn "view $request->{path} on shard $path\n";                                  warn "view $view @ $path\n";
52                                  die "data->{$path} not array but ",dump( $data->{$path} ) unless ref $data->{$path} eq 'ARRAY';                                  die "data->{$path} not array but ",dump( $data->{$path} ) unless ref $data->{$path} eq 'ARRAY';
53                                  Sack::View->on_shard( $data->{$path} );                                  my $affected = Sack::View->on_shard( $data->{$path} );
54                                  push @{ $response->{on_shard} }, $path;                                  $response->{on_shard}->{$path} = $affected;
55                          }                          }
56                          $response->{out} = Sack::View->out;                          $response->{out} = Sack::View->out;
57                  } elsif ( defined $request->{debug} ) {                          $response->{view} = $view;
58                          if ( my $eval = $request->{debug} ) {                  } elsif ( my $eval = $request->{eval} ) {
59                                  warn "EVAL $eval ", dump( eval($eval) );                          my $v = eval $eval;
60                          } else {                          $response->{eval} = $eval;
61                                  warn "XX data ", dump $data;                          $response->{value} = $v;
62                            warn "[$port] EVAL $eval = ", dump( $v ),$/;
63                    } elsif ( $request->{clean} ) {
64                            $data = {};
65                            foreach ( glob '/tmp/sack.data.*' ) {
66                                    unlink $_;
67                                    push @{ $response->{unlink} }, $_;
68                          }                          }
69                            warn "[$port] clean\n";
70                    } elsif ( $request->{save} ) {
71                            Storable::store( $data, $data_path );
72                            warn "[$port] saved $data_path ", -s $data_path, " bytes\n";
73                            $response->{saved}->{$data_path} = -s $data_path;
74                    } elsif ( $request->{exit} ) {
75                            warn "[$port] exit\n";
76                  } else {                  } else {
77                          $response->{error}->{unknown} = $request;                          $response->{error}->{request} = $request;
78                  }                  }
79                  Storable::store_fd( $response, $sock );                  Storable::store_fd( $response, $sock );
80                  warn "[$port] >>>> ", dump($response), $/;                  warn "[$port] >>>> ", dump($response), $/ if $debug;
81          }          }
82  }  }

Legend:
Removed from v.202  
changed lines
  Added in v.247

  ViewVC Help
Powered by ViewVC 1.1.26