/[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.1 - (show annotations)
Sun Jun 29 01:35:30 2003 UTC (21 years ago) by joko
Branch: MAIN
initial commit

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