/[cvs]/joko/Scripts/psh/lib/POE/Component/File/FollowTailSimple.pm
ViewVC logotype

Contents of /joko/Scripts/psh/lib/POE/Component/File/FollowTailSimple.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.1.1 - (show annotations) (vendor branch)
Fri Jun 14 21:22:10 2002 UTC (22 years, 3 months ago) by cvsjoko
Branch: nfo, MAIN
CVS Tags: r001, HEAD
Changes since 1.1: +0 -0 lines
first import

1 package POE::Component::File::FollowTailSimple;
2
3 use strict;
4 use warnings;
5
6 use IO::File;
7 use POE;
8
9 my %args;
10
11
12 sub check_init {
13 #my ( $kernel, $session, $heap ) = @_[ KERNEL, SESSION, HEAP ];
14 #my $heap = shift;
15
16 #print "running init-checks ...", "\n";
17 my $file_name = $args{File};
18 if (!-e $file_name) {
19 my $handle = IO::File->new($file_name, "w");
20 $handle->close();
21 }
22
23 my %finfo;
24 $finfo{'ready'} = 0;
25 $finfo{'path'} = $file_name;
26
27 if (my $handle = IO::File->new($finfo{path}, "r")) {
28 $handle->sysseek(0, SEEK_END);
29 my $pos_eof = $handle->getpos();
30 $handle->close();
31 $finfo{'pos'} = $pos_eof;
32 $finfo{'ready'} = 1;
33 }
34
35 return \%finfo;
36 }
37
38 sub check_file {
39 my ( $kernel, $session, $heap ) = @_[ KERNEL, SESSION, HEAP ];
40 #print "checking file ...", "\n";
41 if (!$heap->{fileinfo}) {
42 #$kernel->call($session, 'init_info');
43 $heap->{fileinfo} = check_init();
44 }
45 if (!$heap->{fileinfo}{ready}) {
46 $kernel->post($session, 'got_error', "file not ready: " . $heap->{fileinfo}{path});
47 return 0;
48 }
49 my $handle = IO::File->new($heap->{fileinfo}{path}, "r");
50 #$handle->sysseek($heap->{fileinfo}{pos}, SEEK_SET);
51 $handle->setpos($heap->{fileinfo}{pos});
52 while (<$handle>) {
53 chomp();
54 $_ && $kernel->post($session, 'got_cmd', $_);
55 }
56 $heap->{fileinfo}{pos} = $handle->getpos();
57 $handle->close();
58 return 1;
59 }
60 sub got_cmd {
61 my ( $kernel, $session, $heap, $cmd ) = @_[ KERNEL, SESSION, HEAP, ARG0 ];
62 my $targetSession_reference = $kernel->alias_resolve( $args{ResponseSession} );
63 $kernel->post($targetSession_reference, $args{ResponseStateInput}, $cmd);
64 }
65 sub got_error {
66 my ( $kernel, $session, $heap, $errmsg ) = @_[ KERNEL, SESSION, HEAP, ARG0 ];
67 my $targetSession_reference = $kernel->alias_resolve( $args{ResponseSession} );
68 $kernel->post($targetSession_reference, $args{ResponseStateError}, $errmsg);
69 }
70
71 sub shutdown {
72 my ( $kernel, $session, $heap ) = @_[ KERNEL, SESSION, HEAP ];
73 $kernel->alias_remove($args{Alias});
74 $kernel->signal($heap->{wheel}, 'INT');
75 delete $heap->{wheel};
76 return 1;
77 }
78
79 # ---------------------------------------------------------------
80 sub _start {
81 my ( $kernel, $session, $heap ) = @_[ KERNEL, SESSION, HEAP ];
82
83 #print "watching file", "\n";
84
85 $kernel->alias_set($args{Alias});
86
87 # setting up the wheel
88 $heap->{wheel} = POE::Session->new
89 (
90 _start => sub {
91 my ($kernel, $session) = @_[KERNEL, SESSION];
92 $kernel->post($session, 'spin a wheel');
93 },
94 'spin a wheel' => sub {
95 my $kernel = $_[KERNEL];
96 #print "*** spin! ***\n";
97 $kernel->post($session, 'check_file');
98 $kernel->delay('spin a wheel', 2);
99 },
100 );
101
102 print "cmdfd started", "\n";
103
104 }
105
106 sub _stop {
107 print "cmdfd stopped", "\n";
108 }
109
110 sub spawn {
111 # ---------------------------------------------------------------
112 # the handlers for starting, stopping
113 # and getting valid or invalid responses (errors)
114
115 my $args = shift;
116 %args = %{$args};
117
118 my @handlers = qw(
119 _start
120 _stop
121 check_init
122 check_file
123 got_cmd
124 got_error
125 shutdown
126 );
127
128 my $pkg = __PACKAGE__;
129
130 # the main session for the command-engine
131 POE::Session->create(
132 package_states => [ $pkg => \@handlers ],
133 );
134 }
135
136 1;

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