You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by tr...@apache.org on 2010/08/20 15:58:21 UTC
svn commit: r987510 - in /qpid/trunk/qpid/cpp/bindings/qpid/dotnet:
examples/csharp.example.drain/ examples/csharp.map.receiver/
examples/csharp.map.sender/ src/ src/sessionreceiver/
Author: tross
Date: Fri Aug 20 13:58:20 2010
New Revision: 987510
URL: http://svn.apache.org/viewvc?rev=987510&view=rev
Log:
QPID-2798 - C++ Messaging Client .NET binding fails to clone managed objects correctly
Patch from Chuck Rolke
Modified:
qpid/trunk/qpid/cpp/bindings/qpid/dotnet/examples/csharp.example.drain/csharp.example.drain.cs
qpid/trunk/qpid/cpp/bindings/qpid/dotnet/examples/csharp.map.receiver/csharp.map.recevier.cs
qpid/trunk/qpid/cpp/bindings/qpid/dotnet/examples/csharp.map.sender/csharp.map.sender.cs
qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Address.cpp
qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Address.h
qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Connection.cpp
qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Connection.h
qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Message.cpp
qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Message.h
qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Receiver.cpp
qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Receiver.h
qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Sender.cpp
qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Sender.h
qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Session.cpp
qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Session.h
qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/sessionreceiver/sessionreceiver.cs
Modified: qpid/trunk/qpid/cpp/bindings/qpid/dotnet/examples/csharp.example.drain/csharp.example.drain.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qpid/dotnet/examples/csharp.example.drain/csharp.example.drain.cs?rev=987510&r1=987509&r2=987510&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qpid/dotnet/examples/csharp.example.drain/csharp.example.drain.cs (original)
+++ qpid/trunk/qpid/cpp/bindings/qpid/dotnet/examples/csharp.example.drain/csharp.example.drain.cs Fri Aug 20 13:58:20 2010
@@ -43,8 +43,9 @@ namespace Org.Apache.Qpid.Messaging.Exam
Duration timeout = options.Forever ?
DurationConstants.FORVER :
DurationConstants.SECOND * options.Timeout;
- Message message = new Message();
- while (receiver.Fetch(message, timeout))
+ Message message;
+
+ while ((message = receiver.Fetch(timeout)) != null)
{
Dictionary<string, object> properties = new Dictionary<string, object>();
properties = message.Properties;
Modified: qpid/trunk/qpid/cpp/bindings/qpid/dotnet/examples/csharp.map.receiver/csharp.map.recevier.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qpid/dotnet/examples/csharp.map.receiver/csharp.map.recevier.cs?rev=987510&r1=987509&r2=987510&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qpid/dotnet/examples/csharp.map.receiver/csharp.map.recevier.cs (original)
+++ qpid/trunk/qpid/cpp/bindings/qpid/dotnet/examples/csharp.map.receiver/csharp.map.recevier.cs Fri Aug 20 13:58:20 2010
@@ -35,8 +35,11 @@ namespace Org.Apache.Qpid.Messaging.exam
static void Main(string[] args)
{
string url = "amqp:tcp:localhost:5672";
+ string address = "message_queue; {create: always}";
if (args.Length > 0)
url = args[0];
+ if (args.Length > 1)
+ address = args[1];
//
// Create and open an AMQP connection to the broker URL
@@ -49,7 +52,7 @@ namespace Org.Apache.Qpid.Messaging.exam
// routing key "map_example".
//
Session session = connection.CreateSession();
- Receiver receiver = session.CreateReceiver("amq.direct/map_example");
+ Receiver receiver = session.CreateReceiver(address);
//
// Fetch the message from the broker
@@ -61,7 +64,7 @@ namespace Org.Apache.Qpid.Messaging.exam
//
Dictionary<string, object> content = new Dictionary<string, object>();
message.GetContent(content);
- Console.WriteLine("Received: {0}", message.AsString(content));
+ Console.WriteLine("{0}", message.AsString(content));
//
// Acknowledge the receipt of all received messages.
Modified: qpid/trunk/qpid/cpp/bindings/qpid/dotnet/examples/csharp.map.sender/csharp.map.sender.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qpid/dotnet/examples/csharp.map.sender/csharp.map.sender.cs?rev=987510&r1=987509&r2=987510&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qpid/dotnet/examples/csharp.map.sender/csharp.map.sender.cs (original)
+++ qpid/trunk/qpid/cpp/bindings/qpid/dotnet/examples/csharp.map.sender/csharp.map.sender.cs Fri Aug 20 13:58:20 2010
@@ -39,8 +39,11 @@ namespace Org.Apache.Qpid.Messaging.exam
static void Main(string[] args)
{
string url = "amqp:tcp:localhost:5672";
+ string address = "message_queue; {create: always}";
if (args.Length > 0)
url = args[0];
+ if (args.Length > 1)
+ address = args[1];
//
// Create and open an AMQP connection to the broker URL
@@ -49,11 +52,10 @@ namespace Org.Apache.Qpid.Messaging.exam
connection.Open();
//
- // Create a session and a sender to the direct exchange using the
- // routing key "map_example".
+ // Create a session and a sender to the direct exchange
//
Session session = connection.CreateSession();
- Sender sender = session.CreateSender("amq.direct/map_example");
+ Sender sender = session.CreateSender(address);
//
// Create structured content for the message. This example builds a
Modified: qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Address.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Address.cpp?rev=987510&r1=987509&r2=987510&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Address.cpp (original)
+++ qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Address.cpp Fri Aug 20 13:58:20 2010
@@ -78,17 +78,16 @@ namespace Messaging {
Type = type;
}
- // Copy constructor
+ // copy constructor
Address::Address(const Address ^ address)
: addressp(new ::qpid::messaging::Address(
*(const_cast<Address ^>(address)->NativeAddress)))
{
}
- // Create from received address
- // The new Address object consumes the unmanaged pointer
- Address::Address(::qpid::messaging::Address * addrp) :
- addressp(addrp)
+ // unmanaged clone
+ Address::Address(const ::qpid::messaging::Address & addrp) :
+ addressp(new ::qpid::messaging::Address(addrp))
{
}
Modified: qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Address.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Address.h?rev=987510&r1=987509&r2=987510&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Address.h (original)
+++ qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Address.h Fri Aug 20 13:58:20 2010
@@ -68,9 +68,8 @@ namespace Messaging {
// copy constructor
Address(const Address ^ address);
- // Create from received address
- // The new Address object consumes the unmanaged pointer
- Address(::qpid::messaging::Address * addrp);
+ // unmanaged clone
+ Address(const ::qpid::messaging::Address & addrp);
~Address();
!Address();
@@ -84,7 +83,8 @@ namespace Messaging {
}
else
{
- delete addressp;
+ if (NULL != addressp)
+ delete addressp;
addressp = new ::qpid::messaging::Address(
*(const_cast<Address %>(rhs).NativeAddress) );
}
Modified: qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Connection.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Connection.cpp?rev=987510&r1=987509&r2=987510&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Connection.cpp (original)
+++ qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Connection.cpp Fri Aug 20 13:58:20 2010
@@ -132,16 +132,13 @@ namespace Messaging {
Session ^ Connection::CreateTransactionalSession(System::String ^ name)
{
System::Exception ^ newException = nullptr;
- ::qpid::messaging::Session * sessionp = NULL;
Session ^ newSession = nullptr;
try
{
- // allocate native session
- sessionp = new ::qpid::messaging::Session ;
-
// create native session
- *sessionp = connectionp->createTransactionalSession(QpidMarshal::ToNative(name));
+ ::qpid::messaging::Session sessionp =
+ connectionp->createTransactionalSession(QpidMarshal::ToNative(name));
// create managed session
newSession = gcnew Session(sessionp, this);
@@ -160,13 +157,6 @@ namespace Messaging {
{
delete newSession;
}
- else
- {
- if (sessionp != NULL)
- {
- delete sessionp;
- }
- }
}
}
@@ -191,16 +181,13 @@ namespace Messaging {
Session ^ Connection::CreateSession(System::String ^ name)
{
System::Exception ^ newException = nullptr;
- ::qpid::messaging::Session * sessionp = NULL;
Session ^ newSession = nullptr;
try
{
- // allocate native session
- sessionp = new ::qpid::messaging::Session ;
-
// create native session
- *sessionp = connectionp->createSession(QpidMarshal::ToNative(name));
+ ::qpid::messaging::Session sessionp =
+ connectionp->createSession(QpidMarshal::ToNative(name));
// create managed session
newSession = gcnew Session(sessionp, this);
@@ -219,13 +206,6 @@ namespace Messaging {
{
delete newSession;
}
- else
- {
- if (sessionp != NULL)
- {
- delete sessionp;
- }
- }
}
}
@@ -241,14 +221,14 @@ namespace Messaging {
Session ^ Connection::GetSession(System::String ^ name)
{
System::Exception ^ newException = nullptr;
- ::qpid::messaging::Session * sess = NULL;
Session ^ newSession = nullptr;
try
{
const std::string n = QpidMarshal::ToNative(name);
- *sess = connectionp->::qpid::messaging::Connection::getSession(n);
+ ::qpid::messaging::Session sess =
+ connectionp->::qpid::messaging::Connection::getSession(n);
newSession = gcnew Session(sess, this);
}
@@ -266,13 +246,6 @@ namespace Messaging {
{
delete newSession;
}
- else
- {
- if (sess != NULL)
- {
- delete sess;
- }
- }
}
}
Modified: qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Connection.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Connection.h?rev=987510&r1=987509&r2=987510&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Connection.h (original)
+++ qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Connection.h Fri Aug 20 13:58:20 2010
@@ -60,6 +60,9 @@ namespace Messaging {
// copy constructor
Connection(const Connection ^ connection);
+ // unmanaged clone
+ // not defined
+
~Connection();
!Connection();
@@ -72,7 +75,8 @@ namespace Messaging {
}
else
{
- delete connectionp;
+ if (NULL != connectionp)
+ delete connectionp;
connectionp = new ::qpid::messaging::Connection(
*(const_cast<Connection %>(rhs).NativeConnection) );
}
@@ -84,15 +88,6 @@ namespace Messaging {
::qpid::messaging::Connection * get () { return connectionp; }
}
- property System::String ^ NPAddress
- {
- System::String ^ get ()
- {
- System::IntPtr i((void *)connectionp);
- return gcnew System::String(i.ToString());
- }
- }
-
void SetOption(System::String ^ name, System::Object ^ value);
void Open();
Modified: qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Message.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Message.cpp?rev=987510&r1=987509&r2=987510&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Message.cpp (original)
+++ qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Message.cpp Fri Aug 20 13:58:20 2010
@@ -120,9 +120,9 @@ namespace Messaging {
}
- // Create from received message
- Message::Message(::qpid::messaging::Message * msgp) :
- messagep(msgp)
+ // unmanaged clone
+ Message::Message(const ::qpid::messaging::Message & msgp) :
+ messagep(new ::qpid::messaging::Message(msgp))
{
}
Modified: qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Message.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Message.h?rev=987510&r1=987509&r2=987510&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Message.h (original)
+++ qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Message.h Fri Aug 20 13:58:20 2010
@@ -69,15 +69,15 @@ namespace Messaging {
// Create from byte array slice
Message(array<System::Byte> ^ bytes, int offset, int size);
- // Create from received message
- Message(::qpid::messaging::Message * msgp);
-
~Message();
!Message();
// Copy constructor
Message(const Message ^ message);
+ // unmanaged clone
+ Message(const ::qpid::messaging::Message & msgp);
+
// assignment operator
Message % operator=(const Message % rhs)
{
@@ -87,7 +87,8 @@ namespace Messaging {
}
else
{
- delete messagep;
+ if (NULL != messagep)
+ delete messagep;
messagep = new ::qpid::messaging::Message(
*(const_cast<Message %>(rhs).NativeMessage) );
}
@@ -117,7 +118,7 @@ namespace Messaging {
const ::qpid::messaging::Address & addrp =
messagep->::qpid::messaging::Message::getReplyTo();
- return gcnew Address(const_cast<::qpid::messaging::Address *>(&addrp));
+ return gcnew Address(addrp);
}
}
@@ -299,6 +300,7 @@ namespace Messaging {
gcnew System::Collections::Generic::Dictionary<
System::String^, System::Object^> ;
+
TypeTranslator::NativeToManaged(map, dict);
return dict;
Modified: qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Receiver.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Receiver.cpp?rev=987510&r1=987509&r2=987510&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Receiver.cpp (original)
+++ qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Receiver.cpp Fri Aug 20 13:58:20 2010
@@ -43,13 +43,16 @@ namespace Messaging {
/// Receiver is a managed wrapper for a ::qpid::messaging::Receiver
/// </summary>
- Receiver::Receiver(::qpid::messaging::Receiver * r,
+ // unmanaged clone
+ Receiver::Receiver(const ::qpid::messaging::Receiver & r,
Org::Apache::Qpid::Messaging::Session ^ sessRef) :
- receiverp(r),
+ receiverp(new ::qpid::messaging::Receiver (r)),
parentSession(sessRef)
{
}
+ // unmanaged clone
+ // undefined
// Destructor
Receiver::~Receiver()
@@ -88,17 +91,24 @@ namespace Messaging {
//
// Get(message)
//
- bool Receiver::Get(Message ^ mmsgp)
- {
- return Get(mmsgp, DurationConstants::FORVER);
- }
-
- bool Receiver::Get(Message ^ mmsgp, Duration ^ durationp)
- {
- ::qpid::messaging::Duration dur((*durationp).Milliseconds);
-
- return receiverp->Receiver::get(*(mmsgp->NativeMessage), dur);
- }
+ // TBD
+ //bool Receiver::Get(Message ^ mmsgp)
+ //{
+ // return Get(mmsgp, DurationConstants::FORVER);
+ //}
+ //
+ //bool Receiver::Get(Message ^ mmsgp, Duration ^ durationp)
+ //{
+ // ::qpid::messaging::Duration dur((*durationp).Milliseconds);
+ //
+ // ::qpid::messaging::Message tmpMsg;
+ //
+ // bool result = receiverp->Receiver::get(tmpMsg, dur);
+ //
+ // mmsgp = gcnew Message(tmpMsg);
+ //
+ // return result;
+ //}
//
// message = Get()
@@ -112,22 +122,19 @@ namespace Messaging {
Message ^ Receiver::Get(Duration ^ durationp)
{
System::Exception ^ newException = nullptr;
- ::qpid::messaging::Message * msgp = NULL;
Message ^ newMessage = nullptr;
try
{
- // allocate a message
- msgp = new ::qpid::messaging::Message;
-
// translate the duration
::qpid::messaging::Duration dur((*durationp).Milliseconds);
// get the message
- *msgp = receiverp->::qpid::messaging::Receiver::get(dur);
+ ::qpid::messaging::Message msg =
+ receiverp->::qpid::messaging::Receiver::get(dur);
// create new managed message with received message embedded in it
- newMessage = gcnew Message(msgp);
+ newMessage = gcnew Message(msg);
}
catch (const ::qpid::types::Exception & error)
{
@@ -138,10 +145,6 @@ namespace Messaging {
{
if (newException != nullptr)
{
- if (msgp != NULL)
- {
- delete msgp;
- }
if (newMessage != nullptr)
{
delete newMessage;
@@ -159,17 +162,24 @@ namespace Messaging {
//
// Fetch(message)
//
- bool Receiver::Fetch(Message ^ mmsgp)
- {
- return Fetch(mmsgp, DurationConstants::FORVER);
- }
-
- bool Receiver::Fetch(Message ^ mmsgp, Duration ^ durationp)
- {
- ::qpid::messaging::Duration dur((*durationp).Milliseconds);
-
- return receiverp->::qpid::messaging::Receiver::fetch(*((*mmsgp).NativeMessage), dur);
- }
+ // TBD
+ //bool Receiver::Fetch(Message ^ mmsgp)
+ //{
+ // return Fetch(mmsgp, DurationConstants::FORVER);
+ //}
+ //
+ //bool Receiver::Fetch(Message ^ mmsgp, Duration ^ durationp)
+ //{
+ // ::qpid::messaging::Duration dur((*durationp).Milliseconds);
+ //
+ // ::qpid::messaging::Message tmpMsg;
+ //
+ // bool result = receiverp->Receiver::fetch(tmpMsg, dur);
+ //
+ // mmsgp = gcnew Message(tmpMsg);
+ //
+ // return result;
+ //}
//
@@ -183,23 +193,20 @@ namespace Messaging {
Message ^ Receiver::Fetch(Duration ^ durationp)
{
- System::Exception ^ newException = nullptr;
- ::qpid::messaging::Message * msgp = NULL;
- Message ^ newMessage = nullptr;
+ System::Exception ^ newException = nullptr;
+ Message ^ newMessage = nullptr;
try
{
- // allocate a message
- ::qpid::messaging::Message * msgp = new ::qpid::messaging::Message;
-
// translate the duration
::qpid::messaging::Duration dur((*durationp).Milliseconds);
// get the message
- *msgp = receiverp->::qpid::messaging::Receiver::fetch(dur);
+ ::qpid::messaging::Message msg =
+ receiverp->::qpid::messaging::Receiver::fetch(dur);
// create new managed message with received message embedded in it
- newMessage = gcnew Message(msgp);
+ newMessage = gcnew Message(msg);
}
catch (const ::qpid::types::Exception & error)
{
@@ -210,10 +217,6 @@ namespace Messaging {
{
if (newException != nullptr)
{
- if (msgp != NULL)
- {
- delete msgp;
- }
if (newMessage != nullptr)
{
delete newMessage;
Modified: qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Receiver.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Receiver.h?rev=987510&r1=987509&r2=987510&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Receiver.h (original)
+++ qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Receiver.h Fri Aug 20 13:58:20 2010
@@ -61,12 +61,17 @@ namespace Messaging {
::qpid::messaging::Receiver * receiverp;
public:
- Receiver(::qpid::messaging::Receiver * r,
+
+ // unmanaged clone
+ Receiver(const ::qpid::messaging::Receiver & r,
Session ^ sessRef);
// copy constructor
Receiver(const Receiver ^ receiver);
+ // unmanaged clone
+ // undefined
+
~Receiver();
!Receiver();
@@ -79,7 +84,8 @@ namespace Messaging {
}
else
{
- delete receiverp;
+ if (NULL != receiverp)
+ delete receiverp;
receiverp = new ::qpid::messaging::Receiver(
*(const_cast<Receiver %>(rhs).NativeReceiver));
parentSession = rhs.parentSession;
@@ -93,16 +99,18 @@ namespace Messaging {
}
// Get(message)
- bool Get(Message ^ mmsgp);
- bool Get(Message ^ mmsgp, Duration ^ durationp);
+ // TBD
+ //bool Get(Message ^ mmsgp);
+ //bool Get(Message ^ mmsgp, Duration ^ durationp);
// message = Get()
Message ^ Get();
Message ^ Get(Duration ^ durationp);
// Fetch(message)
- bool Fetch(Message ^ mmsgp);
- bool Fetch(Message ^ mmsgp, Duration ^ duration);
+ // TBD
+ //bool Fetch(Message ^ mmsgp);
+ //bool Fetch(Message ^ mmsgp, Duration ^ duration);
// message = Fetch()
Message ^ Fetch();
Modified: qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Sender.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Sender.cpp?rev=987510&r1=987509&r2=987510&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Sender.cpp (original)
+++ qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Sender.cpp Fri Aug 20 13:58:20 2010
@@ -39,9 +39,10 @@ namespace Messaging {
/// Sender a managed wrapper for a ::qpid::messaging::Sender
/// </summary>
- Sender::Sender(::qpid::messaging::Sender * s,
+ // unmanaged clone
+ Sender::Sender(const ::qpid::messaging::Sender & s,
Org::Apache::Qpid::Messaging::Session ^ sessRef) :
- senderp(s),
+ senderp(new ::qpid::messaging::Sender (s)),
parentSession(sessRef)
{
}
Modified: qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Sender.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Sender.h?rev=987510&r1=987509&r2=987510&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Sender.h (original)
+++ qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Sender.h Fri Aug 20 13:58:20 2010
@@ -59,7 +59,8 @@ namespace Messaging {
void Cleanup();
public:
- Sender(::qpid::messaging::Sender * s,
+ // unmanaged clone
+ Sender(const ::qpid::messaging::Sender & s,
Session ^ sessRef);
// copy constructor
@@ -77,7 +78,8 @@ namespace Messaging {
}
else
{
- delete senderp;
+ if (NULL != senderp)
+ delete senderp;
senderp = new ::qpid::messaging::Sender(
*(const_cast<Sender %>(rhs).NativeSender));
parentSession = rhs.parentSession;
Modified: qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Session.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Session.cpp?rev=987510&r1=987509&r2=987510&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Session.cpp (original)
+++ qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Session.cpp Fri Aug 20 13:58:20 2010
@@ -45,10 +45,10 @@ namespace Messaging {
/// Session is a managed wrapper for a ::qpid::messaging::Session
/// </summary>
- // constructor
- Session::Session(::qpid::messaging::Session * sp,
+ // unmanaged clone
+ Session::Session(const ::qpid::messaging::Session & session,
Org::Apache::Qpid::Messaging::Connection ^ connRef) :
- sessionp(sp),
+ sessionp(new ::qpid::messaging::Session (session)),
parentConnectionp(connRef)
{
}
@@ -180,11 +180,10 @@ namespace Messaging {
try
{
::qpid::messaging::Duration dur(timeout->Milliseconds);
- ::qpid::messaging::Receiver * rcvr = new ::qpid::messaging::Receiver;
- *rcvr = sessionp->::qpid::messaging::Session::nextReceiver(dur);
+ ::qpid::messaging::Receiver receiver = sessionp->::qpid::messaging::Session::nextReceiver(dur);
- Receiver ^ newRcvr = gcnew Receiver(rcvr, this);
+ Receiver ^ newRcvr = gcnew Receiver(receiver, this);
return newRcvr;
}
@@ -210,19 +209,16 @@ namespace Messaging {
Sender ^ Session::CreateSender (System::String ^ address)
{
System::Exception ^ newException = nullptr;
- ::qpid::messaging::Sender * senderp = NULL;
Sender ^ newSender = nullptr;
try
{
- // allocate a native sender
- ::qpid::messaging::Sender * senderp = new ::qpid::messaging::Sender ;
-
// create the sender
- *senderp = sessionp->::qpid::messaging::Session::createSender(QpidMarshal::ToNative(address));
+ ::qpid::messaging::Sender sender =
+ sessionp->::qpid::messaging::Session::createSender(QpidMarshal::ToNative(address));
// create a managed sender
- newSender = gcnew Sender(senderp, this);
+ newSender = gcnew Sender(sender, this);
}
catch (const ::qpid::types::Exception & error)
{
@@ -237,13 +233,6 @@ namespace Messaging {
{
delete newSender;
}
- else
- {
- if (senderp != NULL)
- {
- delete senderp;
- }
- }
}
}
if (newException != nullptr)
@@ -258,19 +247,16 @@ namespace Messaging {
Sender ^ Session::CreateSender (Address ^ address)
{
System::Exception ^ newException = nullptr;
- ::qpid::messaging::Sender * senderp = NULL;
- Sender ^ newSender = nullptr;
+ Sender ^ newSender = nullptr;
try
{
// allocate a native sender
- ::qpid::messaging::Sender * senderp = new ::qpid::messaging::Sender ;
-
- // create the sender
- *senderp = sessionp->::qpid::messaging::Session::createSender(*(address->NativeAddress));
+ ::qpid::messaging::Sender sender =
+ sessionp->::qpid::messaging::Session::createSender(*(address->NativeAddress));
// create a managed sender
- newSender = gcnew Sender(senderp, this);
+ newSender = gcnew Sender(sender, this);
}
catch (const ::qpid::types::Exception & error)
{
@@ -285,13 +271,6 @@ namespace Messaging {
{
delete newSender;
}
- else
- {
- if (senderp != NULL)
- {
- delete senderp;
- }
- }
}
}
if (newException != nullptr)
@@ -306,19 +285,16 @@ namespace Messaging {
Receiver ^ Session::CreateReceiver(System::String ^ address)
{
System::Exception ^ newException = nullptr;
- ::qpid::messaging::Receiver * receiverp = NULL;
Receiver ^ newReceiver = nullptr;
try
{
- // allocate a native receiver
- receiverp = new ::qpid::messaging::Receiver;
-
// create the receiver
- *receiverp = sessionp->createReceiver(QpidMarshal::ToNative(address));
+ ::qpid::messaging::Receiver receiver =
+ sessionp->createReceiver(QpidMarshal::ToNative(address));
// create a managed receiver
- newReceiver = gcnew Receiver(receiverp, this);
+ newReceiver = gcnew Receiver(receiver, this);
}
catch (const ::qpid::types::Exception & error)
{
@@ -333,13 +309,6 @@ namespace Messaging {
{
delete newReceiver;
}
- else
- {
- if (receiverp != NULL)
- {
- delete receiverp;
- }
- }
}
}
if (newException != nullptr)
@@ -354,19 +323,16 @@ namespace Messaging {
Receiver ^ Session::CreateReceiver(Address ^ address)
{
System::Exception ^ newException = nullptr;
- ::qpid::messaging::Receiver * receiverp = NULL;
Receiver ^ newReceiver = nullptr;
try
{
- // allocate a native receiver
- receiverp = new ::qpid::messaging::Receiver;
-
// create the receiver
- *receiverp = sessionp->createReceiver(*(address->NativeAddress));
+ ::qpid::messaging::Receiver receiver =
+ sessionp->createReceiver(*(address->NativeAddress));
// create a managed receiver
- newReceiver = gcnew Receiver(receiverp, this);
+ newReceiver = gcnew Receiver(receiver, this);
}
catch (const ::qpid::types::Exception & error)
{
@@ -381,58 +347,6 @@ namespace Messaging {
{
delete newReceiver;
}
- else
- {
- if (receiverp != NULL)
- {
- delete receiverp;
- }
- }
- }
- }
- if (newException != nullptr)
- {
- throw newException;
- }
-
- return newReceiver;
- }
-
-
- Receiver ^ Session::CreateReceiver()
- {
- System::Exception ^ newException = nullptr;
- ::qpid::messaging::Receiver * receiverp = NULL;
- Receiver ^ newReceiver = nullptr;
-
- try
- {
- // allocate a native receiver
- receiverp = new ::qpid::messaging::Receiver;
-
- // create a managed receiver
- newReceiver = gcnew Receiver(receiverp, this);
- }
- catch (const ::qpid::types::Exception & error)
- {
- String ^ errmsg = gcnew String(error.what());
- newException = gcnew QpidException(errmsg);
- }
- finally
- {
- if (newException != nullptr)
- {
- if (newReceiver != nullptr)
- {
- delete newReceiver;
- }
- else
- {
- if (receiverp != NULL)
- {
- delete receiverp;
- }
- }
}
}
if (newException != nullptr)
@@ -447,14 +361,12 @@ namespace Messaging {
Sender ^ Session::GetSender(System::String ^ name)
{
System::Exception ^ newException = nullptr;
- ::qpid::messaging::Sender * senderp = NULL;
Sender ^ newSender = nullptr;
try
{
- senderp = new ::qpid::messaging::Sender;
-
- *senderp = sessionp->::qpid::messaging::Session::getSender(QpidMarshal::ToNative(name));
+ ::qpid::messaging::Sender senderp =
+ sessionp->::qpid::messaging::Session::getSender(QpidMarshal::ToNative(name));
newSender = gcnew Sender(senderp, this);
}
@@ -471,13 +383,6 @@ namespace Messaging {
{
delete newSender;
}
- else
- {
- if (senderp != NULL)
- {
- delete senderp;
- }
- }
}
}
if (newException != nullptr)
@@ -493,16 +398,14 @@ namespace Messaging {
Receiver ^ Session::GetReceiver(System::String ^ name)
{
System::Exception ^ newException = nullptr;
- ::qpid::messaging::Receiver * receiverp = NULL;
Receiver ^ newReceiver = nullptr;
try
{
- receiverp = new ::qpid::messaging::Receiver;
+ ::qpid::messaging::Receiver receiver =
+ sessionp->::qpid::messaging::Session::getReceiver(QpidMarshal::ToNative(name));
- *receiverp = sessionp->::qpid::messaging::Session::getReceiver(QpidMarshal::ToNative(name));
-
- newReceiver = gcnew Receiver(receiverp, this);
+ newReceiver = gcnew Receiver(receiver, this);
}
catch (const ::qpid::types::Exception & error)
{
@@ -517,13 +420,6 @@ namespace Messaging {
{
delete newReceiver;
}
- else
- {
- if (receiverp != NULL)
- {
- delete receiverp;
- }
- }
}
}
if (newException != nullptr)
Modified: qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Session.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Session.h?rev=987510&r1=987509&r2=987510&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Session.h (original)
+++ qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/Session.h Fri Aug 20 13:58:20 2010
@@ -65,7 +65,9 @@ namespace Messaging {
void Cleanup();
public:
- Session(::qpid::messaging::Session * sessionp,
+
+ // unmanaged clone
+ Session(const ::qpid::messaging::Session & sessionp,
Connection ^ connRef);
// copy constructor
@@ -83,9 +85,11 @@ namespace Messaging {
}
else
{
- delete sessionp;
+ if (NULL != sessionp)
+ delete sessionp;
sessionp = new ::qpid::messaging::Session(
*(const_cast<Session %>(rhs).NativeSession) );
+ parentConnectionp = rhs.parentConnectionp;
}
return *this;
}
@@ -129,7 +133,6 @@ namespace Messaging {
Receiver ^ CreateReceiver(System::String ^ address);
Receiver ^ CreateReceiver(Address ^ address);
- Receiver ^ CreateReceiver();
Sender ^ GetSender(System::String ^ name);
Receiver ^ GetReceiver(System::String ^ name);
Modified: qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/sessionreceiver/sessionreceiver.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/sessionreceiver/sessionreceiver.cs?rev=987510&r1=987509&r2=987510&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/sessionreceiver/sessionreceiver.cs (original)
+++ qpid/trunk/qpid/cpp/bindings/qpid/dotnet/src/sessionreceiver/sessionreceiver.cs Fri Aug 20 13:58:20 2010
@@ -67,13 +67,15 @@ namespace Org.Apache.Qpid.Messaging.Sess
/// </summary>
public void Open()
{
- Receiver rcvr = session.CreateReceiver();
+ Receiver rcvr;
Message msg;
keepRunning = true;
while (keepRunning)
{
- if (session.NextReceiver(rcvr, DurationConstants.SECOND))
+ rcvr = session.NextReceiver(DurationConstants.SECOND);
+
+ if (null != rcvr)
{
if (keepRunning)
{
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org