… | |
… | |
5 | use Coro; |
5 | use Coro; |
6 | use Coro::Event; |
6 | use Coro::Event; |
7 | use Coro::Channel; |
7 | use Coro::Channel; |
8 | |
8 | |
9 | BEGIN { *slog = \&::slog } |
9 | BEGIN { *slog = \&::slog } |
10 | |
|
|
11 | $MAXMSG = 1024; |
|
|
12 | |
10 | |
13 | use constant MAXMSG => 1024; |
11 | use constant MAXMSG => 1024; |
14 | use constant MAXQ => 10; |
12 | use constant MAXQ => 10; |
15 | |
13 | |
16 | my @send; |
14 | my @send; |
… | |
… | |
29 | } |
27 | } |
30 | |
28 | |
31 | sub new_passive { |
29 | sub new_passive { |
32 | my $class = shift; |
30 | my $class = shift; |
33 | my $self = bless { |
31 | my $self = bless { |
34 | rcv => (new Coro::Channel 100), |
32 | rcv => (new Coro::Channel 1e9), |
35 | @_, |
33 | @_, |
36 | }, $class; |
34 | }, $class; |
37 | |
35 | |
38 | weaken ($port[$self->{port}] = $self); |
36 | weaken ($port[$self->{port}] = $self); |
39 | $self; |
37 | $self; |
… | |
… | |
71 | my $self = shift; |
69 | my $self = shift; |
72 | |
70 | |
73 | $send_empty->wait while @send > MAXQ; |
71 | $send_empty->wait while @send > MAXQ; |
74 | |
72 | |
75 | for (@_) { |
73 | for (@_) { |
76 | slog 8, ">>> :$vc->{port} ".dumpstr($_)."\n"; #d# |
74 | slog 8, ">>> :$self->{port} ".dumpstr($_)."\n"; #d# |
77 | push @{$send[$self->{pri}]}, |
75 | push @{$send[$self->{pri}]}, |
78 | pack "nna*", $self->{port}, length $_, $_; |
76 | pack "nna*", $self->{port}, length $_, $_; |
79 | } |
77 | } |
80 | |
78 | |
81 | $send_full->send; |
79 | $send_full->send; |