/[cvs]/nfo/perl/libs/POE/Component/LookupService.pm
ViewVC logotype

Annotation of /nfo/perl/libs/POE/Component/LookupService.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide annotations)
Sun Jun 29 01:35:30 2003 UTC (21 years ago) by joko
Branch: MAIN
initial commit

1 joko 1.1 ## ------------------------------------------------------------------------
2     ## $Id: WebCache.pm,v 1.3 2003/06/25 23:37:04 joko Exp $
3     ## ------------------------------------------------------------------------
4     ## $Log: WebCache.pm,v $
5     ## ------------------------------------------------------------------------
6    
7    
8     package POE::Component::LookupService;
9    
10     use strict;
11     use warnings;
12    
13     use POE qw( Component::RPCXML::Server Component::StorageAgent Component::ServiceRegistrar );
14     use RPC::XML;
15     use Data::Dumper;
16    
17    
18     sub new {
19     my $classname = shift;
20     my @args = @_;
21    
22     my $self = {};
23     bless $self, $classname;
24    
25     $self->{options} = { @args };
26    
27     #my $event_handler = lookupd->new();
28     POE::Session->create(
29     object_states => [
30     $self => [qw( _start _stop boot_intercom boot_storage boot_registrar handle_request send_response )]
31     ]
32     );
33    
34     }
35    
36     # This is not a POE method. It's a plain OO one.
37     sub debug {
38     my $self = shift;
39     my $msg = shift;
40     $msg ||= '';
41     print STDERR __PACKAGE__ . ": " . $msg, "\n";
42     }
43    
44     # Controller's event handlers
45    
46     sub _start {
47     my ( $self, $kernel, $heap ) = @_[ OBJECT, KERNEL, HEAP ];
48     $self->debug("_start");
49    
50     #$kernel->alias_set("controller");
51    
52     #$kernel->post( controller => 'start_daemon' );
53     $kernel->yield( 'boot_storage' );
54     $kernel->yield( 'boot_registrar' );
55     $kernel->yield( 'boot_intercom' );
56     #$_[HEAP]->{subsession} = POE::Session->create( inline_states => { _start => sub { print "WORKER!", "\n"; } } );
57     #$_[HEAP]->{subsession}->yield(
58    
59     };
60    
61     sub _stop {
62     my ( $self, $kernel, $heap ) = @_[ OBJECT, KERNEL, HEAP ];
63     $self->debug("_stop");
64     };
65    
66     sub boot_intercom {
67    
68     my ( $self, $kernel, $heap ) = @_[ OBJECT, KERNEL, HEAP ];
69     $self->debug("boot_intercom");
70    
71     # Server component - encapsulates some session(s) and/or wheel(s)?
72    
73     # V1 - windy?!
74     # - dies on empty payloads
75     # - requires addressing of "session"-parameter inside url (security flaw?)
76     # + method publishing/rescinding
77     #POE::Component::Server::XMLRPC->new( alias => "xmlrpc", port => 3332 );
78    
79     # V2 - seems to be times more robust! i.e. offers these features:
80     # + doesn't die on empty xml-payloads in request
81     # + doesn't require session addressing through url
82     # + more flexible event dispatching
83     # - no remote method publishing and/or rescinding
84     # + doesn't even call the dispatching method on empty payloads! ("method-missing", etc.)
85     POE::Component::RPCXML::Server->new(
86     'Alias' => 'rpcxml-server',
87     'Port' => $self->{options}->{daemon}->{port},
88     'DispatchEvent' => 'handle_request',
89     'Debug' => 0,
90     );
91    
92     # V3 - IKC
93     # Don't do that here! It doesn't work!
94     #use POE::Component::IKC::Server;
95     #create_ikc_server( port => 30, name => 'LookupService' );
96    
97     };
98    
99     sub boot_storage {
100    
101     my ( $self, $kernel, $heap ) = @_[ OBJECT, KERNEL, HEAP ];
102     $self->debug("boot_storage");
103    
104     #print Dumper($self->{options}->{storage});
105     $heap->{db} = POE::Component::StorageAgent->new( $self->{options}->{storage} );
106    
107     }
108    
109     sub boot_registrar {
110     my ( $self, $kernel, $heap ) = @_[ OBJECT, KERNEL, HEAP ];
111     $self->debug("boot_registrar");
112     $heap->{reg} = POE::Component::ServiceRegistrar->new();
113     }
114    
115     sub handle_request {
116     my ( $self, $kernel, $heap ) = @_[ OBJECT, KERNEL, HEAP ];
117    
118     my $request = $_[ARG0];
119     my $wheel = $_[ARG1];
120    
121     #print Dumper($request);
122     $self->debug("handle_request: method='$request->{name}'");
123    
124     #my $payload = {};
125    
126     my $method = $request->{name};
127     if ($method eq 'ServiceRegistrar.register') {
128     #$payload->{msg} = 'Registration running';
129     my $authenticated = 1;
130     if ($authenticated) {
131     # send response back to client
132     #my $response = RPC::XML::response->new($payload);
133     $kernel->yield( send_response => $wheel => 'ok' );
134    
135     # handle registration
136     my $query = {
137     'abc' => 'def',
138     };
139     $kernel->post( storage => 'query' => $query );
140     }
141     } elsif ($method eq 'ServiceRegistrar.list') {
142     } elsif ($method eq 'Lease.renew') {
143     } elsif ($method eq 'system.shutdown') {
144     exit;
145     #$kernel->signal( 'TERM' );
146     } elsif ($method eq 'storage.deploy') {
147     $kernel->post( storage => 'deploy' );
148     }
149    
150     #my $response = RPC::XML::response->new('ok');
151     #POE::Component::RPCXML::Server->send_resp($wheel, $response->as_string);
152     #$kernel->yield( send_response => $response, $wheel );
153    
154     };
155    
156     sub send_response {
157     my ( $self, $kernel, $heap ) = @_[ OBJECT, KERNEL, HEAP ];
158     $self->debug("send_response");
159     my $wheel = $_[ARG0];
160     my $response = $_[ARG1];
161     if (ref $response ne 'RPC::XML::response') {
162     print "NEW!", "\n";
163     $response = RPC::XML::response->new( $response );
164     }
165     POE::Component::RPCXML::Server->send_resp($wheel, $response->as_string);
166     }
167    
168     1;
169     __END__

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