-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix register msg #135
fix register msg #135
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Muy buen trabajo!! Ole ese formateo de fechas. Revisate el par de comentarios de formato de código y vemos lo de mandarlo en varios mensajes, vaya a ser que lo considere solo 1 el cliente y no funcione bien...
@@ -62,6 +64,10 @@ | |||
// # define RPL_AWAY(nickname, username, hostname, awayMessage) USER_ID(nickname, username, hostname) + " " + (nickname) + " :" + (awayMessage) | |||
// # define RPL_CHANNEL_MODE_IS(nickname, username, hostname, channel, mode, modeParams) USER_ID(nickname, username, hostname) + " " + (channel) + " " + (mode) + " " + (modeParams) | |||
# define RPL_END_OF_NAMES(nickname, usermane, hostname, channel) USER_ID(nickname, username, hostname) + " " + (channel) + " :End of NAMES list." | |||
# define RPL_WELCOME(nickname, username, hostname) std::string("Welcome to the Internet Relay Network ") + USER_ID(nickname, username, hostname) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hace falta el std::string??
# define RPL_WELCOME(nickname, username, hostname) std::string("Welcome to the Internet Relay Network ") + USER_ID(nickname, username, hostname) | |
# define RPL_WELCOME(nickname, username, hostname) "Welcome to the Internet Relay Network " + USER_ID(nickname, username, hostname) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A mi eso me pesaba con la de los rpl que tengo que hacer. Es necesario porque coge el USER_ID como un string y el mensaje del principio como un const char * o algo así. En mi tarea lo arreglaré
Damos por bueno esto, me traigo los cambios y lo arreglo con el resto
src/User.cpp
Outdated
std::string created = RPL_CREATED(date); | ||
std::string myInfo = RPL_MYINFO(_serverName, userModes, channelModes); | ||
|
||
std::string response = welcome + "\n" + yourHost + "\n" + created + "\n" + myInfo; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
creo que en vez de enviar 1 mensaje deberíamos de mandar 4, porque cada uno debe de estar terminado por \r\n ... creo
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
si, lo que dice @ruzafa8
@@ -75,5 +81,6 @@ | |||
|
|||
std::vector<std::string> split(const std::string &s, char delim); | |||
bool isNumber(const std::string& s); | |||
std::string getCurrentDate(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
std::string getCurrentDate() const;
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Si lo pongo da error, según copilot dice que no tiene sentido poner const en una función no miembro, porque no hay objeto para modificar. Este es el error"a type qualifier is not allowed on a nonmember function"
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ah claro, que es el libUtils. Cuando hagas el singleton añadelo a todas las funciones
src/libsUtils.cpp
Outdated
<< std::setfill('0') << std::setw(2) << now->tm_hour << ':' | ||
<< std::setfill('0') << std::setw(2) << now->tm_min << ':' | ||
<< std::setfill('0') << std::setw(2) << now->tm_sec << " UTC"; | ||
return oss.str(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Se puede hacer mucho más sencillo con la función de ctime strftime
, que literalmente da formato a la fecha.
En palabras de copilot:
En C++98, puedes usar la biblioteca para trabajar con fechas y horas. Sin embargo, para formatear la fecha y hora en el formato específico que mencionaste (Sun, 14 Jan 2024 22:56:48 UTC), necesitarás usar la función strftime, que permite especificar un formato de fecha y hora personalizado.
Aquí te muestro cómo puedes hacerlo:
`
// Obtener la hora actual
std::time_t t = std::time(0);
std::tm* now = std::localtime(&t);
// Buffer para almacenar la fecha y hora formateada
char buffer[100];
// Formato de fecha y hora: Sun, 14 Jan 2024 22:56:48 UTC
strftime(buffer, sizeof(buffer), "%a, %d %b %Y %H:%M:%S UTC", now);`
En este código, %a se reemplaza por el nombre abreviado del día de la semana, %d por el día del mes, %b por el nombre abreviado del mes, %Y por el año, %H por la hora, %M por el minuto y %S por el segundo.
Tendrías que hacer una conversión del buffer a string y ya
@@ -75,5 +81,6 @@ | |||
|
|||
std::vector<std::string> split(const std::string &s, char delim); | |||
bool isNumber(const std::string& s); | |||
std::string getCurrentDate(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ah claro, que es el libUtils. Cuando hagas el singleton añadelo a todas las funciones
src/User.cpp
Outdated
std::string channelModes = "iklot"; | ||
|
||
std::string welcome = RPL_WELCOME(_nickname, _username, _hostname) + "\r\n"; | ||
std::string yourHost = RPL_YOURHOST(_serverName) + "\r\n"; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Tu no tienes que poner el \r\n, eso ya se está gestionando por otro lado
src/User.cpp
Outdated
std::string myInfo = RPL_MYINFO(_serverName, channelModes) + "\r\n"; | ||
|
||
Server& server = Server::getInstance(); | ||
server.sendMessage(this->getFd(), welcome); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
elimina la variable welcome y ponlo aqui el rpl como parametro (igual en el resto)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Te lo doy por ok. Lo que falta (unos detalles de clean code sin importancia) ya lo arreglo yo en mi rama, que me hace falta los rpl nuevos
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Perfecto 🗡️
Este es un ejemplo para que veáis como ha quedado, he seguido los pasos de las rpl y de la issue.
He tenido que añadir dos librerias ctime para el tema del tiempo y iomanip para setfill(añade 0 para terminar de llenar el numero y quede bien ej: "07") y setw(determina el año del numero).