Пример #1
0
        /// <summary>
        /// Get a submessage.
        /// </summary>
        public MamaMsg getMsg(
			string name, 
			ushort fid)
        {
            if (msg_ == null)
            {
                msg_ = new MamaMsg ();
                msg_.SelfManageLifeTime(false);
            }
            tryMsgImpl(name, fid, ref msg_, true);
            return msg_;
        }
Пример #2
0
        /// <summary>
        /// Get a submessage.
        /// </summary>
        /// <param name="name"></param>
        /// <param name="fid"></param>
        /// <param name="valueIfMissing"></param>
        /// <returns></returns>
        public MamaMsg getMsg(
			string name, 
			ushort fid,
			MamaMsg valueIfMissing)
        {
            if (msg_ == null)
            {
                msg_ = new MamaMsg ();
                msg_.SelfManageLifeTime(false);
            }
            if (tryMsgImpl(name, fid, ref msg_, false))
                return msg_;
            else
                return valueIfMissing;
        }
Пример #3
0
		/// <summary>
		/// Send a p2p message from the specified inbox using the throttle.
		/// The lifecycle of the message sent is controlled by the user of the API. The
		/// callback indicates when the API is no longer using the message and can be
		/// destroyed/reused by the application.
		/// </summary>
		/// <param name="inbox">The MamaInbox which will process any response to the sent message.</param>
		/// <param name="message">The MamaMsg to send.</param>
		/// <param name="callback">The callback which will be invoked when the message
		/// is sent from the throttle queue.</param>
		/// <param name="closure">User supplied data returned when the callback is invoked.</param>
		public void sendFromInboxWithThrottle(
			MamaInbox inbox,
			MamaMsg message,
			MamaSendCompleteCallback callback,
			object closure)
		{
#if MAMA_WRAPPERS_CHECK_ARGUMENTS
			if (inbox == null)
			{
				throw new ArgumentNullException("inbox");
			}
			if (message == null)
			{
				throw new ArgumentNullException("message");
			}
			if (callback == null)
			{
				throw new ArgumentNullException("callback");
			}
			EnsurePeerCreated();
#endif // MAMA_WRAPPERS_CHECK_ARGUMENTS

            // Create a new callback wrapper
            MamaCallbackWrapper<MamaSendCompleteCallback, MamaThrottledSendCompleteDelegate> wrapper =
                new MamaCallbackWrapper<MamaSendCompleteCallback, MamaThrottledSendCompleteDelegate>(
                    callback,
                    closure,
                    new MamaThrottledSendCompleteDelegate(onSendComplete));

            // Add this to the store
            IntPtr nativeClosure = mCallbackStore.StoreWrapper(wrapper);

			// Call the native function
			int code = NativeMethods.mamaPublisher_sendFromInboxWithThrottle(
				nativeHandle,
                inbox.NativeHandle,
				message.NativeHandle, 
                (Wombat.MamaPublisher.MamaThrottledSendCompleteDelegate)wrapper.NativeDelegate,
                nativeClosure);
			try
			{
				CheckResultCode(code);
			}

            // If something goes wrong then remove the wrapper from the store
			catch
			{
                // Remove the wrapper
                mCallbackStore.RemoveWrapper(nativeClosure);

                // Dispose it
                ((IDisposable)wrapper).Dispose();
                
                // Rethrow the exception
				throw;
			}
		
            // Ensure that the message passed will not delete its native peer
            message.SelfManageLifeTime(false);
		}