Hi all,
I am working on openwire-cpp ( for ActiveMQ-4.0) code on SuSe(Linux
machine->i686-suse-linux, version 2.6.13-15.8-default), in C++ .
I have a separate sender and receiver and I am able to make them
communicate bi-directionally vi a single queue, and they are working fine.
But I am unable to do the same for the multiple clients. How I can make
many senders for a single receiver on one single queue (bi-directional). I
am sending code for this sender and receiver Pls help me, my project is
delaying because of this.
Thanks in advance........
***************************Receiver.cpp******************************
p<IMessageConsumer> consumer ;
p<IMessageProducer> producer, producer1 ;
p<IQueue> queue, queue1 ;
void TestReceiveQueue::execute() throw (exception)
{
p<ITextMessage> message;
// Connect to a queue
queue = session->getQueue("FOO.BAR") ;
producer = session->createProducer(queue) ;
consumer = session->createConsumer(queue) ;
printf("\nClientID is ->%s\n", (connection->getClientId())->c_str());
consumer->setMessageListener( smartify(this) ) ;
message = session->createTextMessage("saifi");
producer->send(message) ;
//Receive message
while(1)
{
}
// Wait for asynchronous message for 1s
semaphore.wait(1) ;
// Check if any error was registered by the message handler
if( error != NULL )
throw TraceException( error ) ;
}
void TestReceiveQueue::onMessage(p<IMessage> message)
{
p<ITextMessage> message2;
p<IDestination> dest;
char Replay[1000]=
{'s','a','i','f','i','1','a','r','a','s','h','a','d'};
p<string> sReceive;
if( message == NULL )
{
error = "Received a null message" ;
semaphore.notify() ;
return ;
}
printf("Message ID->%s", message->getJMSMessageID()->c_str());
p<ITextMessage> mess = p_dyncast<ITextMessage> (message);
if (strcmp((sReceive = mess->getText())->c_str(), "saifi")!=0)
{
printf("\nRecieved message ->%s\n", mess->getText()->c_str());
producer = session->createProducer(::queue) ;
strcat(Replay, mess->getText()->c_str());
message2 = session->createTextMessage(Replay);
producer->send(message2) ;
}
if( mess == NULL )
{
error = "Received wrong type of message" ;
semaphore.notify() ;
return ;
}
// Verify message content
if( strcmp((sReceive= mess->getText())->c_str(), "HelloWorld,Arshad")!= 0 )
{
error = "Message content has been corrupted" ;
}
semaphore.notify() ;
}
**************************End Receiver*******************************
**************************sender.cpp**********************************
void TestSendQueue::execute() throw (exception)
{
p<IQueue> queue, queue1 ;
p<IMessageConsumer> consumer, consumer1 ;
p<IMessageProducer> producer ;
p<ITextMessage> message;
// Connect to a queue
queue = session->getQueue("FOO.BAR") ;
// Create producer
producer = session->createProducer(queue) ;
producer->setPersistent(true) ;
////////// For Listening
//queue1 = session->getQueue("FOO.BAR1") ;
consumer = session->createConsumer(queue);
printf("\nClientID is ->%s\n", (connection->getClientId())->c_str());
consumer->setMessageListener( smartify(this) ) ;
//////////
while(1)
{
//char MsgStr[50];
printf("\n\nEnter message : ");
fflush(stdin);
cin.getline(MsgStr, 500);
message = session->createTextMessage( MsgStr );
if (strcmp(MsgStr, "END")!=0)
{
producer->send(message);
sleep(1);
}
else
{
printf("\nTerminaing....\n");
sleep(1);
break;
}
}
// Wait for asynchronous message for 1s
semaphore.wait(1) ;
// Check if any error was registered by the message handler
if( error != NULL )
throw TraceException( error ) ;
}
void TestSendQueue::onMessage(p<IMessage> message)
{
printf("Message ID->%s", message->getJMSMessageID()->c_str());
printf("\nRecever is Online\n");
p<string> sReceive;
if( message == NULL )
{
error = "Received a null message" ;
semaphore.notify() ;
return ;
}
p<ITextMessage> mess = p_dyncast<ITextMessage> (message);
if (strcmp((sReceive = mess->getText())->c_str(), "saifi")!=0)
printf("\nResponce Message ->%s\n", mess->getText()->c_str());
if( mess == NULL )
{
error = "Received wrong type of message" ;
semaphore.notify() ;
return ;
}
if( strcmp((sReceive= mess->getText())->c_str(), "Hello World, Arshad")
!= 0 )
{
error = "Message content has been corrupted" ;
}
semaphore.notify() ;
}
**************************End Sender**********************************
Thanks & Regards
Arashad Ahamad