X-Git-Url: https://git.llucax.com/z.facultad/75.42/plaqui.git/blobdiff_plain/989d0da7e93d155dde399bf3047ab6b4af550bb6..e4f66a8221e3f2156d89a7a358073863503b2564:/Server/src/server.cpp?ds=inline diff --git a/Server/src/server.cpp b/Server/src/server.cpp index 8704d69..8f76922 100644 --- a/Server/src/server.cpp +++ b/Server/src/server.cpp @@ -53,18 +53,19 @@ Server::~Server(void) { } } -Server::Server(int port): TCPServer(port) { +Server::Server(const string& plant_filename, const Connection::Port& port): + TCPServer(port) { #ifdef DEBUG cerr << __FILE__ << ": port = " << port << endl; #endif // DEBUG // FIXME Glib::Mutex::Lock lock(plants_mutex); - plants["prueba"] = new Plant("prueba.xml"); - plants["prueba"]->signal_finished().connect( + plants["default"] = new Plant(plant_filename); + plants["default"]->signal_finished().connect( SigC::bind( SigC::slot_class(*this, &Server::on_plant_finished), - "prueba")); - plants["prueba"]->run(); + "default")); + plants["default"]->run(); } Connection* Server::new_connection( @@ -142,6 +143,10 @@ void Server::on_control_command_received(const Command& command, } else if (command.get_target() == "plant") { if (command.get_command() == "list") { response = cmd_plant_list(); + } else if (command.get_command() == "get") { + response = cmd_plant_get(command); + } else if (command.get_command() == "set") { + response = cmd_plant_set(command); } else if (command.get_command() == "stop") { response = cmd_plant_stop(command); } else { @@ -152,7 +157,7 @@ void Server::on_control_command_received(const Command& command, response = new HTTPResponse(HTTPMessage::NOT_FOUND, "Invalid taget!"); } // FIXME - response->headers["Content-Type"] = "text/html; charset=iso-8859-1"; + response->headers["Content-Type"] = "text/xml; charset=iso-8859-1"; //response->headers["Connection"] = "close"; controlserver->send(*response); delete response; @@ -166,37 +171,14 @@ void Server::on_control_command_received(const Command& command, HTTPResponse* Server::cmd_server_status(void) const { // FIXME stringstream response_xml; - response_xml << "" << endl; - response_xml << " " << endl; - response_xml << " PlaQui v0.8" << endl; - response_xml << " " << endl; - response_xml << " " << endl; - response_xml << "

PlaQui

" << endl; - response_xml << "

versión 0.8

" << endl; -/* response_xml << "

Comando

" << endl; - response_xml << " " << endl;*/ - response_xml << "

Desarrollado por

" << endl; - response_xml << " " << endl; - response_xml << "
" << endl; - response_xml << " Copyleft 2003 - bajo los " << endl; - response_xml << " términos de la licencia GPL" << endl; - response_xml << "
" << endl; - response_xml << " " << endl; - response_xml << "" << endl; + response_xml << "" << endl; + response_xml << "\t0.9" << endl; + response_xml << "\t" << endl; + response_xml << "\t\tNicolás Dimov" << endl; + response_xml << "\t\tLeandro Lucarella" << endl; + response_xml << "\t\tRicardo Markiewicz" << endl; + response_xml << "\t" << endl; + response_xml << "" << endl; return new HTTPResponse(HTTPMessage::OK, response_xml.str()); } @@ -204,29 +186,15 @@ HTTPResponse* Server::cmd_connection_list(void) { // FIXME TCPServer::ConnectionInfoList cil = get_connected(); stringstream response_xml; - response_xml << "" << endl; - response_xml << " " << endl; - response_xml << " PlaQui v0.8" << endl; - response_xml << " " << endl; - response_xml << " " << endl; - response_xml << "

PlaQui

" << endl; - response_xml << "

versión 0.8

" << endl; - response_xml << "

Lista de conexiones:

" << endl; - response_xml << " " << endl; - response_xml << "
" << endl; - response_xml << " Copyleft 2003 - bajo los " << endl; - response_xml << " términos de la licencia GPL" << endl; - response_xml << "
" << endl; - response_xml << " " << endl; - response_xml << "" << endl; + response_xml << "" << endl; return new HTTPResponse(HTTPMessage::OK, response_xml.str()); } @@ -250,32 +218,18 @@ HTTPResponse* Server::cmd_connection_stop(const Command& command) { HTTPResponse* Server::cmd_transmission_list(void) { // FIXME stringstream response_xml; - response_xml << "" << endl; - response_xml << " " << endl; - response_xml << " PlaQui v0.8" << endl; - response_xml << " " << endl; - response_xml << " " << endl; - response_xml << "

