ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Coro/eg/event
(Generate patch)

Comparing Coro/eg/event (file contents):
Revision 1.1 by root, Sun Jul 15 02:36:54 2001 UTC vs.
Revision 1.4 by root, Sun Jul 15 22:19:49 2001 UTC

1#!/usr/bin/perl 1#!/usr/bin/perl
2 2
3use Coro; 3use Coro;
4use Coro::Event; 4use Coro::Event;
5 5
6sub keyboard : Coro { 6$Event::DebugLevel = 4;
7
7 my $w = Coro::Event->io(fd => *STDIN, poll => 'r'); 8my $stdin = Coro::Event->io(fd => \*STDIN, poll => 'r');
8 while() { 9
9 print "cmd> "; 10sub finger {
10 my $ev = $w->next; my $cmd = <STDIN>; 11 my $host = shift;
11 print "data> "; 12 my $user = shift;
12 my $ev = $w->next; my $data = <STDIN>; 13 use IO::Socket::INET;
13 } 14 # is there ANY way to do non-blocking connects with IO::Socket::INET?
15 # I don't see how...
16 my $io = new IO::Socket::INET PeerAddr => "$host:finger";
17 syswrite $io, "$user\n";
18 #do_timer(after => 5);
19 my $r = Coro::Event->io(fd => $io, poll => 'r');
20 my $buf;
21 $r->next while 0 != sysread $io, $buf, 8192, length $buf;
22 #do_timer(after => 5);
23 print $buf;
14} 24}
15 25
26sub kbdline {
27 $stdin->next;
28 my $x = <STDIN>; chomp $x; $x;
29}
30
31sub keyboard : Coro {
32 $|=1;
33 while() {
34 print "cmd> "; my $cmd = kbdline;
35 if ($cmd eq "finger") {
36 print "user> "; my $user = kbdline;
37 print "host> "; my $host = kbdline;
38 async sub { finger($host, $user) };
39 } elsif ($cmd eq "quit") {
40 unloop(777);
41 terminate;
42 } else {
43 print "enter command, either 'finger' or 'quit'\n";
44 }
45 }
46}
47
48sub timer : Coro {
49 my $w = Coro::Event->timer(interval => 0.1, hard => 1);
50 use Time::HiRes qw(time);
51 while () {
52 $w->next;
53 print "\e7\e[A\10\10\10 <time ",time,"> \e8";
54 };
55}
56
57print "unlooped with value: ",loop(),"\n";
58

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines