[Cap 05] Errore logico nel Lurker Detector #3
lifeisfoo
started this conversation in
Errori e refusi
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Nell'ultimo esempio del Capitolo 5 c'è un errore che si verifica solo quando gli utenti della chat cambiano nome usando il comando
/nick.Il Lurker Detector riceve soltanto dei nomi e gestisce il timeout dall'ultima attività, quindi non sa nulla dei cambi di nickname.
Deve essere quindi il codice esterno a comunicargli questo cambiamento: infatti nel codice di gestione del cambio nickname c'è la riga
ld.renameUser(oldName, name).Questo fa in modo che la mappa interna del lurker detector rimuova il nome iniziale legato al socket (es.
192.168.1.200:30560"), e il relativo timeout associato, sostituendolo con uno nuovo (es.Alessandro).Il problema però è che il resto del codice (es. ricezione di un messaggio, chiusura della connessione...) notifica gli eventi al lurker detecor usando la funzione
socketToId()(es. quando riceve dei dati sul socket chiamald.touchUser(socketToId(sock))).La funzione
socketToId()però restituisce sempre la stringa univoca della connessione (es.<192.168.1.200:30560>) e non tiene conto del cambio nome.Quindi, dopo il cambio nickname, le azioni dell'utente non andranno più a fare il reset del timeout e dopo 30 secondi verrà espulso dalla chat.
La soluzione al problema consiste nel chiamare sempre i metodi del lurker detector usando l'output della funzione
getName(sock)che restituisce il nome attuale (quello legato al socket o quello scelto se è stato cambiato).La spiegazione del problema è molto più lunga della correzione (3 righe) che si trova in questo commit 5d28f33#diff-52c9b1ed925e1044c725e29d738b854e2cffffc6e332d45afee8a44550c78cb9
Beta Was this translation helpful? Give feedback.
All reactions