#include <Mensajero.hpp>
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, Canal > | canales |
| Contenedor de canales abiertos. | |
Clases | |
| struct | Canal |
| Clase que almacena un canal del MUD. Más... | |
Definición en la línea 48 del archivo Mensajero.hpp.
|
|
Constructor.
Definición en la línea 43 del archivo Mensajero.cpp.
|
|
|
Destructor.
Definición en la línea 48 del archivo Mensajero.cpp.
|
|
|
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 }
|
|
||||||||||||
|
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 }
|
|
||||||||||||
|
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 }
|
|
|
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 }
|
|
|
Contenedor de canales abiertos.
Definición en la línea 84 del archivo Mensajero.hpp. Referenciado por EliminaCanal(), EnviaMensaje(), NuevaLinea(), y NuevoCanal(). |
1.4.4