AnyEventのサンプルその2
AnyEvent::Handleを使って対話するサーバを書く
サーバを立ち上げてtelnetでアクセスすると名前を聞かれるので答える。次に年齢まで聞いてくるので答えます。それで対話が終了しサーバの方から接続を切ってきます。味噌はIO監視の中でさらに監視をしているというところなのだが、本当に問題のない書き方なのかが少し心配。。
use strict; use warnings; use AnyEvent; use AnyEvent::Strict; use AnyEvent::Handle; use AnyEvent::Socket; $|++; my $cv = AE::cv; tcp_server '127.0.0.1', 8888, sub { my ($fh) = @_ or die; my $handle; $handle = AnyEvent::Handle->new( fh => $fh, on_error => sub { }, on_eof => sub { }, on_read => sub { print "now on_read\n"; } ); $handle->push_write("Enter Your Name: "); my $w; $w = AnyEvent->io( fh => $fh, poll => 'r', cb => sub { my ( $name, $age ); $handle->push_read( line => sub { my ( $handle, $line ) = @_; $name = $line; } ); $handle->push_write("Your Name is $name\015\012"); $handle->push_write("How old r u ?: "); my $w2; $w2 = AnyEvent->io( fh => $fh, poll => 'r', cb => sub { $handle->push_read( line => sub { my ( $handle, $line ) = @_; $age = $line; } ); $handle->push_write("You are $age years old\015\012"); $handle->push_write("個人情報は頂いた!! \015\012"); undef $w2; }, ); undef $w; }, ); }; $cv->recv;