ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent/t/handle/02_write.t
Revision: 1.8
Committed: Fri Jul 4 12:21:58 2008 UTC (16 years ago) by elmex
Content type: application/x-troff
Branch: MAIN
CVS Tags: rel-4_91, rel-4_23, rel-4_21, rel-4_412, rel-4_81, rel-4_83, rel-4_82, rel-4_86, rel-4_352, rel-5_112, rel-4_351, rel-5_251, rel-0_85, rel-4_331, rel-4_231, rel-4_233, rel-4_232, rel-4_8, rel-4_234, rel-4_4, rel-5_261, rel-5_271, rel-5_28, rel-5_29, rel-5_21, rel-5_22, rel-5_23, rel-5_24, rel-5_26, rel-5_27, rel-5_1, rel-5_0, rel-5_2, rel-4_22, rel-5_201, rel-5_202, rel-4_161, rel-5_111, rel-4_881, rel-4_411, rel-4_9, rel-5_01, rel-4_45, rel-4_41, rel-4_42, rel-4_2, rel-4_88, rel-4_3, rel-5_11, rel-5_12, rel-4_31, rel-4_32, rel-4_33, rel-4_34, rel-4_35
Changes since 1.7: +1 -1 lines
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 root 1.6 $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 elmex 1.7 my $n = 5;
42 elmex 1.3 $wr_ae->push_write ("A" x 5000);
43     $wr_ae->on_drain (sub {
44     my ($wr_ae) = @_;
45     $wr_ae->on_drain;
46 elmex 1.7 print "ok " . $n++ . " - fourth write\n";
47 elmex 1.3
48 elmex 1.7 });
49    
50 elmex 1.8 $rd_ae->push_read (chunk => 5000, sub {
51 elmex 1.7 print "ok " . $n++ . " - second read chunk\n";
52     $cv->broadcast
53 elmex 1.3 });
54 elmex 1.1 });
55    
56 elmex 1.3 $wr_ae->push_write ("A" x 5000);
57     $wr_ae->push_write ("X" x 130);
58 elmex 1.1
59 elmex 1.3 # and now some extreme CPS action:
60     $wr_ae->on_drain (sub {
61     my ($wr_ae) = @_;
62     $wr_ae->on_drain;
63     print "ok 1 - first write\n";
64    
65     $wr_ae->push_write ("Y");
66     $wr_ae->on_drain (sub {
67     my ($wr_ae) = @_;
68     $wr_ae->on_drain;
69     print "ok 2 - second write\n";
70    
71     $wr_ae->push_write ("Z");
72     $wr_ae->on_drain (sub {
73     my ($wr_ae) = @_;
74     $wr_ae->on_drain;
75     print "ok 3 - third write\n";
76     });
77     });
78     });
79 elmex 1.1
80     $cv->wait;
81    
82 elmex 1.3 if ($dat eq "AAXXXYZ") {
83     print "ok 7 - received data\n";
84     } else {
85     warn "dat was '$dat'\n";
86     print "not ok 7 - received data\n";
87     }