IO::Lambda::Socket::TCPServerなるモジュールを作ってみた

 これは要は、POCO::Server::TCPをIO::Lambdaベースで書き直してみた、というものです。
 まだフィルタとか、全然できてませんが…
 あ、今回初めてgithubも使ってみました。ソースコードはこちらにおいてあります。
 GitHub - taiyoh/io-lambda-socket-tcpserver: IO: :TCPServer is a simplified TCP server
 誤字、ドキュメント足りない、テスト書いてないなど、やることまだいっぱいあります><
 とりあえず、ドキュメントは日本語でいいですか(;_;)
 百聞は一見にしかず、ではないですが、これでechoサーバを書いてみるとこうなります。

#!/usr/bin/env perl

use strict;
use warnings;
use utf8;

use IO::Lambda qw/:all/;
use IO::Lambda::Socket::TCPServer qw/:all/;

my $server = lambda {
    context { Blocking => 0, LocalPort => 10000 };
    server_start {
        context shift;
    client_accepted {
        my ( $client, $input ) = @_;
        $client->put( $input );
    }};
};
$server->wait;

 contextの使い方はわかったけど、lambdaの使い方とかはさっぱり><
 あとはドキュメントを見てね、と言いたいところですが、全然書(いて|け)ません…
 contextの使い方は、その後に実行する関数の本来の引数、と思ってもらえればいいです。
 client_accepted関数の引数となってるブロックは、POCO::Server::TCPのClientInputに相当する部分です。
 他のパラメータは、client_acceptedの前に実行されてるcontext関数の第2引数にハッシュリファレンスで入れてもらえれば、処理されます。が、今サポートしているのは、CientConnected、ClientDisconnected、ClientErrorの3つだけです。フィルターは後ほど実装予定。
 肝心のPOCO::Server::TCPとの速度比較はこれからやってみます。結果がよければ、それだけで一つのアドバンテージになりそう。こっちの方が、見た目もシンプルだし(このキモい記法に慣れれば、の話ですが)。
(追記)
 今更POE::Filter::*見てみましたが、これに合わせるとなると、かなり変えないとだなぁ…。ちょっとフィルター関係をどうすればいいか見直し必要かも。
 というか、リクエストメッセージにCRLFが含まれていることが前提となるシステムだから、そこを何とか利用できればいいのか…。そういう意味で、POE的な汎用性は涙を飲んで切り捨てる必要があるな。じゃあ、このままでもいいといえばいいか。