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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.3 - (show annotations)
Tue Jul 1 13:07:19 2003 UTC (20 years, 10 months 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 ## ------------------------------------------------------------------------
2 ## $Id: ServiceRegistrar.pm,v 1.1 2003/06/29 01:35:30 joko Exp $
3 ## ------------------------------------------------------------------------
4 ## $Log: ServiceRegistrar.pm,v $
5 ## Revision 1.1 2003/06/29 01:35:30 joko
6 ## initial commit
7 ##
8 ## ------------------------------------------------------------------------
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 # V1 - Announce ourselves as "global singleton" session at Kernel side.
50 $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 $kernel->post($_[SENDER], 'on_response', 'REG_OK');
84
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 return 'LEASE_OK';
100 }
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