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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (show annotations)
Sun Jun 29 01:35:29 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::LookupClient;
9
10 use strict;
11 use warnings;
12
13 use POE qw( Session Component::IKC::Client );
14 use Data::Dumper;
15
16
17 sub new {
18 my $classname = shift;
19 my @args = @_;
20
21 my $self = {};
22 bless $self, $classname;
23
24 $self->{options} = { @args };
25
26 #my $event_handler = lookupd->new();
27 POE::Session->create(
28 object_states => [
29 $self => [qw( _start _stop boot_intercom )]
30 ]
31 );
32
33 }
34
35 # This is not a POE method. It's a plain OO one.
36 sub debug {
37 my $self = shift;
38 my $msg = shift;
39 $msg ||= '';
40 print STDERR __PACKAGE__ . ": " . $msg, "\n";
41 }
42
43 # Controller's event handlers
44
45 sub _start {
46 my ( $self, $kernel, $heap ) = @_[ OBJECT, KERNEL, HEAP ];
47 $self->debug("_start");
48
49 #$kernel->alias_set("controller");
50
51 #$kernel->post( controller => 'start_daemon' );
52 #$kernel->yield( 'boot_storage' );
53 $kernel->yield( 'boot_intercom' );
54 #$_[HEAP]->{subsession} = POE::Session->create( inline_states => { _start => sub { print "WORKER!", "\n"; } } );
55 #$_[HEAP]->{subsession}->yield(
56
57 };
58
59 sub _stop {
60 my ( $self, $kernel, $heap ) = @_[ OBJECT, KERNEL, HEAP ];
61 $self->debug("_stop");
62 };
63
64 sub boot_intercom {
65
66 my ( $self, $kernel, $heap ) = @_[ OBJECT, KERNEL, HEAP ];
67 $self->debug("boot_intercom");
68
69 # Client component - encapsulates some session(s) and/or wheel(s)?
70
71 my $host = "localhost";
72 #create_ikc_client( host => $host, port => 30, name => 'Client', on_connect => $self->{options}->{on_connect} );
73 create_ikc_client(
74 host => $host,
75 port => 30,
76 name => 'Client',
77 on_connect => sub { $self->build(); },
78 subscribe => [qw( poe://LookupService/ServiceRegistrar/ )],
79 );
80
81 };
82
83 sub build {
84 my $self = shift;
85 #print "BUILD", "\n";
86 # create sessions that depend on the foreign kernel.
87 POE::Component::LookupClient::Session->new();
88 }
89
90
91
92 package POE::Component::LookupClient::Session;
93
94 use strict;
95 use warnings;
96
97 use POE qw( Session );
98 use Data::Dumper;
99
100
101 sub new {
102 my $classname = shift;
103 my @args = @_;
104
105 my $self = {};
106 bless $self, $classname;
107
108 $self->{options} = { @args };
109
110 POE::Session->create(
111 object_states => [
112 $self => [qw( _start _stop response register_lease renew_lease )]
113 ]
114 );
115
116 }
117
118
119 # This is not a POE method. It's a plain OO one.
120 sub debug {
121 my $self = shift;
122 my $msg = shift;
123 $msg ||= '';
124 print STDERR __PACKAGE__ . ": " . $msg, "\n";
125 }
126
127 # Controller's event handlers
128
129 sub _start {
130 my ( $self, $kernel, $heap ) = @_[ OBJECT, KERNEL, HEAP ];
131 $self->debug("_start");
132
133 #$kernel->alias_set('');
134 #$kernel->post();
135
136 # set up communication channel for asynchronous responses
137 $kernel->alias_set('DeviceClient');
138 $kernel->post('IKC', 'publish', 'DeviceClient', [qw( response )]);
139
140 # try to register on startup
141 $kernel->yield('register_lease');
142
143 };
144
145 sub _stop {
146 my ( $self, $kernel, $heap ) = @_[ OBJECT, KERNEL, HEAP ];
147 $self->debug("_stop");
148 };
149
150 # Main response dispatcher, this should dispatch to local states programmatically.
151 sub response {
152 my ( $self, $kernel, $heap ) = @_[ OBJECT, KERNEL, HEAP ];
153 #$self->debug("response");
154
155 my $payload = $_[ARG0];
156 $payload ||= '';
157
158 # If registration succeeded, start the renewal cycle.
159 if ($payload eq 'REG_OK') {
160 $self->debug("Starting lease loop.");
161 $kernel->yield( 'renew_lease' );
162
163 } elsif ($payload eq 'LEASE_OK') {
164 $self->debug("Received 'LEASE_OK'.");
165 #$kernel->yield( 'renew_lease' );
166
167 # 1. otherwise dump anything sent to us for debugging purposes
168 # 2. destroy lease in any case on unknown payload
169 } else {
170 #print Dumper($payload);
171 $heap->{'destroy lease'} = 1;
172
173 }
174
175 };
176
177 sub register_lease {
178 my ( $self, $kernel, $heap ) = @_[ OBJECT, KERNEL, HEAP ];
179 $self->debug("register_lease");
180 my $ONE_arg = "Hello World!";
181
182 # V1 - without subscription
183 #$kernel->post('IKC', 'post', "poe://LookupService/ServiceRegistrar/register_lease", $ONE_arg);
184 # V2 - with subscription
185 $kernel->post( "poe://LookupService/ServiceRegistrar", "register_lease", $ONE_arg);
186 }
187
188 sub renew_lease {
189 my ( $self, $kernel, $heap ) = @_[ OBJECT, KERNEL, HEAP ];
190
191 if ($heap->{'destroy lease'}) {
192 $heap->{'destroy lease'} = 0;
193 $self->debug("destroyed lease");
194 return;
195 }
196
197 $self->debug("renew_lease");
198
199 my $ONE_arg = '';
200 #$kernel->post('IKC', 'post', "poe://LookupService/ServiceRegistrar/renew_lease", $ONE_arg);
201 # V1 - without subscription
202 $kernel->post('IKC', 'call', "poe://LookupService/ServiceRegistrar/renew_lease", $ONE_arg, 'poe:response');
203 # V2 - with subscription
204 #my $resp = $kernel->call( "poe://LookupService/ServiceRegistrar", "renew_lease", $ONE_arg);
205 #print $resp, "\n";
206
207 # and again...
208 $kernel->delay('renew_lease', 15);
209 }
210
211 1;
212 __END__

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