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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.1.1 - (hide 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 cvsjoko 1.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