dump.cpp
Go to the documentation of this file.
00001 /*
00002         Aseba - an event-based framework for distributed robot control
00003         Copyright (C) 2007--2012:
00004                 Stephane Magnenat <stephane at magnenat dot net>
00005                 (http://stephane.magnenat.net)
00006                 and other contributors, see authors.txt for details
00007         
00008         This program is free software: you can redistribute it and/or modify
00009         it under the terms of the GNU Lesser General Public License as published
00010         by the Free Software Foundation, version 3 of the License.
00011         
00012         This program is distributed in the hope that it will be useful,
00013         but WITHOUT ANY WARRANTY; without even the implied warranty of
00014         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015         GNU Lesser General Public License for more details.
00016         
00017         You should have received a copy of the GNU Lesser General Public License
00018         along with this program. If not, see <http://www.gnu.org/licenses/>.
00019 */
00020 
00021 #include "../common/consts.h"
00022 #include "../msg/msg.h"
00023 #include "../utils/utils.h"
00024 #include <dashel/dashel.h>
00025 #include "../transport/dashel_plugins/dashel-plugins.h"
00026 #include <time.h>
00027 #include <iostream>
00028 #include <cstring>
00029 
00030 namespace Aseba
00031 {
00032         using namespace Dashel;
00033         using namespace std;
00034         
00039         
00042         class Dump : public Hub
00043         {
00044         private:
00045                 bool rawTime; 
00046         
00047         public:
00048                 Dump(bool rawTime) :
00049                         rawTime(rawTime)
00050                 {
00051                 }
00052         
00053         protected:
00054                 
00055                 void connectionCreated(Stream *stream)
00056                 {
00057                         dumpTime(cout, rawTime);
00058                         cout << stream->getTargetName()  << " connection created." << endl;
00059                 }
00060                 
00061                 void incomingData(Stream *stream)
00062                 {
00063                         Message *message = Message::receive(stream);
00064                         
00065                         dumpTime(cout, rawTime);
00066                         cout << stream->getTargetName()  << " ";
00067                         if (message)
00068                                 message->dump(wcout);
00069                         else
00070                                 cout << "unknown message received";
00071                         cout << endl;
00072                 }
00073                 
00074                 void connectionClosed(Stream *stream, bool abnormal)
00075                 {
00076                         dumpTime(cout);
00077                         cout << stream->getTargetName() << " connection closed";
00078                         if (abnormal)
00079                                 cout << " : " << stream->getFailReason();
00080                         cout << "." << endl;
00081                 }
00082         };
00083         
00085 }
00086 
00087 
00089 void dumpHelp(std::ostream &stream, const char *programName)
00090 {
00091         stream << "Aseba dump, print the content of aseba messages, usage:\n";
00092         stream << programName << " [options] [targets]*\n";
00093         stream << "Options:\n";
00094         stream << "--rawtime       : shows time in the form of sec:usec since 1970\n";
00095         stream << "-h, --help      : shows this help\n";
00096         stream << "-V, --version   : shows the version number\n";
00097         stream << "Targets are any valid Dashel targets." << std::endl << std::endl;
00098         stream << "Report bugs to: aseba-dev@gna.org" << std::endl;
00099 }
00100 
00102 void dumpVersion(std::ostream &stream)
00103 {
00104         stream << "Aseba dump " << ASEBA_VERSION << std::endl;
00105         stream << "Aseba protocol " << ASEBA_PROTOCOL_VERSION << std::endl;
00106         stream << "Licence LGPLv3: GNU LGPL version 3 <http://www.gnu.org/licenses/lgpl.html>\n";
00107 }
00108 
00109 int main(int argc, char *argv[])
00110 {
00111         Dashel::initPlugins();
00112         bool rawTime = false;
00113         std::vector<std::string> targets;
00114         
00115         int argCounter = 1;
00116         
00117         while (argCounter < argc)
00118         {
00119                 const char *arg = argv[argCounter];
00120                 
00121                 if (strcmp(arg, "--rawtime") == 0)
00122                 {
00123                         rawTime = true;
00124                 }
00125                 else if ((strcmp(arg, "-h") == 0) || (strcmp(arg, "--help") == 0))
00126                 {
00127                         dumpHelp(std::cout, argv[0]);
00128                         return 0;
00129                 }
00130                 else if ((strcmp(arg, "-V") == 0) || (strcmp(arg, "--version") == 0))
00131                 {
00132                         dumpVersion(std::cout);
00133                         return 0;
00134                 }
00135                 else
00136                 {
00137                         targets.push_back(argv[argCounter]);
00138                 }
00139                 argCounter++;
00140         }
00141         
00142         if (targets.empty())
00143                 targets.push_back(ASEBA_DEFAULT_TARGET);
00144         
00145         try
00146         {
00147                 Aseba::Dump dump(rawTime);
00148                 for (size_t i = 0; i < targets.size(); i++)
00149                         dump.connect(targets[i]);
00150                 dump.run();
00151         }
00152         catch(Dashel::DashelException e)
00153         {
00154                 std::cerr << e.what() << std::endl;
00155         }
00156         
00157         return 0;
00158 }


aseba
Author(s): Stéphane Magnenat
autogenerated on Thu Jan 2 2014 11:17:16