/[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.2 - (hide annotations)
Tue Jul 1 13:06:00 2003 UTC (21 years ago) by joko
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +7 -2 lines
+ shutdown IKC?

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

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