public static IVisualFactory GetVisualFactory(string topic, string rosMessageName = null, MessageSubtopic subtopic = MessageSubtopic.Default) { PrioritizedList <IVisualFactory> result; Dictionary <string, PrioritizedList <IVisualFactory> > topicsTable = (subtopic != MessageSubtopic.Response) ? s_TopicVisualFactories : s_TopicResponseVisualFactories; topicsTable.TryGetValue(topic, out result); if (result != null) { return(result.Best); } if (rosMessageName != null) { Dictionary <string, PrioritizedList <IVisualFactory> > typesTable = (subtopic != MessageSubtopic.Response) ? s_TypeVisualFactories : s_TypeResponseVisualFactories; typesTable.TryGetValue(rosMessageName, out result); if (result != null) { return(result.Best); } if (MessageRegistry.GetDeserializeFunction(rosMessageName) != null) { return((subtopic != MessageSubtopic.Response) ? s_DefaultVisualFactory : s_DefaultResponseVisualFactory); } } return(null); }
Message Deserialize(byte[] data) { if (m_Deserializer == null) { m_Deserializer = MessageRegistry.GetDeserializeFunction(m_RosMessageName, m_Subtopic); } m_ConnectionInternal.Deserializer.InitWithBuffer(data); return(m_Deserializer(m_ConnectionInternal.Deserializer)); }
public void RegisterAndGet_OneMessage_ReturnsMessageNameAndDeserialize() { const string rosMessageName = "testmessage"; Func <MessageDeserializer, TestMessage> deserializer = des => new TestMessage(); MessageRegistry.Register(rosMessageName, deserializer); Assert.AreEqual(rosMessageName, MessageRegistry.GetRosMessageName <TestMessage>()); Assert.AreEqual(deserializer, MessageRegistry.GetDeserializeFunction <TestMessage>()); Assert.AreEqual(deserializer, MessageRegistry.GetDeserializeFunction(rosMessageName)); }
public static IEnumerable <IVisualFactory> GetAllVisualFactories(string topic, string rosMessageName) { PrioritizedList <IVisualFactory> result; IEnumerable <IVisualFactory> topicVisualizers = null; if (topic != null) { s_TopicVisualFactories.TryGetValue(topic, out result); if (result != null) { topicVisualizers = result.All; } } IEnumerable <IVisualFactory> typeVisualizers = null; if (rosMessageName != null) { s_TypeVisualFactories.TryGetValue(rosMessageName, out result); if (result != null) { typeVisualizers = result.All; } else if (MessageRegistry.GetDeserializeFunction(rosMessageName) != null) { typeVisualizers = new IVisualFactory[] { s_DefaultVisualFactory } } ; } if (topicVisualizers == null) { return(typeVisualizers); } if (typeVisualizers != null) { return(topicVisualizers.Concat(typeVisualizers)); } else { return(topicVisualizers); } } }
public void RegisterAndGet_Subtopics_ReturnCorrectDeserializers() { const string rosMessageName = "testmessage"; Func <MessageDeserializer, TestMessage> deserializer = des => new TestMessage(); Func <MessageDeserializer, TestResponse> deserializer2 = des => new TestResponse(); MessageRegistry.Register(rosMessageName, deserializer, MessageSubtopic.Default); MessageRegistry.Register(rosMessageName, deserializer2, MessageSubtopic.Response); Assert.AreEqual(rosMessageName, MessageRegistry.GetRosMessageName <TestMessage>()); Assert.AreEqual(rosMessageName, MessageRegistry.GetRosMessageName <TestResponse>()); Assert.AreEqual(MessageSubtopic.Default, MessageRegistry.GetSubtopic <TestMessage>()); Assert.AreEqual(MessageSubtopic.Response, MessageRegistry.GetSubtopic <TestResponse>()); Assert.AreEqual(deserializer, MessageRegistry.GetDeserializeFunction <TestMessage>()); Assert.AreEqual(deserializer, MessageRegistry.GetDeserializeFunction(rosMessageName, MessageSubtopic.Default)); Assert.AreEqual(deserializer2, MessageRegistry.GetDeserializeFunction <TestResponse>()); Assert.AreEqual(deserializer2, MessageRegistry.GetDeserializeFunction(rosMessageName, MessageSubtopic.Response)); Assert.IsNull(MessageRegistry.GetDeserializeFunction(rosMessageName, MessageSubtopic.Goal)); }