Skip to content
Bouchkouj edited this page Sep 10, 2013 · 6 revisions
#include <DUNE/DUNE.hpp>

namespace Workshop
{
  namespace TempCons
  {
    using DUNE_NAMESPACES;

    struct Task: public DUNE::Tasks::Task
    {
      // Parameters.
      std::string m_trg_prod;

      Task(const std::string& name, Tasks::Context& ctx):
        DUNE::Tasks::Task(name, ctx)
      {
       param("Target Producer", m_trg_prod)
        .description("Target producer to read from")
        .defaultValue("Producer5");

        bind<IMC::Temperature>(this);
      }

      void
      consume(const IMC::Temperature* msg)
      {
	//if (m_trg_prod == msg.get(SourceEntity))
	if (m_trg_prod == resolveEntity(msg->getSourceEntity()))
	{
          inf("Source (DUNE instance) ID is: %d", msg->getSource());
          inf("Source entity (Task instance) ID is: %d", msg->getSourceEntity());
	  inf("Temperature is %f, from %s", msg->value, resolveEntity(msg->getSourceEntity()).c_str());
        }
      }

      void
      onMain(void)
      {
        while (!stopping())
        {
          waitForMessages(1.0);
        }
      }
    };
  }
}

[Example2 main page] (https://github.com/LSTS/dune/wiki/Example2)
[Next section: Producer and Consumer Task interaction] (https://github.com/LSTS/dune/wiki/Producer-and-consumer-task-interaction-ex2)