Split command_handler out of binder

This commit is contained in:
Zachary Michaels 2014-06-17 11:54:22 -04:00
parent e43ff8fa29
commit afaf97d7b7

View File

@ -350,17 +350,12 @@ namespace epee
return true; return true;
}*/ }*/
/************************************************************************/ // TODO - Should this live somewhere else?
/* */ class command_handler {
/************************************************************************/
class console_handlers_binder
{
typedef boost::function<bool (const std::vector<std::string> &)> console_command_handler;
typedef std::map<std::string, std::pair<console_command_handler, std::string> > command_handlers_map;
std::unique_ptr<boost::thread> m_console_thread;
command_handlers_map m_command_handlers;
async_console_handler m_console_handler;
public: public:
typedef boost::function<bool (const std::vector<std::string> &)> callback;
typedef std::map<std::string, std::pair<callback, std::string> > lookup;
std::string get_usage() std::string get_usage()
{ {
std::stringstream ss; std::stringstream ss;
@ -376,12 +371,14 @@ namespace epee
} }
return ss.str(); return ss.str();
} }
void set_handler(const std::string& cmd, const console_command_handler& hndlr, const std::string& usage = "")
void set_handler(const std::string& cmd, const callback& hndlr, const std::string& usage = "")
{ {
command_handlers_map::mapped_type & vt = m_command_handlers[cmd]; lookup::mapped_type & vt = m_command_handlers[cmd];
vt.first = hndlr; vt.first = hndlr;
vt.second = usage; vt.second = usage;
} }
bool process_command_vec(const std::vector<std::string>& cmd) bool process_command_vec(const std::vector<std::string>& cmd)
{ {
if(!cmd.size()) if(!cmd.size())
@ -399,13 +396,38 @@ namespace epee
boost::split(cmd_v,cmd,boost::is_any_of(" "), boost::token_compress_on); boost::split(cmd_v,cmd,boost::is_any_of(" "), boost::token_compress_on);
return process_command_vec(cmd_v); return process_command_vec(cmd_v);
} }
private:
lookup m_command_handlers;
};
/*template<class t_srv> /************************************************************************/
bool start_handling(t_srv& srv, const std::string& usage_string = "") /* */
/************************************************************************/
class console_handlers_binder
{
typedef command_handler::callback console_command_handler;
typedef command_handler::lookup command_handlers_map;
command_handler m_command_handler;
std::unique_ptr<boost::thread> m_console_thread;
async_console_handler m_console_handler;
public:
std::string get_usage()
{ {
start_default_console_handler_no_srv_param(&srv, boost::bind(&console_handlers_binder::process_command_str, this, _1)); return m_command_handler.get_usage();
return true; }
}*/ void set_handler(const std::string& cmd, const console_command_handler& hndlr, const std::string& usage = "")
{
m_command_handler.set_handler(cmd, hndlr, usage);
}
bool process_command_vec(const std::vector<std::string>& cmd)
{
return m_command_handler.process_command_vec(cmd);
}
bool process_command_str(const std::string& cmd)
{
return m_command_handler.process_command_str(cmd);
}
bool start_handling(const std::string& prompt, const std::string& usage_string = "") bool start_handling(const std::string& prompt, const std::string& usage_string = "")
{ {
@ -423,12 +445,6 @@ namespace epee
{ {
return m_console_handler.run(boost::bind(&console_handlers_binder::process_command_str, this, _1), prompt, usage_string); return m_console_handler.run(boost::bind(&console_handlers_binder::process_command_str, this, _1), prompt, usage_string);
} }
/*template<class t_srv>
bool run_handling(t_srv& srv, const std::string& usage_string)
{
return run_default_console_handler_no_srv_param(&srv, boost::bind<bool>(&console_handlers_binder::process_command_str, this, _1), usage_string);
}*/
}; };
/* work around because of broken boost bind */ /* work around because of broken boost bind */