ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent/t/handle/02_write.t
Revision: 1.5
Committed: Wed May 21 14:37:55 2008 UTC (16 years, 1 month ago) by root
Content type: application/x-troff
Branch: MAIN
CVS Tags: rel-4_0
Changes since 1.4: +2 -0 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 elmex 1.1 #!perl
2 root 1.5
3 elmex 1.1 use strict;
4 root 1.5
5 root 1.2 use AnyEvent::Impl::Perl;
6 elmex 1.1 use AnyEvent::Handle;
7     use Socket;
8    
9 elmex 1.3 print "1..7\n";
10    
11 elmex 1.1 my $cv = AnyEvent->condvar;
12    
13     socketpair my $rd, my $wr, AF_UNIX, SOCK_STREAM, PF_UNSPEC;
14    
15 elmex 1.3 my $rd_ae =
16     AnyEvent::Handle->new (
17     fh => $rd,
18     on_eof => sub {
19     warn "reader got EOF";
20     $cv->broadcast
21     }
22     );
23    
24     my $wr_ae =
25     AnyEvent::Handle->new (
26     fh => $wr,
27     on_eof => sub {
28     warn "writer got EOF\n";
29     $cv->broadcast
30     }
31     );
32 elmex 1.1
33     my $dat = '';
34    
35 elmex 1.3 $rd_ae->push_read_chunk (5132, sub {
36 elmex 1.1 my ($rd_ae, $data) = @_;
37     $dat = substr $data, 0, 2;
38     $dat .= substr $data, -5;
39 elmex 1.3
40     print "ok 4 - first read chunk\n";
41     $wr_ae->push_write ("A" x 5000);
42     $wr_ae->on_drain (sub {
43     my ($wr_ae) = @_;
44     $wr_ae->on_drain;
45 elmex 1.4 print "ok 5 - fourth write\n";
46 elmex 1.3
47 elmex 1.4 $rd_ae->push_read_chunk (1, sub {
48     print "ok 6 - second read chunk\n";
49     $cv->broadcast
50     });
51 elmex 1.3 });
52 elmex 1.1 });
53    
54 elmex 1.3 $wr_ae->push_write ("A" x 5000);
55     $wr_ae->push_write ("X" x 130);
56 elmex 1.1
57 elmex 1.3 # and now some extreme CPS action:
58     $wr_ae->on_drain (sub {
59     my ($wr_ae) = @_;
60     $wr_ae->on_drain;
61     print "ok 1 - first write\n";
62    
63     $wr_ae->push_write ("Y");
64     $wr_ae->on_drain (sub {
65     my ($wr_ae) = @_;
66     $wr_ae->on_drain;
67     print "ok 2 - second write\n";
68    
69     $wr_ae->push_write ("Z");
70     $wr_ae->on_drain (sub {
71     my ($wr_ae) = @_;
72     $wr_ae->on_drain;
73     print "ok 3 - third write\n";
74     });
75     });
76     });
77 elmex 1.1
78     $cv->wait;
79    
80 elmex 1.3 if ($dat eq "AAXXXYZ") {
81     print "ok 7 - received data\n";
82     } else {
83     warn "dat was '$dat'\n";
84     print "not ok 7 - received data\n";
85     }