2007年8月30日星期四

script for Oracle SQL sharing in lab, users can telnet port 1520

#!/usr/bin/perl -w
use strict;
use POE;
use POE::Component::Server::TCP;

my %tch;

POE::Component::Server::TCP->new (
    Port => 1520,
    ClientInput => sub {
        my ( $kernel, $heap, $input ) = @_[ KERNEL, HEAP, ARG0 ];
        $heap->{seq} = 2 if $input =~ s/SQL> +//;
        $heap->{seq}++ if $input =~ s/^\s+$heap->{seq}  //;
        $kernel->post($_ => send => $input) for keys %tch;
    $kernel->yield("shutdown") if $input =~ /^bye$/;
    },
    InlineStates => { send => sub { $_[HEAP]->{client}->put($_[ARG0]) } },

    ClientConnected => sub { $tch{ ${_[SESSION]->ID} } = 1; },
    ClientDisconnected => sub { delete $tch{ ${_[SESSION]->ID} }; },
  );

$poe_kernel->run;
 

没有评论: