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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (show annotations)
Tue Jul 1 13:06:00 2003 UTC (20 years, 10 months ago) by joko
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +7 -2 lines
+ shutdown IKC?

1 ## ------------------------------------------------------------------------
2 ## $Id: LookupService.pm,v 1.1 2003/06/29 01:35:30 joko Exp $
3 ## ------------------------------------------------------------------------
4 ## $Log: LookupService.pm,v $
5 ## Revision 1.1 2003/06/29 01:35:30 joko
6 ## initial commit
7 ##
8 ## ------------------------------------------------------------------------
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 $kernel->post( IKC => 'shutdown' );
68 };
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 #$kernel->yield('_stop');
149 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