The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Data::AMF::Remoting;
use Plack::Request;
use UNIVERSAL::require;

sub
{
	my $env = shift;
	my $req = Plack::Request->new($env);
	my $res = $req->new_response(200);
	
	if ($req->path =~ /\/amf\/gateway$/)
	{
		my $remoting = Data::AMF::Remoting->new(
			source => $req->raw_body,
			message_did_process => sub
			{
				my $message = shift;

				my ($controller_name, $method) = split '\.', $message->target_uri;
				
				$controller_name->require;
				my $controller = $controller_name->new;
				
				return $controller->$method($message->value);
			}
		);
		$remoting->run;
		
		$res->content_type('application/x-amf');
		$res->body($remoting->data);
	}
	
	return $res->finalize;
};