PlaQui

" << endl; - response_xml << "

versión 0.8

" << endl; - response_xml << "

Lista de transmisiones:

" << endl; - response_xml << " " << endl; - response_xml << "
" << endl; - response_xml << " Copyleft 2003 - bajo los " << endl; - response_xml << " términos de la licencia GPL" << endl; - response_xml << "
" << endl; - response_xml << " " << endl; - response_xml << "" << endl; + response_xml << "" << endl; return new HTTPResponse(HTTPMessage::OK, response_xml.str()); } @@ -285,8 +239,8 @@ HTTPResponse* Server::cmd_transmission_start(const Command& command) { return new HTTPResponse(HTTPMessage::CONFLICT, "Faltan argumentos."); } else { - const string& plant = args[0]; - const string& host = args[1]; + string plant = args[0]; + string host = args[1]; Connection::Port port = String(args[2]).to(port); Glib::Mutex::Lock lock(plants_mutex); PlantList::iterator p = plants.find(plant); @@ -298,7 +252,7 @@ HTTPResponse* Server::cmd_transmission_start(const Command& command) { } else if (plants[plant]->transmission_start(host, port)) { return new HTTPResponse(HTTPMessage::OK, string("Se empieza a transmitir la planta '") + plant - + "' a " + host + ":" + args[1] + "."); + + "' a " + host + ":" + String().from(port) + "."); } else { return new HTTPResponse(HTTPMessage::INTERNAL_SERVER_ERROR, string("Error al crear la transmisión a de la planta '") @@ -334,33 +288,63 @@ HTTPResponse* Server::cmd_transmission_stop(const Command& command) { HTTPResponse* Server::cmd_plant_list(void) { // FIXME stringstream response_xml; - response_xml << "" << endl; - response_xml << " " << endl; - response_xml << " PlaQui v0.8" << endl; - response_xml << " " << endl; - response_xml << " " << endl; - response_xml << "

PlaQui

" << endl; - response_xml << "

versión 0.8

" << endl; - response_xml << "

Lista de plantas:

" << endl; - response_xml << " " << endl; - response_xml << "
" << endl; - response_xml << " Copyleft 2003 - bajo los " << endl; - response_xml << " términos de la licencia GPL" << endl; - response_xml << "
" << endl; - response_xml << " " << endl; - response_xml << "" << endl; + response_xml << "" << endl; return new HTTPResponse(HTTPMessage::OK, response_xml.str()); } +HTTPResponse* Server::cmd_plant_get(const Command& command) { + if (!command.get_args().size()) { + return new HTTPResponse(HTTPMessage::CONFLICT, + "Faltan argumentos."); + } + Glib::Mutex::Lock lock(plants_mutex); + string plant = command.get_args()[0]; + if (plants.find(plant) == plants.end()) { + return new HTTPResponse(HTTPMessage::NOT_FOUND, + string("No existe la planta ") + plant); + } + string xml = plants[plant]->get_xml(); + if (xml.length()) { + return new HTTPResponse(HTTPMessage::OK, xml); + } else { + return new HTTPResponse(HTTPMessage::INTERNAL_SERVER_ERROR, + ("No se pudo obtener el XML de la planta ") + plant); + } +} + +HTTPResponse* Server::cmd_plant_set(const Command& command) { + const Command::Arguments& args = command.get_args(); + if (args.size() < 4) { + return new HTTPResponse(HTTPMessage::CONFLICT, + "Faltan argumentos."); + } + string plant = args[0]; + string element = args[1]; + string key = args[2]; + string value = args[3]; + Glib::Mutex::Lock lock(plants_mutex); + PlantList::iterator p = plants.find(plant); + if (p == plants.end()) { + return new HTTPResponse(HTTPMessage::NOT_FOUND, + string("No existe la planta '") + plant + "'."); + } +/* if (!plants[plant]->set_element(host, port)) { + return new HTTPResponse(HTTPMessage::INTERNAL_SERVER_ERROR, + string("Error al crear la transmisión a de la planta '") + + plant + "' a " + host + ":" + args[2] + "."); + }*/ + return new HTTPResponse(HTTPMessage::OK); +} + HTTPResponse* Server::cmd_plant_stop(const Command& command) { if (!command.get_args().size()) { return new HTTPResponse(HTTPMessage::CONFLICT,