The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::Base;

plan tests => 4;

use Test::TCP;
use AnyEvent::JSONRPC::TCP::Client;
use AnyEvent::JSONRPC::TCP::Server;

my $cv = AnyEvent->condvar;

my $port   = empty_port;
my $server = AnyEvent::JSONRPC::TCP::Server->new( port => $port );

$server->reg_cb(
    echo => sub {
        my ($r, @params) = @_;
        $r->result(@params);
    },
);

my $c1 = AnyEvent::JSONRPC::TCP::Client->new( host => '127.0.0.1', port => $port );
my $c2 = AnyEvent::JSONRPC::TCP::Client->new( host => '127.0.0.1', port => $port );

my $d1 = $c2->call('echo', 'call 1');
my $d2 = $c2->call('echo', 'call 2');

$cv->begin;
$d1->cb(sub {
    is($d1->recv, 'call 1', 'call 1 ok');

    my $d3 = $c1->call('echo', 'call 3');
    $d3->cb(sub {
        is($d3->recv, 'call 3', 'call 3 ok');
        $cv->end;
    });
});

$cv->begin;
$d2->cb(sub {
    is($d2->recv, 'call 2', 'call 2 ok');

    my $d4 = $c2->call('echo', 'call 4');
    $d4->cb(sub {
        is($d4->recv, 'call 4', 'call 4 ok');
        $cv->end;
    });
});

$cv->recv;