public static int Visit(int result, UdbusMessagePair messageData, IUdbusMessageVisitor visitor)
        {
            UdbusMessagePair releaseMessageData;
            int visitResult = Visit(result, messageData, visitor, out releaseMessageData);

            //releaseMessageData.Dispose();
            return(visitResult);
        }
        public static void LoopUdbus(Udbus.Serialization.UdbusConnector connector, IUdbusMessageVisitor visitor, System.IO.TextWriter output, System.Threading.WaitHandle stop)
        {
            output.WriteLine("Looping...");
            int r = 0;

            while (r == 0 && stop.WaitOne(0) == false)
            {
                using (var msg = connector.ReceiveHandle(out r))
                {
                    Visit(r, msg, visitor);
                } // Ends using received message
            }     // Ends loop while getting results and not told to stop

            visitor.Reset();

            output.WriteLine("Finished looping...");
        }
        /// <summary>
        /// Call into a visitor, and pass back message data if visitor stops.
        /// </summary>
        /// <remarks>
        /// Note that it is up to calling code to dispose of the message handle,
        /// and that if the visitor Stop flag is set the message handle is moved into the out parameter
        /// evading disposal.
        /// </remarks>
        /// <param name="result">Receive result.</param>
        /// <param name="messageData">Received message data.</param>
        /// <param name="visitor">Visitor to handle message handle.</param>
        /// <param name="releaseMessageData">Message data if visitor sets Stop flag.</param>
        /// <returns>Receive result.</returns>
        public static int Visit(int result, UdbusMessagePair messageData, IUdbusMessageVisitor visitor, out UdbusMessagePair releaseMessageData)
        {
            releaseMessageData = default(UdbusMessagePair);

            if (result == 0) // If got message ok
            {
                switch ((Udbus.Types.dbus_msg_type)messageData.Data.typefield.type)
                {
                case Udbus.Types.dbus_msg_type.DBUS_TYPE_METHOD_CALL:
                    visitor.onMethod(messageData);
                    break;

                case Udbus.Types.dbus_msg_type.DBUS_TYPE_SIGNAL:
                    visitor.onSignal(messageData);
                    break;

                case Udbus.Types.dbus_msg_type.DBUS_TYPE_METHOD_RETURN:
                    visitor.onMethodReturn(messageData);
                    break;

                case Udbus.Types.dbus_msg_type.DBUS_TYPE_ERROR:
                    visitor.onError(messageData);
                    break;

                default:
                    visitor.onDefault(messageData);
                    break;
                } // Ends switch received message type

                if (visitor.Stop) // If stopping
                {
                    // No disposing thanks very much.
                    //UdbusMessagePair releaseMessageData = messageData.Release();
                    releaseMessageData = messageData.Release();
                    //msg.Release();
                } // Ends if stopping
            }     // Ends if got message ok
            else  // Else failed to get message
            {
                HandleMessageError(result, visitor);
            } // Ends else failed to get message

            return(result);
        }
        public static int Visit(int result, Udbus.Serialization.NMessageHandle.UdbusMessageHandle msg, IUdbusMessageVisitor visitor)
        {
            UdbusMessagePair releaseMessageData;
            int visitResult = Visit(result, msg, visitor, out releaseMessageData);

            //releaseMessageData.Dispose();
            return(visitResult);
        }
        internal static int Visit(int result, Udbus.Serialization.NMessageHandle.UdbusMessageHandle msg, IUdbusMessageVisitor visitor, out UdbusMessagePair releaseMessageData)
        {
            if (result == 0)
            {
                UdbusMessagePair messageData = new UdbusMessagePair(msg);
                result = Visit(result, messageData, visitor, out releaseMessageData);
            }
            else
            {
                HandleMessageError(result, visitor, out releaseMessageData);
            }

            return(result);
        }
 private static void HandleMessageError(int result, IUdbusMessageVisitor visitor, out UdbusMessagePair releaseMessageData)
 {
     releaseMessageData = default(UdbusMessagePair);
     HandleMessageError(result, visitor);
 }
 private static void HandleMessageError(int result, IUdbusMessageVisitor visitor)
 {
     visitor.onResultError(result);
 }