#!/usr/bin/perl -w
my
$EXIT_FAILURE
= 1;
my
(
$false
,
$true
) = (0,1);
sub
MyDumper
{
$_
= Dumper (
$_
[0] );
s/^(.*?)
bless
/
bless
/;
$_
;
}
sub
getResponse
{
my
$c
=
shift
;
my
$e
=
$c
->getEvent ( AW_INFINITE );
unless
(
$e
) {
printf
STDERR
"%s\n"
,
$c
->errmsg;
exit
(
$EXIT_FAILURE
);
}
my
$eventName
=
$e
->getTypeName;
print
STDERR
"Received an $eventName event\n"
;
if
(
$eventName
eq
"Adapter::ack"
) {
my
%eventData
=
$e
->getField (
"_env"
);
foreach
my
$key
(
sort
keys
%eventData
) {
if
(
ref
(
$eventData
{
$key
}) eq
"Aw::Date"
) {
print
STDERR
" $key => "
,
$eventData
{
$key
}->toString,
"\n"
;
}
else
{
print
STDERR
" $key => $eventData{$key}\n"
;
}
}
}
else
{
print
STDERR
$e
->toString;
}
}
main:
{
my
%Config
=(
brokerName
=>
'test_broker'
,
brokerHost
=>
'localhost:6449'
,
clientGroup
=>
'PerlDemoClient'
,
clientName
=>
'PerlDemo'
,
application
=>
'PerlDemo'
,
adapterName
=>
'Perl Demo Adapter'
);
my
@arrayData
= (
'A'
,
'B'
,
'C'
);
my
%hashData
= (
structInt
=> 11,
structString
=>
"Hello From Struct B"
);
my
%FieldData
=(
booleanDemo
=>
$false
,
charDemo
=>
'Z'
,
floatDemo, => 123.456,
intDemo, => 123456,
stringDemo
=>
"Hello World"
,
stringSeqDemo
=> [
"One"
,
"Two"
,
"Three"
],
intSeqDemo
=> [10,20,30,40,50],
charSeqDemo
=> \
@arrayData
,
structADemo
=> {
structInt
=> 99,
structString
=>
"Hello From Struct A"
},
structBDemo
=> \
%hashData
,
structCDemo
=> {
intSeqDemo
=> [ 1, 2, 3, 4, 5 ]
},
structDDemo
=> {
structInt
=> 55,
structADemo
=> {
structInt
=> 11,
structString
=>
"Hello From StructD:A"
}
}
);
%MoreData
=(
intA
=> 11,
structA
=> {
intB
=> 22,
structB
=> {
intC
=> 33,
stringC
=>
"Hello From StructB"
}
}
);
my
$eventName
=
"PerlDevKit::PerlDemo"
;
my
$world
= new HelloWorld;
$world
->store(5);
$MoreData
{structA}{structB}{stringC} = MyDumper (
$world
);
undef
(
$world
);
my
$eventTime
= new Aw::Date;
$eventTime
->setDateCtime (
time
);
$FieldData
{dateDemo} =
$eventTime
;
$FieldData
{moreData} = \
%MoreData
;
my
$c
= Aw::Client::
connect
( \
%Config
);
unless
(
$c
->canPublish (
$eventName
) ) {
printf
STDERR
"Cannot publish to %s: %s\n"
,
$eventName
,
$c
->errmsg;
exit
(
$EXIT_FAILURE
);
}
my
$e
= new Aw::Event (
$c
,
$eventName
, \
%FieldData
);
unless
(
$e
) {
print
STDERR
$e
->errmsg,
"\n"
;
exit
(
$EXIT_FAILURE
);
}
if
(
$c
->deliver (
$Config
{adapterName},
$e
) ) {
print
STDERR
$c
->errmsg;
exit
(
$EXIT_FAILURE
);
}
else
{
print
"Published a $eventName event.\n"
;
print
$e
->toString,
"\n"
;
}
getResponse (
$c
);
exit
( 0 );
}