/[cvs]/joko/TestArea/perl/runtime/POE/cluster/simpsons.pl
ViewVC logotype

Annotation of /joko/TestArea/perl/runtime/POE/cluster/simpsons.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide annotations)
Sun May 11 21:48:48 2003 UTC (21 years, 6 months ago) by joko
Branch: MAIN
CVS Tags: HEAD
File MIME type: text/plain
initial commit

1 joko 1.1 #!/usr/local/bin/perl -w
2     #
3     # This example is really just for fun. It demonstrates how the PoCo::Election::Bully module works.
4     # Although we use two Bully Component instances in this example, in normal situations you would
5     # probably have one bully component per POE instance since the module was designed for distributed
6     # coordination between POE processes. Don't let me stop you from being creative with its use though. ;)
7     #
8     # $Id: simpsons.pl,v 1.0 2002-06-03 15:37:19+02 amo Exp amo $
9     #
10    
11     use strict;
12    
13     use POE::Component::Election::Bully;
14     use POE;
15    
16     # these are the nodes participating in the election process
17     my $node1 = new POE::Component::Election::Bully::Node(['localhost', 5122, 1]);
18     my $node2 = new POE::Component::Election::Bully::Node(['localhost', 5121, 2]);
19    
20     my $n = 0;
21     my $passes = 0;
22    
23     POE::Session->create
24     ( inline_states =>
25     {
26     _start => \&start_session,
27     start_election1=> \&start_election1,
28     start_election2=> \&start_election2,
29     elected1 => \&election_results1,
30     elected2 => \&election_results2,
31     coup1 => \&coup1,
32     coup2 => \&coup2,
33     do_work1 => \&do_work1,
34     do_work2 => \&do_work2,
35     vacation => \&vacation,
36     back_to_work => \&start_session,
37     }
38     );
39    
40     $poe_kernel->run();
41    
42     exit;
43    
44    
45     #--- States
46    
47     sub start_session {
48     my ($kernel, $state) = @_[KERNEL, STATE];
49    
50     if($state ne 'back_to_work') {
51     print "Nelson walks outside waiting for his first victim.";
52     }
53     else {
54     print "Nelson comes running back outside.";
55     }
56    
57     print " (restarts the election)\n";
58    
59     $_[KERNEL]->yield('start_election2') unless $state eq 'back_to_work';
60     $_[KERNEL]->delay_add('start_election1', 5);
61     }
62    
63     sub start_election1 {
64     POE::Component::Election::Bully->new
65     ( Alias => 'component1',
66     Port => 5121,
67     Priority => 2,
68     ElectionState => 'elected1',
69     CoupState => 'coup1',
70     RestartTimer => 3,
71     NotifyTimer => 3,
72     );
73     $_[KERNEL]->post('component1', 'start_election', $node1);
74     }
75    
76     sub start_election2 {
77     POE::Component::Election::Bully->new
78     ( Alias => 'component2',
79     Port => 5122,
80     Priority => 1,
81     ElectionState => 'elected2',
82     CoupState => 'coup2',
83     RestartTimer => 3,
84     NotifyTimer => 3,
85     );
86     $_[KERNEL]->post('component2', 'start_election', $node2);
87     }
88    
89     sub election_results1 {
90     print "Nelson runs over and takes Milhouse's milk money from his pocket. (Nelson elected)\n";
91     $_[KERNEL]->delay_add('do_work1', 5);
92     $_[KERNEL]->delay_add('vacation', 9);
93     }
94    
95     sub election_results2 {
96     if(++$passes == 1) {
97     print "Milhouse starts to walk past Nelson's house.";
98     }
99     else {
100     print "Milhouse trys to sneak by Nelson's house.";
101     }
102     print " (Milhouse elected)\n";
103     $_[KERNEL]->delay_add('do_work2', 5);
104     }
105    
106     sub do_work1 {
107     print "Nelson waits outside for Milhouse to return with more milk money. (Nelson does some work)\n";
108     $_[KERNEL]->delay_add('do_work1', 5);
109     }
110    
111     sub do_work2 {
112     if($n == 5) {
113     print "Milhouse decides to go home and stay there forever\n";
114     $_[KERNEL]->delay('do_work2');
115     $_[KERNEL]->post('component2', 'stop_election');
116     return;
117     }
118    
119     my @worries = (
120     "Milhouse starts to get really scared.",
121     "Milhouse starts breathing very quickly."
122     );
123     print $worries[int(rand($#worries))];
124     print " (Milhouse does some work)\n";
125     $_[KERNEL]->delay_add('do_work2', 5);
126     }
127    
128     sub coup1 {
129     print "Nelson just go bullied! (Nelson was bullied)\n";
130     $_[KERNEL]->delay('do_work1');
131     }
132    
133     sub coup2 {
134     print "Milhouse starts crying and runs home to his mother. (Millhouse was bullied)\n";
135     $_[KERNEL]->delay('do_work2');
136     }
137    
138     sub vacation {
139     if (++ $n < 5) {
140     print "Nelson decides to go back inside and watch from there. (Nelson pulls out of the election temporarily)\n";
141     $_[KERNEL]->delay('do_work1');
142     $_[KERNEL]->post('component1', 'stop_election');
143     $_[KERNEL]->delay_add('back_to_work', 5);
144     }
145     else {
146     print "Nelson gets bored and goes to school. (Nelson pulls out of the election permanently)\n";
147     $_[KERNEL]->delay('do_work1');
148     $_[KERNEL]->post('component1', 'stop_election');
149     }
150     }
151    
152     __END__
153    

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