/* * This file is part of the Owl Positioning System (OwlPS). * OwlPS is a project of the University of Franche-Comté * (Université de Franche-Comté), France. */ #include "output.hh" #include "configuration.hh" #include "posexcept.hh" #include "outputterminal.hh" #include "outputcsv.hh" #include "outputudpsocket.hh" #include "outputtcpsocketevaal.hh" #include using namespace std ; /* *** Constructors *** */ Output::Output() { initialise_output_media() ; } Output::~Output() { for (vector::const_iterator i = output_media.begin() ; i != output_media.end() ; ++i) delete *i ; output_media.clear() ; } /* *** Operations *** */ void Output::initialise_output_media() { if (! Configuration::is_configured("output.medium")) { initialise_output_terminal() ; return ; } const vector &media_names = Configuration::string_vector_value("output.medium") ; for (vector::const_iterator i = media_names.begin() ; i != media_names.end() ; ++i) { if (*i == "Terminal") initialise_output_terminal() ; else if (*i == "CSV") initialise_output_csv() ; else if (*i == "UDP") initialise_output_udp_socket() ; else if (*i == "TCPEvAAL") initialise_output_tcpevaal_socket() ; else throw bad_configuration( "The specified output medium \""+ *i +"\" is unknown!") ; } } void Output::initialise_output_terminal() { output_media.push_back(new OutputTerminal) ; } void Output::initialise_output_csv() { if (! Configuration::is_configured("output.csv-file")) throw missing_configuration( "No output CSV file specified in the configuration!") ; output_media.push_back( new OutputCSV( Configuration::string_value("output.csv-file"))) ; } void Output::initialise_output_udp_socket() { if (! Configuration::is_configured("output.udp-host")) throw missing_configuration( "No remote UDP host specified in the configuration!") ; output_media.push_back( new OutputUDPSocket(Configuration::string_value("output.udp-host"), Configuration::int_value("output.udp-port"))) ; } void Output::initialise_output_tcpevaal_socket() { output_media.push_back( new OutputTCPSocketEvAAL( Configuration::string_value("output.tcpevaal-host"), Configuration::int_value("output.tcpevaal-port"))) ; } void Output::write(const ResultList &results) const { for (vector::const_iterator i = output_media.begin() ; i != output_media.end() ; ++i) (*i)->write(results) ; }