package Catalyst::Engine::Stomp;
use Moose;
-extends 'Catalyst::Engine::Embeddable';
-
-our $VERSION = '0.04';
-
use List::MoreUtils qw/ uniq /;
use HTTP::Request;
use Net::Stomp;
+use namespace::autoclean;
+
+extends 'Catalyst::Engine::Embeddable';
+
+our $VERSION = '0.04';
has connection => (is => 'rw', isa => 'Net::Stomp');
has conn_desc => (is => 'rw', isa => 'Str');
=cut
sub prepare_request {
- my ($self, $c, $req, $res_ref) = @_;
- shift @_;
- $self->next::method(@_);
- $c->req->address($self->conn_desc);
+ my ($self, $c, $req, $res_ref) = @_;
+ shift @_;
+ $self->next::method(@_);
+ $c->req->address($self->conn_desc);
}
=head2 finalize_headers
=cut
sub finalize_headers {
- my ($self, $c) = @_;
- my $error = join "\n", @{$c->error};
- if ($error) {
- $c->log->debug($error);
- }
- return $self->next::method($c);
+ my ($self, $c) = @_;
+ my $error = join "\n", @{$c->error};
+ if ($error) {
+ $c->log->debug($error);
+ }
+ return $self->next::method($c);
}
=head2 handle_stomp_frame
=cut
sub handle_stomp_frame {
- my ($self, $app, $frame) = @_;
-
- my $command = $frame->command();
- if ($command eq 'MESSAGE') {
- $self->handle_stomp_message($app, $frame);
- }
- elsif ($command eq 'ERROR') {
- $self->handle_stomp_error($app, $frame);
- }
- else {
- $app->log->debug("Got unknown Stomp command: $command");
- }
+ my ($self, $app, $frame) = @_;
+
+ my $command = $frame->command();
+ if ($command eq 'MESSAGE') {
+ $self->handle_stomp_message($app, $frame);
+ }
+ elsif ($command eq 'ERROR') {
+ $self->handle_stomp_error($app, $frame);
+ }
+ else {
+ $app->log->debug("Got unknown Stomp command: $command");
+ }
}
=head2 handle_stomp_message
=cut
sub handle_stomp_message {
- my ($self, $app, $frame) = @_;
-
- # queue -> controller
- my $queue = $frame->headers->{destination};
- my ($controller) = $queue =~ m!^/queue/(.*)$!;
-
- # set up request
- my $config = $app->config->{'Engine::Stomp'};
- my $url = 'stomp://'.$config->{hostname}.':'.$config->{port}.'/'.$controller;
- my $req = HTTP::Request->new(POST => $url);
- $req->content($frame->body);
- $req->content_length(length $frame->body);
-
- # dispatch
- my $response;
- $app->handle_request($req, \$response);
-
- # reply, if header set
- if (my $reply_to = $response->headers->header('X-Reply-Address')) {
- my $reply_queue = '/remote-temp-queue/' . $reply_to;
- $self->connection->send({ destination => $reply_queue, body => $response->content });
- }
-
- # ack the message off the queue now we've replied / processed
- $self->connection->ack( { frame => $frame } );
+ my ($self, $app, $frame) = @_;
+
+ # queue -> controller
+ my $queue = $frame->headers->{destination};
+ my ($controller) = $queue =~ m|^/queue/(.*)$|;
+
+ # set up request
+ my $config = $app->config->{'Engine::Stomp'};
+ my $url = 'stomp://'.$config->{hostname}.':'.$config->{port}.'/'.$controller;
+ my $req = HTTP::Request->new(POST => $url);
+ $req->content($frame->body);
+ $req->content_length(length $frame->body);
+
+ # dispatch
+ my $response;
+ $app->handle_request($req, \$response);
+
+ # reply, if header set
+ if (my $reply_to = $response->headers->header('X-Reply-Address')) {
+ my $reply_queue = '/remote-temp-queue/' . $reply_to;
+ $self->connection->send({ destination => $reply_queue, body => $response->content });
+ }
+
+ # ack the message off the queue now we've replied / processed
+ $self->connection->ack( { frame => $frame } );
}
=head2 handle_stomp_error
=cut
sub handle_stomp_error {
- my ($self, $app, $frame) = @_;
+ my ($self, $app, $frame) = @_;
- my $error = $frame->headers->{message};
- $app->log->debug("Got Stomp error: $error");
+ my $error = $frame->headers->{message};
+ $app->log->debug("Got Stomp error: $error");
}
__PACKAGE__->meta->make_immutable;
-1;
-