X-Git-Url: https://git.llucax.com/z.facultad/75.42/plaqui.git/blobdiff_plain/65bf2eef7ac487329a3af3cd1c06e7957afc3a6c..29e4030c485d49ae79d491e7d0297899b9df6f73:/Server/src/server.cpp diff --git a/Server/src/server.cpp b/Server/src/server.cpp index bbf41c0..37f5c1c 100644 --- a/Server/src/server.cpp +++ b/Server/src/server.cpp @@ -25,25 +25,186 @@ // $Id$ // -#include "server.h" +#include "plaqui/server/server.h" +#include "plaqui/server/connection.h" +#include "plaqui/server/controlserver.h" +#include +// FIXME - sacar sstream (a menos que se necesite) +#include +#ifdef DEBUG +# include "plaqui/server/string.h" +# include +#endif // DEBUG -using namespace Plaqui; +using namespace std; + +namespace PlaQui { + +namespace Server { + +Server::~Server(void) { +#ifdef DEBUG + cerr << __FILE__ << ": destructor." << endl; +#endif // DEBUG +} Server::Server(int port): - socket(sockbuf::sock_stream) { -#warning Not implemented! - // TODO + TCPServer(port) { +#ifdef DEBUG + cerr << __FILE__ << ": port = " << port << endl; +#endif // DEBUG } -bool Server::start_transmission(std::string host, int port) { -#warning Not implemented! +/// \todo Implementar. +bool Server::start_transmission(string host, int port) { +#ifdef DEBUG + cerr << __FILE__ << ": start_transmission(host = " << host + << " | port = " << port << ")" << endl; +#endif // DEBUG // TODO return false; } + +Connection* Server::new_connection( + const sockbuf::sockdesc& sd) { +#ifdef DEBUG + cerr << __FILE__ << ": new_connection(sd = " << sd.sock << ")" + << endl; +#endif // DEBUG + ControlServer* connection = new ControlServer(sd); + // TODO verificar si el new se hace bien? no creo. + connection->signal_command_received().connect( + SigC::bind( + SigC::slot_class(*this, &Server::on_control_command_received), + connection)); + // TODO: + return connection; +} -bool Server::stop_transmission(std::string host, int port) { -#warning Not implemented! +/// \todo Implementar. +bool Server::stop_transmission(string host, int port) { +#ifdef DEBUG + cerr << __FILE__ << ": stop_transmission(host = " << host + << " | port = " << port << ")" << endl; +#endif // DEBUG // TODO return false; } +/// \todo Implementar. +void Server::on_control_command_received(const Command& command, + ControlServer* server) { +#ifdef DEBUG + cerr << __FILE__ << ": on_control_command_received(target = " + << command.get_target() << ", command = " << command.get_command() + << ", args = [" << String::join(command.get_args(), ", ") << "])" + << endl; +#endif // DEBUG + HTTPResponse response(HTTPMessage::OK); + if (command.get_target() == "server") { +#ifdef DEBUG + cerr << __FILE__ << ": server" << endl; +#endif // DEBUG + if (command.get_command() == "status") { + // FIXME + stringstream response_xml; + response_xml << "" << endl; + response_xml << " " << endl; + response_xml << " PlaQui v0.6" << endl; + response_xml << " " << endl; + response_xml << " " << endl; + response_xml << "

PlaQui

" << endl; + response_xml << "

versión 0.6

" << endl; + response_xml << "

Comando

" << endl; + response_xml << "
    " << endl; + response_xml << "
  • Target: " << command.get_target() << endl; + response_xml << "
  • Command: " << command.get_command() << endl; + response_xml << "
  • Argumentos:" << endl; + response_xml << "
      " << endl; + for (Command::Arguments::const_iterator i = command.get_args().begin(); + i != command.get_args().end(); i++) { + response_xml << "
    1. " << *i << "
    2. " << endl; + } + response_xml << "
    " << endl; + response_xml << "
" << endl; + response_xml << "

Desarrollado por

" << endl; + response_xml << "
    " << endl; + response_xml << "
  • Nicolás Dimov.
  • " << endl; + response_xml << "
  • Leandro Lucarella.
  • " << endl; + response_xml << "
  • Ricardo Markiewicz.
  • " << 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.status_code = HTTPMessage::OK; + response.set_body(response_xml.str()); + } else if (command.get_command() == "stop") { + stop = true; + response.set_body("El server se apagará en instantes..."); + } else { + response.status_code = HTTPMessage::NOT_FOUND; + response.set_body("Invalid command for 'server' taget!"); + } + } else if (command.get_target() == "connection") { + if (command.get_command() == "list") { + // FIXME + TCPServer::ConnectionInfoList cil = get_connected(); + stringstream response_xml; + response_xml << "" << endl; + response_xml << " " << endl; + response_xml << " PlaQui v0.6" << endl; + response_xml << " " << endl; + response_xml << " " << endl; + response_xml << "

PlaQui

" << endl; + response_xml << "

versión 0.6

" << endl; + response_xml << "

Lista de conexiones:

" << endl; + response_xml << "
    " << endl; + for (TCPServer::ConnectionInfoList::const_iterator i = cil.begin(); + i != cil.end(); i++) { + response_xml << "
  • " << i->host + << ":" << i->port << " [host << "/" << i->port << "\">deconectar]
  • " + << 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.status_code = HTTPMessage::OK; + response.set_body(response_xml.str()); + } else if (command.get_command() == "stop") { + // TODO server->finish(); + response.set_body("La conexión se cerrará en instantes..."); + } else { + response.status_code = HTTPMessage::NOT_FOUND; + response.set_body("Invalid command for 'connection' taget!"); + } + } else if (command.get_target() == "transmission") { + response.status_code = HTTPMessage::NOT_FOUND; + response.set_body("Invalid command for 'transmission' taget!"); + } else if (command.get_target() == "plant") { + response.status_code = HTTPMessage::NOT_FOUND; + response.set_body("Invalid command for 'plant' taget!"); + } else { + response.status_code = HTTPMessage::NOT_FOUND; + response.set_body("Invalid Target!"); + } + // FIXME + response.headers["Content-Type"] = "text/html; charset=iso-8859-1"; + response.headers["Connection"] = "close"; + server->send(response); + // FIXME con timeout no debería ser necesario. Verificar cabecera Connection + // para saber si hay que finish()earlo o no. + // server->finish(); +} + +} // namespace Server + +} // namespace PlaQui +