// command_interpreter.cpp #include "command_interpreter.h" namespace cmd { void do_command(SocketDriver *driver, INT index) { sil_log::log("command from descriptor %d", index); STRING response, other, client_command; ClientSocket *client = driver->get_client_ptr(index); client_command = client->get_next_command(); if(client_command == "quit") { STRING quit_msg("$revBye!$res"); driver->write_to(index, quit_msg, false); driver->get_client_ptr(index)->set_prompt(false); driver->flush_output(index); driver->shutdown_connection(index); return; } else if (client_command == "uptime") { driver->write_to(index, driver->get_uptime()); return; } else if (client_command.substr(0, 4) == "idle") { INT i = 0; if(client_command.length() < 6) { for(i=0; iget_number_of_connections(); i++) driver->write_to(index, driver->get_client_idle_time(i)); return; } i = driver->find_client_by_name(client_command.substr(5)); if(i != -1) driver->write_to(index, driver->get_client_idle_time(i)); else driver->write_to(index, "No such client (case-sensitive)!"); return; } else if (client_command == "stats") { driver->write_to(index, driver->get_stats()); return; } else if (client_command == "who") { std::stringstream s; s << "Online: " << END; for(INT i = 0; iget_number_of_connections(); i++) s << "$byk" << driver->get_client_ptr(i)->get_name() << "$res (" << driver->get_client_ptr(i)->get_hostname() << ")" << END; driver->write_to(index, s.str()); return; } else if (client_command.substr(0, 4) == "when") { INT i = 0; if(client_command.length() < 6) { for(i=0; iget_number_of_connections(); i++) driver->write_to(index, driver->get_client_connected_time(i)); return; } i = driver->find_client_by_name(client_command.substr(5)); if(i != -1) driver->write_to(index, driver->get_client_connected_time(i)); else driver->write_to(index, "No such client (case sensitive)!"); return; } else if (client_command == "help") { std::stringstream s; s << "Valid commands are:" << END; s << " uptime, stats, who, idle, when, quit, and help." << END; driver->write_to(index, s.str()); return; } response = "You say, "; response += client_command; response += END; other = END; other += client->get_name(); other += ": "; other += client_command; other += END; driver->broadcast(other, index, response); } void update(SocketDriver *driver) { // this is called every second or so //sil_log::log("calling cmd::update"); } }