Página principal | Lista alfabética | Lista de componentes | Lista de archivos | Miembros de las clases | Archivos de los miembros | Páginas relacionadas

Referencia de la Clase Mensajero

Clase que proporciona comunicación entre los usuarios y el MUD. Más...

#include <Mensajero.hpp>

Lista de todos los miembros.

Métodos públicos

 Mensajero ()
 Constructor.
 ~Mensajero ()
 Destructor.
void EliminaCanal (const int desc)
 Elimina el canal de una conexión cerrada.
void EnviaMensaje (const QString &receptor, const QString &mensaje)
 Envía un mensaje a un jugador.
void NuevoCanal (const int desc)
 Crea un canal para una nueva conexión.
void NuevaLinea (const int desc, const QString &linea)
 Procesa una nueva línea recibida.

Atributos privados

QHash< int, Canalcanales
 Contenedor de canales abiertos.

Clases

struct  Canal
 Clase que almacena un canal del MUD. Más...


Descripción detallada

Clase que proporciona comunicación entre los usuarios y el MUD.

Definición en la línea 48 del archivo Mensajero.hpp.


Documentación del constructor y destructor

Mensajero::Mensajero  ) 
 

Constructor.

Definición en la línea 43 del archivo Mensajero.cpp.

00044 {
00045 }

Mensajero::~Mensajero  ) 
 

Destructor.

Definición en la línea 48 del archivo Mensajero.cpp.

00049 {
00050   qDebug ("Destructor de Mensajero");
00051 }


Documentación de las funciones miembro

void Mensajero::EliminaCanal const int  desc  ) 
 

Elimina el canal de una conexión cerrada.

Definición en la línea 54 del archivo Mensajero.cpp.

Hace referencia a canales, Ejecutor::Ejecuta(), y Mensajero::Canal::nom_personaje.

Referenciado por Servidor::EliminarConexion().

00055 {
00056   Canal origen = canales.value (desc);
00057 
00058   miEjecut->Ejecuta ("JugadorDesconectado(\"" + origen.nom_personaje + "\")");
00059   canales.remove (desc);
00060 }

void Mensajero::EnviaMensaje const QString &  receptor,
const QString &  mensaje
 

Envía un mensaje a un jugador.

Definición en la línea 63 del archivo Mensajero.cpp.

Hace referencia a canales, y Servidor::Escribe().

Referenciado por Librero::EnviaMensaje().

00064 {
00065   QHashIterator<int, Canal> it (canales);
00066 
00067   // Buscamos el nombre del personaje sin distinguir mayúsculas de minúsculas
00068   while (it.hasNext())
00069   {
00070     it.next();
00071 
00072     if ((it.value().nom_personaje.length() == receptor.length()) &&
00073         (it.value().nom_personaje.startsWith (receptor, Qt::CaseInsensitive)))
00074     {
00075       // Coincidencia
00076       miServer->Escribe (it.value().descriptor, mensaje);
00077       return;
00078     }
00079   }
00080 
00081   // No hay ningún jugador con ese nombre conectado al MUD
00082   qWarning ("Se ha intentado enviar un mensaje a un jugador no presente (%s)",
00083             receptor.toLatin1().constData());
00084 }

void Mensajero::NuevaLinea const int  desc,
const QString &  linea
 

Procesa una nueva línea recibida.

Definición en la línea 87 del archivo Mensajero.cpp.

Hace referencia a Guardian::Autentifica(), canales, Servidor::CierraConexion(), Ejecutor::Ejecuta(), Servidor::Escribe(), Mensajero::Canal::estado, ESTADO_CLAVE, ESTADO_DENTRO, ESTADO_PERSONAJE, ESTADO_USUARIO, Log(), MAX_FALLOS, MENSAJE_BIENVENIDA, Mensajero::Canal::nom_personaje, Mensajero::Canal::nom_usuario, Mensajero::Canal::num_fallos, y Guardian::ValidaPersonaje().

Referenciado por Conexion::Lee().

00088 {
00089   if (!canales.contains (desc))
00090     qFatal ("Intento de lectura desde un descriptor no presente.");
00091 
00092   Canal origen = canales.value (desc);
00093 
00094   switch (origen.estado)
00095   {
00096     case ESTADO_USUARIO:
00097       origen.nom_usuario = linea;
00098       origen.estado      = ESTADO_CLAVE;
00099       canales.insert (desc, origen);
00100       miServer->Escribe (desc, "Contraseña: ");
00101       break;
00102     case ESTADO_CLAVE:
00103       if (miGuard->Autentifica (origen.nom_usuario, linea))
00104       {  // Clave correcta
00105         origen.estado = ESTADO_PERSONAJE;
00106         miServer->Escribe (desc, "Personaje: ");
00107       }
00108       else
00109       {
00110         Log (6, "Intento de autentificación fallido.\n");
00111         origen.num_fallos += 1;
00112         if (origen.num_fallos >= MAX_FALLOS)
00113           // El Servidor llamará a EliminaCanal
00114           miServer->CierraConexion (desc);
00115         else
00116         {
00117           origen.estado = ESTADO_USUARIO;
00118           miServer->Escribe (desc, "\n\nNombre de usuario: ");
00119         }
00120       }
00121       canales.insert (desc, origen);
00122       break;
00123     case ESTADO_PERSONAJE:
00124       if (miGuard->ValidaPersonaje (origen.nom_usuario, linea))
00125       {  // El usuario puede dirigir a este personaje
00126         origen.nom_personaje = linea;
00127         origen.estado        = ESTADO_DENTRO;
00128         canales.insert (desc, origen);
00129         miServer->Escribe (desc, MENSAJE_BIENVENIDA);
00130         miEjecut->Ejecuta ("JugadorConectado(\"" + origen.nom_usuario + "\")");
00131       }
00132       else
00133         miServer->Escribe (desc, "Personaje: ");
00134   }
00135 }

void Mensajero::NuevoCanal const int  desc  ) 
 

Crea un canal para una nueva conexión.

Definición en la línea 138 del archivo Mensajero.cpp.

Hace referencia a canales, Mensajero::Canal::descriptor, Servidor::Escribe(), Mensajero::Canal::estado, ESTADO_USUARIO, MENSAJE_CONEXION, y Mensajero::Canal::num_fallos.

Referenciado por Servidor::incomingConnection().

00139 {
00140   Canal canal;
00141   canal.descriptor = desc;
00142   canal.estado     = ESTADO_USUARIO;
00143   canal.num_fallos = 0;
00144   canales.insert (desc, canal);
00145 
00146   // Mostramos el mensaje de conexión y pedimos el nombre de usuario
00147   miServer->Escribe (desc, MENSAJE_CONEXION);
00148   miServer->Escribe (desc, "\n\nNombre de usuario: ");
00149 }


Documentación de los datos miembro

QHash<int, Canal> Mensajero::canales [private]
 

Contenedor de canales abiertos.

Definición en la línea 84 del archivo Mensajero.hpp.

Referenciado por EliminaCanal(), EnviaMensaje(), NuevaLinea(), y NuevoCanal().


La documentación para esta clase fué generada a partir de los siguientes archivos:
Generado el Tue Nov 29 01:04:33 2005 para MUnDoCAAD MUD Engine por  doxygen 1.4.4