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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.3 - (hide annotations)
Tue Jul 1 13:07:19 2003 UTC (21 years ago) by joko
Branch: MAIN
CVS Tags: HEAD
Changes since 1.2: +1 -22 lines
- removed "waste_time" here
+ renamed response state to "on_response"

1 joko 1.1 ## ------------------------------------------------------------------------
2 joko 1.2 ## $Id: ServiceRegistrar.pm,v 1.1 2003/06/29 01:35:30 joko Exp $
3 joko 1.1 ## ------------------------------------------------------------------------
4 joko 1.2 ## $Log: ServiceRegistrar.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::ServiceRegistrar;
12    
13     use strict;
14     use warnings;
15    
16     use POE qw( Session );
17     #use Data::Storage::Container;
18     use Data::Dumper;
19    
20    
21     sub new {
22     my $classname = shift;
23     my $self = {};
24     bless $self, $classname;
25    
26     $self->{config} = shift;
27    
28     POE::Session->create(
29     object_states => [
30     $self => [qw( _start _stop register_lease renew_lease remote_register )]
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    
45     sub _start {
46     my ( $self, $kernel, $heap ) = @_[ OBJECT, KERNEL, HEAP ];
47     $self->debug("_start");
48    
49 joko 1.2 # V1 - Announce ourselves as "global singleton" session at Kernel side.
50 joko 1.1 $kernel->alias_set("ServiceRegistrar");
51    
52     # V2 - Also announce to the IKC infrastructure component.
53     $kernel->post('IKC', 'publish', 'ServiceRegistrar', [qw( register_lease )]);
54    
55     # tell IKC monitor to start up and intercept registration and renewal requests from client(s)
56     $kernel->post( IKC => 'monitor', '*' => { register => 'remote_register' });
57     #$kernel->post( IKC => 'monitor', '*' => { renew => 'catch_event' });
58    
59     };
60    
61     sub _stop {
62     my ( $self, $kernel, $heap ) = @_[ OBJECT, KERNEL, HEAP ];
63     $self->debug("_stop");
64    
65     # does this work?
66     $kernel->post( IKC => 'retract', 'ServiceRegistrar' => [qw( register_lease )]);
67     };
68    
69     sub register_lease {
70     my ( $self, $kernel, $heap, $sender ) = @_[ OBJECT, KERNEL, HEAP, SENDER ];
71    
72     $self->debug("register_lease");
73    
74     my $payload = $_[ARG0];
75     print Dumper($payload);
76     #my $result = $heap->{STORAGE}->sendQuery($query);
77     #$kernel->post( $sender => handle_storage_result => $result );
78    
79     # publish new remote methods on the fly to service following renewal requests from client(s)
80     $kernel->post('IKC', 'publish', 'ServiceRegistrar', [qw( renew_lease )]);
81    
82     # send response back to client session - does it actually work asynchronously?
83 joko 1.3 $kernel->post($_[SENDER], 'on_response', 'REG_OK');
84 joko 1.1
85     };
86    
87     sub renew_lease {
88     my ( $self, $kernel, $heap, $sender ) = @_[ OBJECT, KERNEL, HEAP, SENDER ];
89    
90     my $from = $sender->[0]->{from}->{kernel};
91    
92     $self->debug("renew_lease: Lease renewal requested from '$from'.");
93     #$self->debug($sender->ID());
94     #$self->debug($heap->{name});
95     #print Dumper($sender);
96     #$self->debug($sender->[0]->{from}->{kernel});
97    
98     # postback value via rsvp-mechanism (see perldoc POE::Component::IKC::Responder)
99 joko 1.2 return 'LEASE_OK';
100 joko 1.1 }
101    
102    
103     sub remote_register {
104     my ( $self, $kernel, $heap, $sender ) = @_[ OBJECT, KERNEL, HEAP, SENDER ];
105    
106     #$self->debug("catch_event");
107    
108     my ($name, $real) = @_[ARG1, ARG2];
109     print "- Remote kernel ", ($real ? '' : "alias "), "$name connected\n";
110     $heap->{name} = $real if $real;
111    
112     }
113    
114    
115     1;
116     __END__

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