ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Coro/eg/event
Revision: 1.5
Committed: Tue Jul 17 00:24:15 2001 UTC (22 years, 11 months ago) by root
Branch: MAIN
Changes since 1.4: +13 -4 lines
Log Message:
*** empty log message ***

File Contents

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