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
Next revision Both sides next revision
udi [2014/09/09 19:05]
endler [Architecture]
udi [2015/03/31 10:47]
rafael [Usage]
Line 23: Line 23:
  
   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 37:
 } }
 </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)