MochiKit的にPoCo::Client::HTTPをつかえるラッパーを書いてみた。

POE は結構好きなんだけど、使ってるにつれていろいろ不満が出てくる。

Client::HTTP もその一つで、レスポンスを受け取るコールバックに CodeRef を指定できないくていちいちステートを作らないといけないのが嫌なので、こんなのを作ってみました。

POE::Component::Client::HTTPDeferred

MochiKit のインタフェースを参考にしてます。

こんな感じで使う。

use POE qw/Component::Client::HTTPDeferred/;
use HTTP::Request::Common;

POE::Session->create(
    inline_states => {
        _start => sub {
            my $ua = POE::Component::Client::HTTPDeferred->new;
            my $d  = $ua->request( GET 'http://unknownplace.org/memo/' );

            $d->addBoth(sub {
                my $res = shift;

                if ($res->is_success) {
                    print $res->as_string;
                }
                else {
                    warn $res->status_line;
                }

                $ua->shutdown;
            });
        },
    },
);
POE::Kernel->run;

js やってる人にはちょっと見慣れた感じじゃない?

これの Deferred 自体は全然機能足りてないけど、素で PoCo::C::HTTP つかうのと比べるとずいぶん楽になる。DeferredListもほしいな。

by typester / at 2008-11-13T23:04:00 / perl · poe / Comment