.. py:currentmodule:: rti.connextdds

Hello World
~~~~~~~~~~~

This section shows the basic code to publish and subscribe to a topic defined
by a simple data type. Similar code can be generated by *rtiddsgen* from an IDL
or XML file defining your data types. The sections that follow expand on the
concepts shown in this example.

Define your types:

.. code-block:: python

    # hello.py

    import rti.types as idl

    @idl.struct
    class HelloWorld:
        message: str = ""

Create a *DataWriter* to publish the HelloWorld Topic:

.. code-block:: python

    # hello_publisher.py

    import time
    import rti.connextdds as dds
    from hello import HelloWorld

    participant = dds.DomainParticipant(domain_id=0)
    topic = dds.Topic(participant, 'HelloWorld Topic', HelloWorld)
    writer = dds.DataWriter(participant.implicit_publisher, topic)

    for i in range(10):
        writer.write(HelloWorld(message=f'Hello World! #{i}'))
        time.sleep(1)

Create a *DataReader* to subscribe to the HelloWorld Topic:

.. code-block:: python

    # hello_subscriber.py

    import rti.connextdds as dds
    import rti.asyncio
    from hello import HelloWorld

    participant = dds.DomainParticipant(domain_id=0)
    topic = dds.Topic(participant, 'HelloWorld Topic', HelloWorld)
    reader = dds.DataReader(participant.implicit_subscriber, topic)

    async def print_data():
        async for data in reader.take_data_async():
            print(f"Received: {data}")

   rti.asyncio.run(print_data())

Continue to the next sections to learn about a
:ref:`participant:DomainParticipant`, :ref:`topic:Topics`,
:ref:`writer:Publications`, :ref:`reader:Subscriptions`,
and :ref:`types:Data Types`.