#!/usr/bin/perl
#
# Qpid 0.10 comes with SWIG generated Perl wrappers for the C++ qpid::messaging API in ./qpid-0.10/cpp/bindings/qpid/perl
# The easiest way to build is just to do a "./bootstrap" "./configure" "make all" "make install" to build the C++
# broker and client API. "make install" installs the libcqpid_perl.so, but doesn't seem to install cqpid_perl.pm
# so this needs to be put manually somewhere on the Perl @INC path or PERL5LIB env variable needs to point to it.
#

use strict;
use warnings;
use Time::HiRes;
use cqpid_perl;
use cqpid_perl_utf8;

my $broker            = "localhost:5672";
my $address           = "amq.match"; #Publish to Headers Exchange
my $connectionOptions = "{reconnect: true}";

my $connection = new cqpid_perl::Connection($broker, $connectionOptions);
eval {
    $connection->open();
    my $session = $connection->createSession();
    my $sender   = $session->createSender($address);

	my $NUMBER_OF_ITERATIONS = 100000;
	my $startTime = [Time::HiRes::gettimeofday()];

	for (my $i = 0; $i < $NUMBER_OF_ITERATIONS; $i++) {
		my $buffer = "\x20" x 50000;
		#my $message = new cqpid_perl::Message("Hello world!");
		my $message = new cqpid_perl::Message($buffer);

		if (($i % 3) == 0) {
			#$message->setProperty("item-owner", "jdadams");
			cqpid_perl_utf8::setUtf8Property($message, "item-owner", "jdadams");
		} else {
			#$message->setProperty("item-owner", "fadams");
			cqpid_perl_utf8::setUtf8Property($message, "item-owner", "fadams");
		}
		#$message->setProperty("data-service", "amqp-delivery");
		cqpid_perl_utf8::setUtf8Property($message, "data-service", "amqp-delivery");

		$sender->send($message);
		print "Sent message #$i\n";
	}
	
	$session->sync();
	my $elapsed = Time::HiRes::tv_interval($startTime)*1000;

	print "Elapsed time = " . $elapsed . ", messages/second = " . $NUMBER_OF_ITERATIONS*1000/$elapsed . "\n";

	$connection->close();
};

die $@ if ($@);
