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); }