1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
#!/usr/bin/env perl
use strict;
use warnings;
use FindBin::libs;
use Data::AMF::Packet;
use HTTPEx::Declare;
use List::Util ();
use Path::Class;
interface ServerSimple => {
host => '0.0.0.0',
port => 3000,
};
run {
my $c = shift;
if ($c->req->path eq 'gateway') {
my $fh = $c->req->body;
my $body = do { local $/; <$fh> };
my $request = Data::AMF::Packet->deserialize($body);
my @result;
for my $message (@{ $request->messages }) {
my $method = __PACKAGE__->can($message->target_uri);
if ($method) {
my $result = $method->( $message->value );
push @result, $message->result($result);
}
}
my $response = Data::AMF::Packet->new(
version => $request->version,
headers => [],
messages => \@result,
);
$c->res->content_type('application/x-amf');
$c->res->body($response->serialize)
}
else {
$c->res->content_type('application/x-shockwave-flash');
$c->res->body( scalar file('./examples/simple_flash_remoting.swf')->slurp );
}
};
sub echo {
return $_[0];
}
sub sum {
return List::Util::sum(@{ $_[0] });
}
sub dump {
use YAML;
warn Dump $_[0];
}
|