iLab Neuromorphic Robotics Toolkit  0.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
RemoteCommand.H
Go to the documentation of this file.
1 /*! @file
2  @author Laurent Itti
3  @copyright GNU Public License (GPL v3)
4  @section License
5  @verbatim
6  // ////////////////////////////////////////////////////////////////////////
7  // The iLab Neuromorphic Robotics Toolkit (NRT) //
8  // Copyright 2010-2012 by the University of Southern California (USC) //
9  // and the iLab at USC. //
10  // //
11  // iLab - University of Southern California //
12  // Hedco Neurociences Building, Room HNB-10 //
13  // Los Angeles, Ca 90089-2520 - USA //
14  // //
15  // See http://ilab.usc.edu for information about this project. //
16  // ////////////////////////////////////////////////////////////////////////
17  // This file is part of The iLab Neuromorphic Robotics Toolkit. //
18  // //
19  // The iLab Neuromorphic Robotics Toolkit is free software: you can //
20  // redistribute it and/or modify it under the terms of the GNU General //
21  // Public License as published by the Free Software Foundation, either //
22  // version 3 of the License, or (at your option) any later version. //
23  // //
24  // The iLab Neuromorphic Robotics Toolkit is distributed in the hope //
25  // that it will be useful, but WITHOUT ANY WARRANTY; without even the //
26  // implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
27  // PURPOSE. See the GNU General Public License for more details. //
28  // //
29  // You should have received a copy of the GNU General Public License //
30  // along with The iLab Neuromorphic Robotics Toolkit. If not, see //
31  // <http://www.gnu.org/licenses/>. //
32  // ////////////////////////////////////////////////////////////////////////
33  @endverbatim */
34 
35 
36 
37 #ifndef INCLUDE_NRT_CORE_BLACKBOARD_NETWORK_REMOTECOMMAND_H
38 #define INCLUDE_NRT_CORE_BLACKBOARD_NETWORK_REMOTECOMMAND_H
39 
40 #include <nrt/Core/Typing/Enum.H>
41 #include <string>
42 #include <map>
43 #include <nrt/External/cereal/types/string.hpp>
44 #include <nrt/External/cereal/types/map.hpp>
45 
46 namespace nrt
47 {
48  namespace blackboard
49  {
50  //! Blackboard remote command / return types
51  /*! \ingroup blackboard */
52  NRT_DEFINE_ENUM_CLASS(Command,
53  (NoOp)
54  (SetRunState) (GetRunState)
55  (LoadModule) (UnloadModule)
56  (ParamChangedListener) (GUIdataListener)
57  (BlackboardUpdate)
58  (GetBlackboardUsage)
59  (SetPosterTopic) (SetCheckerTopicFilter) (SetSubscriberTopicFilter)
60  (SetModuleNamespace) (GetModuleNamespace)
61  (SplitMessagePoster) (SplitMessageSubscriber)
62  (CreateModuleParamPort) (DeleteModuleParamPort)
63  (SetGUIdata) (GetGUIdata) (NotifyGUIdata)
64  (CreateConnector) (SetConnectorTopic) (SetConnectorTopicFilter)
65  (DeleteConnector) (GetConnector)
66  (CreateNamespace) (RenameNamespace) (DeleteNamespace) (LoadMacroModule) (SaveMacroModule)
67  (GetAllModuleParams)
68  (GetModuleLibrary)
69  (GetHelpMessage)
70  (MarkNamespaceModified)
71  (LoadManifest) (SaveManifest)
72  );
73 
74  //! Blackboard remote command description
75  /*! This class is used to specify remote commands via a generic text-based interface.
76  The class holds both command args and possible return args, if any.
77 
78  \ingroup blackboard */
80  {
81  //! Constructor with just a command and no args yet
82  RemoteCommand(Command c = Command::NoOp);
83 
84  //! The command
85  /*! Can't be const because of serialization, but you should treat it as const! */
86  Command command;
87 
88  //! Clear all the args
89  void clear();
90 
91  //! Helper function to set an arg value from a type T
92  template <typename T>
93  void set(std::string const & key, T const & value);
94 
95  //! Helper function to set an arg value from a type T, using serialization
96  /*! Use this version for types that are serializable an for which boost::lexical_cast fails */
97  template <typename T>
98  void serset(std::string const & key, T const & value);
99 
100  //! Helper function to get an arg value and throw if not found
101  template <typename T = std::string>
102  T get(std::string const & key) const;
103 
104  //! Helper function to get an arg value using serialization and throw if not found
105  /*! Use this version for types that are serializable an for which boost::lexical_cast fails */
106  template <typename T>
107  T serget(std::string const & key) const;
108 
109  //! Serialization
110  template <class Archive> inline void serialize(Archive & ar)
111  { ar(command, args); }
112 
113  private:
114  //! Arguments, if any
115  std::map<std::string, std::string> args;
116  };
117  }
118 }
119 
120 // include implementation details
122 
123 #endif // INCLUDE_NRT_CORE_BLACKBOARD_NETWORK_REMOTECOMMAND_H
124