public static IRecordedMessage <TType> SetMessageType <TType>(this IRecordedMessage message) where TType : class
        {
            if (message is INamespaceScopedTopicMessage <IRecordedMessage> namespaceScopedMessage)
            {
                var innerMessage = namespaceScopedMessage.InnerMessage;
                var typedMessage = new RecordedMessage <TType>(innerMessage);

                return(NamespaceScopedRecordedMessage.Create(typedMessage, namespaceScopedMessage.NamespacePattern));
            }
            else
            {
                return(new RecordedMessage <TType>(message));
            }
        }
        public static IRecordedMessage <TType> Create <TType>(IRecordedMessage <TType> recordedMessage, NamespacePattern namespacePattern)
        {
            if (recordedMessage == null)
            {
                return(null);
            }

            if (recordedMessage is INamespaceScopedTopicMessage <IRecordedMessage <TType> > namespaceScopedMessage)
            {
                namespacePattern = namespaceScopedMessage.NamespacePattern.Concat(namespacePattern);
                recordedMessage  = namespaceScopedMessage.InnerMessage;
            }

            return(new NamespaceScopedRecordedMessageWrapper <TType>(recordedMessage, namespacePattern));
        }
        public static bool IsInTopic(this IRecordedMessage message, string topicNamePattern)
        {
            if (message == null)
            {
                throw new ArgumentNullException(nameof(message));
            }

            if (RosNameRegex.IsGlobalPattern(topicNamePattern))
            {
                return(IsInGlobalTopic(message, topicNamePattern));
            }
            else
            {
                return(IsInRelativeTopic(message, topicNamePattern));
            }
        }
        private static bool IsInRelativeTopic(this IRecordedMessage message, string relativeTopicNamePattern,
                                              RosNameRegexCache regexCache = null)
        {
            var scopedMessage = message as INamespaceScopedTopicMessage <IRecordedMessage>;

            if (scopedMessage == null)
            {
                throw new InvalidRosNamePatternException(
                          "Relative topic name patterns are only supported if messages were filtered by namespace before.");
            }

            var globalName = scopedMessage.NamespacePattern + "/" + relativeTopicNamePattern;
            var regex      = regexCache != null
                ? regexCache.GetOrCreate(globalName)
                : RosNameRegex.Create(globalName);

            return(regex.IsMatch(message.Topic));
        }
 public RosActionCall(IRecordedMessage <ActionGoal> goal, ActionMessagesCollection actionMessages)
 {
     _goal           = goal ?? throw new ArgumentNullException(nameof(goal));
     _actionMessages = actionMessages ?? throw new ArgumentNullException(nameof(actionMessages));
 }
Пример #6
0
 public RecordedMessage(IRecordedMessage message)
 {
     _innerMessage = message ?? throw new ArgumentNullException(nameof(message));
 }
        private static bool IsInGlobalTopic(this IRecordedMessage message, string globalTopicNamePattern)
        {
            var regex = RosNameRegex.Create(globalTopicNamePattern);

            return(regex.IsMatch(message.Topic));
        }
 public static IRecordedMessage <TType> Create <TType>(IRecordedMessage <TType> recordedMessage,
                                                       string namespaceScope)
 {
     return(Create(recordedMessage, new NamespacePattern(namespaceScope)));
 }