udi

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
udi [2014/09/09 19:05]
endler [Architecture]
udi [2016/02/11 17:21]
rafael [UDI]
Line 7: Line 7:
  
 ====== UDI ====== ====== UDI ======
-A Universal DDS Interface (UDI) é uma API similar a do DDS, mas que abstrai os detalhes específicos de diferentes produtos DDS, e inclui wrappers de tópicos DDS para cada produto DDS. Permite também a definição de politicas e perfis de QoS que são mapeados para as primitivas específicas de cada produto DDS. O uso da UDI facilita muito a troca entre produtos DDS. Atualmente, a UDI está disponível para os produtos: RTI Connext, DDS Open Splice Community Edition, e CoreDX DDS +A Universal DDS Interface (UDI) é uma API similar a do DDS, mas que abstrai os detalhes específicos de diferentes produtos DDS, e inclui wrappers de tópicos DDS para cada produto DDS. Permite também a definição de politicas e perfis de QoS que são mapeados para as primitivas específicas de cada produto DDS. O uso da UDI facilita muito a troca entre produtos DDS. Atualmente, a UDI está disponível para os produtos: RTI Connext, DDS Open Splice Community Edition, e CoreDX DDS.
 ===== Usage  ===== ===== Usage  =====
 O UDI implementa os mesmos elementos básicos usados no DDS: Domain Participants, Publishers, Subscribers, Tópicos, DataReaders e DataWriters. O exemplo abaixo mostra como  se faz isso para um tópico.//Message//. O UDI implementa os mesmos elementos básicos usados no DDS: Domain Participants, Publishers, Subscribers, Tópicos, DataReaders e DataWriters. O exemplo abaixo mostra como  se faz isso para um tópico.//Message//.
Line 23: Line 22:
  
   this.dds.createDataReader(groupDefinerDDSListener, messageTopic);   this.dds.createDataReader(groupDefinerDDSListener, messageTopic);
 +  this.dds.createDataWriter(messageTopic);
 </code> </code>
 E o listener do exemplo acima recebe objetos do tipo //Message// e precisa implementar o callback //onNewData//, como segue: E o listener do exemplo acima recebe objetos do tipo //Message// e precisa implementar o callback //onNewData//, como segue:
Line 36: Line 36:
 } }
 </code> </code>
 +
 +Para utilizar os Extensible and Dynamic Topic Types for DDS (DDS-XTypes), é bem simples. Precisa ser criado o tópico, isto é, o seu nome e atributos, o qual é armazenado no Metadata Sharing Service. Feita a criação do tópico, os publicados e assinantes podem usar o tópico dinâmico.
 +
 +Um tópico dinâmico é representação por uma estrutura do tipo chave-valor, onde a chave é o nome do atributo e o valor é o valor que o atributo terá.
 +
 +O código abaixo inicializa a UDI usando RTI no domínio "_domainId".
 +
 +<code java>
 +      this.dds = UniversalDDSLayerFactory.getInstance(SupportedDDSVendors.RTI);
 +      this.dds.createParticipant(this._domainId);
 +</code>
 +
 +Para verificar se o tópico dinâmico "SDDLLocation" já foi criado, recuperar sua representação, assinar o tópico e por fim enviar um dado do tipo SDDLLocation, utiliza-se o seguinte código.
 +
 +<code java>
 +    private void startApplication()
 +    {
 +        _metadata = this.dds.getMetadataByName("SDDLLocation");
 +        
 +        if(_metadata == null)
 +        {
 +            System.out.println("Could not retrieve the specified metadata");
 +            return;
 +        }
 +        
 +        System.out.println("Retrieved metadata: " + _metadata.toString());
 +                
 +        // Creates a (or uses an existing) dynamic topic with this Metadata
 +        DynamicDDSTopic dynamicDDSTopic = dds.createDynamicDDSTopic(_metadata);
 +        dynamicDDSTopic.subscribe(this);
 +    }
 +     
 +    @Override
 +    public void onNewDynamicData(String topicName, HashMap<String, Object> hashMapRepresentation)
 +    {
 +        System.out.println("TopicName : " + topicName + "\nValues: " + hashMapRepresentation.toString());
 +    }
 +    
 +    private void writeData()
 +    }
 +        HashMap<String, Object> newInstance = _metadata.getHashMapInstanceRepresentation();
 +
 +        newInstance.put("uuid", "1234"); //"String", 
 +
 +        dynamicDDSTopic.publish(newInstance);
 +    }
 +</code>
 +
 +
 +Para criar um novo tópico dinâmico, pode-se utilizar o seguinte código:
 +
 +<code java>
 +   
 +    private void createEntities()
 +    {
 +        Metadata newMetadata = createSDDLLocationMetadata();
 +        
 +        System.out.println("Created metadata: " + "\n" + newMetadata.toString());
 +                
 +        // Adds the entity on the service
 +        //_metadataSharingService.addMetadata(newMetadata);
 +        dds.addMetadata(newMetadata);
 +    }
 +
 +    private static Metadata createSDDLLocationMetadata()
 +    {
 +        String  name    = "SDDLLocation";
 +        String  kind    = "EventType";
 +        String  info    = "Sent by mobile nodes with location data.";
 +        boolean enabled = true;
 +        
 +        Metadata newMetadata = new Metadata(name, kind, info, enabled);
 +        
 +        ArrayList<MetadataMember> members = new ArrayList<MetadataMember>();
 +        
 +        MetadataMember stringUUIDMember     = new MetadataMember("uuid", "String", 1024, true, "The UUID of the monitored node that sent the SDDLLocation.");
 +        members.add(stringUUIDMember);
 +        
 +        //...
 +        
 +        // Adds all the members to the new entity
 +        newMetadata.addMembers(members);
 +        
 +        return newMetadata;
 +    }
 +</code>
 +
 +Para criar o listener do tópico dinâmico, a classe deve implementar a interface "DynamicDataListener", que contém o método "onNewDynamicData".
  
 Mais detalhes podem ser obtidos do UDI Developer Guide ({{:udi_developer_guide.pdf|}}) Mais detalhes podem ser obtidos do UDI Developer Guide ({{:udi_developer_guide.pdf|}})
  • udi.txt
  • Last modified: 2017/07/21 03:08
  • (external edit)