OrocosComponentLibrary  2.7.0
PrintService.cpp
00001 #include <rtt/Service.hpp>
00002 #include <rtt/Logger.hpp>
00003 #include <iostream>
00004 
00005 #include <rtt/types/GlobalsRepository.hpp>
00006 #include <rtt/types/Types.hpp>
00007 #include <rtt/types/TypeInfoName.hpp>
00008 #include <rtt/plugin/ServicePlugin.hpp>
00009 #include "OCL.hpp"
00010 
00011 namespace OCL
00012 {
00013 
00018     class PrintService: public RTT::Service
00019     {
00020     public:
00021         PrintService(TaskContext* parent) :
00022             RTT::Service("print", parent)
00023         {
00024             doc("A service that provides basic printing to std::cout, std::cerr and the RTT::Logger.");
00025             // add the operations
00026             addOperation("ln", &PrintService::println, this).doc(
00027                     "Prints a line to standard output.").arg("line",
00028                     "A string. Use a '+' to mix strings with numbers/variables.");
00029             addOperation("err", &PrintService::printerr, this).doc(
00030                     "Prints a line to standard error.").arg("line",
00031                     "A string. Use a '+' to mix strings with numbers/variables.");
00032             addOperation("log", &PrintService::printlog, this).doc(
00033                     "Prints a line to Orocos logger class.").arg("level","The LogLevel to use.").arg("line",
00034                     "A string. Use a '+' to mix strings with numbers/variables.");
00035 
00036             // add the log-levels as global variables.
00037             if (types::Types()->type("LogLevel") == 0) {
00038                 types::Types()->addType( new types::TypeInfoName<Logger::LogLevel>("LogLevel") );
00039                 types::GlobalsRepository::shared_ptr globals = types::GlobalsRepository::Instance();
00040 
00041 
00042                 // Data Flow enums:
00043                 globals->setValue( new Constant<Logger::LogLevel>("Never",Logger::Never) );
00044                 globals->setValue( new Constant<Logger::LogLevel>("Error",Logger::Error) );
00045                 globals->setValue( new Constant<Logger::LogLevel>("Fatal",Logger::Fatal) );
00046                 globals->setValue( new Constant<Logger::LogLevel>("Critical",Logger::Critical) );
00047                 globals->setValue( new Constant<Logger::LogLevel>("Warning",Logger::Warning) );
00048                 globals->setValue( new Constant<Logger::LogLevel>("Info",Logger::Info) );
00049                 globals->setValue( new Constant<Logger::LogLevel>("Debug",Logger::Debug) );
00050                 globals->setValue( new Constant<Logger::LogLevel>("RealTime",Logger::RealTime) );
00051             }
00052         }
00053 
00054         void println(const std::string& arg)
00055         {
00056             std::cout << arg << std::endl;
00057         }
00058         void printerr(const std::string& arg)
00059         {
00060             std::cerr << arg << std::endl;
00061         }
00062         void printlog(Logger::LogLevel level, const std::string& arg)
00063         {
00064             log(LoggerLevel(level)) << arg <<endlog();
00065         }
00066     };
00067 }
00068 
00069 ORO_SERVICE_NAMED_PLUGIN( OCL::PrintService, "print")
00070